On 2018-01-13 21:09, Laurent Bercot wrote:
> > What is the reason for clearing _POSIX_C_SOURCE from trystrnlen.c?
>  The set of functions made visible by a libc is generally bigger when
> you do *not* define any POSIX or XOPEN macro: systems don't feel like
> they have to respect a particular namespace, and export all they have,
> or close to all they have. _POSIX_C_SOURCE usually means "only declare
> what is strictly POSIX, and if the application is trying to use an
> extension, it's an error".
>  This is true even for functions actually defined by POSIX, such as
> futimens(), the openat() family of functions, and the whole
> sys/socket.h family of functions; some (arguably old) libcs mistakenly
> fail to expose them when POSIX macros are defined, but expose them
> when no such macro is defined. Sometimes they also require a specific
> extension macro to expose them. The biggest culprits of this are
> Solaris, MacOS, and NetBSD. The only libcs I've never seen stray from
> POSIX visibility rules are glibc and musl.
>  And so, when testing a function's existence, I usually remove all
> POSIX macro definitions, assuming that the visibility will be higher
> and the function has a higher chance of being detected - so the
> system's function is used instead of the workaround.
>  In the case of strnlen, though, it appears that this assumption is
> wrong. I just tested without the undefs, and unless I missed something
> again, strnlen is correctly detected on all the systems that have it.
>  My bad then, it's a bug. The latest git head performs the trystrnlen.c
> test without the undefs; please test it. If it works for you, I'll
> release a new version of skalibs with the fix.

Thanks for the detailed explanation. I tested the latest git head and
the problem is solved. Thank you!



Reply via email to