standards/142255: scandir prototype in dirent.h isn't compliant
with POSIX 2008
Garrett Wollman
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;
> __BEGIN_DECLS
> #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.)
-GAWollman
More information about the freebsd-standards
mailing list