Subject: Re: Comparing version numbers
To: Alistair Crooks <agc@wasabisystems.com>
From: Rene Hexel <rh@netbsd.org>
List: tech-pkg
Date: 08/02/2002 10:47:14
On Fri, 2002-08-02 at 06:58, Alistair Crooks wrote:
> Basically, all of the comparison work is done in
>
> pkg_install/lib/str.c
>
> An array of 64-bit integers is constructed, using the rules in the comment
> in line 156 (ish).
Thanks, Al, that was a good pointer. I always had some sort of fuzzy
intuitive understanding of what's actually used for comparison, but it's
good to have a look at the real code.
> '_' encodes as 'patchlevel', or '0'
I'm not sure I understand this part, though. Here is a sniplet from
the code that does the encoding:
if (*num == '_') {
num += 1;
if (isdigit(*(num + 1))) {
ap->v[ap->c++] = Dot;
return 1;
Shouldn't that isdigit() part read
if (isdigit(*num)) {
instead? 'num' has already been incremented in the preceding line, so
that would check whether the next character is actually a digit. The
original code actually checks the 2nd character after the '_'. Maybe
I'm missing something here ...
Cheers
,
Rene