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

[ Available lists | Index of freebsd-standards | Month of Jan 2010 | Week of 6 Jan 2010 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Garrett Wollman <wollman@csail.mit.edu>
Date
6 Jan 2010 23:55:49
Subject
Re: standards/142255: scandir prototype in dirent.h isn't compliant with POSIX 2008
Message-ID
19269.8963.733084.213387@khavrinen.csail.mit.edu

In reply to
References to

[ Hide this part ]
<<On Sun, 3 Jan 2010 15:00:11 GMT, Kostik Belousov <kostikbel@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


Elapsed time: 0.263 seconds