svn commit: r303530 - head/lib/libc/gen

Bruce Evans brde at optusnet.com.au
Sat Jul 30 08:53:01 UTC 2016


On Sat, 30 Jul 2016, Andrey Chernov wrote:

> On 30.07.2016 7:15, Bruce Evans wrote:
>> On Sat, 30 Jul 2016, Andrey A. Chernov wrote:
>>
>>> Log:
>>>  Reset errno for readdirfunc() before contunue.
>>
>> In C99, library functions are not permitted to set errno to 0.  The glob()
>> family shouldn't use a different (worse) convention, and POSIX doesn't
>> seem to have any special wording to allow different behaviour.
>
> This is historic practice for this function at least since GLOB_LIMIT
> was introduced (in 2001) and common across NetBSD/OpenBSD. Existent
> programs may relay on that to check that limit is reached and not
> allocation error, so with few additional overwriting from my side I add
> nothing new:
>
> Revision 80525
> Modified Sun Jul 29 00:52:37 2001 UTC (15 years ago) by mikeh
> ...
> errno = 0 is documented. See glob(3), GLOB_NOSPACE section too.

Hmm.  This is not in the BUGS section.  Strangely, the related non-bug
that glob() may fail and set errno (to a reasonable but nonstandard and
undocumented value?) is in the BUGS section.  I guess this is a bug
in conjunction with the promise to set errno to 0 for some failures.

> The real problem is that glob(3) is very limited in error return codes,
> so they reuse existent codes with errno hack.

It should have just used the least-unclosely-related standard errno
instead of 0.

Bruce


More information about the svn-src-head mailing list