NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

lib/43222: alphasort(3) confusion

>Number:         43222
>Category:       lib
>Synopsis:       alphasort(3) confusion
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 29 08:35:00 +0000 2010
>Originator:     Jukka Ruohonen
>Release:        NetBSD 5.0_STABLE - 5.99.27

The scandir(3) and alphasort(3) functions appeared recently in POSIX-2008.
In NetBSD the alphasort(3) is however prototyped as:

        alphasort(const void *d1, const void *d2);

While on other systems (namely, Linux and FreeBSD), and in the standard, it
is specified more precisely as

        alphasort(const struct dirent **d1, const struct dirent **d2);


man alphasort(3), code inspection.

See also:

From the FreeBSD CVS commit:

revision 1.10
date: 2010/01/04 15:40:17;  author: kib;  state: Exp;  lines: +3 -4
SVN rev 201512 on 2010-01-04 15:40:17Z by kib

Modernize scandir(3) and alphasort(3) interfaces according to the IEEE
Std 1003.1-2008. Both Linux and Solaris conforms to the new definitions,
so we better follow too (older glibc used old BSDish alphasort prototype
and corresponding type of the comparision function for scandir). While
there, change the definitions of the functions to ANSI C and fix several
style issues nearby.

Remove requirement for "sys/types.h" include for functions from manpage.

POSIX also requires that alphasort(3) sorts as if strcoll(3) was used,
but leave the strcmp(3) call in the function for now.

Adapt in-tree callers of scandir(3) to new declaration. The fact that
select_sections() from catman(1) could modify supplied struct dirent is
a bug.

PR:     standards/142255
MFC after:      2 weeks


Either change the prototype or close this as irrelevant.

Home | Main Index | Thread Index | Old Index