standards/142255: scandir prototype in dirent.h isn't compliant with POSIX 2008

Garrett Wollman wollman at
Wed Jan 6 23:55:49 UTC 2010

<<On Sun, 3 Jan 2010 15:00:11 GMT, Kostik Belousov <kostikbel at> said:

>  The change of the prototype shall also fix alphasort(3). And then, each
>  in-tree consumer should be updated.
>  scandir(3) is historical BSD interface, that only appeared in SUSv4.
>  It seems that Solaris and possibly glibc are conforming, so FreeBSD
>  should probably follow the route.
I believe someone at least complained about the Standard's broken
prototypes, subsequent to the approval of the current standard,
although I don't recall what the outcome was.

>  @@ -95,7 +95,7 @@ typedef	void *	DIR;
>   #if __BSD_VISIBLE
>   DIR	*__opendir2(const char *, int);
>  -int	 alphasort(const void *, const void *);
>  +int	 alphasort(const struct dirent **, const struct dirent **);
>   int	 getdents(int, char *, int);
>   int	 getdirentries(int, char *, int, long *);
>   #endif

If we're going to break the historical 4.4BSD prototype to match the
broken one in SUSv4, the declaration should be moved to an appropriate
section of the header file.  (I haven't checked -- is this interface
in the base standard or the XSI option?  If the latter we should just
ignore it -- we should not be trying to implement XSI's mistakes.)


More information about the freebsd-standards mailing list