Hi Ted,

Ted Unangst wrote on Sat, Aug 26, 2017 at 02:35:01PM -0400:
> Ingo Schwarze wrote:

>> +    if ((cp1 = mmap(NULL, sb1.st_size, PROT_READ, MAP_PRIVATE,
>> +        fd1, 0)) == NULL) {
>> +            say(MANDOC_DB, "&mmap");
>> +            goto err;
>> +    }
>> +    if ((cp2 = mmap(NULL, sb2.st_size, PROT_READ, MAP_PRIVATE,
>> +        fd2, 0)) == NULL) {
>> +            say(tfn, "&mmap");
>> +            goto err;
>> +    }

> mmap returns MAP_FAILED (-1), not null, on failure.

Ooops, indeed.  The check is correct in read.c and dbm_map.c,
but i stumbled here.  Fixed now, thanks.

>> +    for (i = 0; i < sb1.st_size; i++)
>> +            if (cp1[i] != cp2[i])
>> +                    goto err;

> this could just be memcmp.

I avoided that over quibbles about the argument type (off_t vs.
size_t), though i admit that database files larger than a Gigabyte
make no sense at all.

If you consider that an improvement, i'm not opposed to using
memcmp(3).  But i don't really have a good idea what to do if
st_size does happen to exceed SIZE_MAX.  Maybe just error out?

Yours,
  Ingo

Reply via email to