standards/142255: scandir prototype in dirent.h isn't compliant
with POSIX 2008
wollman at csail.mit.edu
Wed Jan 6 23:55:49 UTC 2010
<<On Sun, 3 Jan 2010 15:00:11 GMT, Kostik Belousov <kostikbel at gmail.com> 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 *);
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