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

On Wed, 6 Jan 2010, Garrett Wollman wrote:

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

> 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.

There's no trace of it in the opengroup man page for alphasort+scandir
most easily found by google (not clear how recent or authoritative this
is), and I couldn't find the complaint either.

>> @@ -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.)

This is done.

What do you think about the single `const' in the broken prototypes?
For fts, you preserved the struct pointer part of the brokenness but
added a second `const'. I suppose the Standard intentionally left out
the second `const' for the same reasons as for execve() and strtol().