diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-07-20 13:19:36 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-07-20 13:19:36 -0400 |
commit | 75552ab845005d5b386d4c1383d9c10193168847 (patch) | |
tree | f2cbce375f646a4609ffc76660f5f90b97868aa6 /include/dirent.h | |
parent | 41ea9da89530817441761dfc1f3c716c17d7ccb4 (diff) |
dirent: push dirent type to prototypes
This syncs the dirent related functions with the glibc behavior -- rather
than take void pointers everywhere, make the struct dirent pointers
explicit in the API. After all, the functions themselves will cast the
pointers to a dirent structure, so if it isn't as expected, people will
crash.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'include/dirent.h')
-rw-r--r-- | include/dirent.h | 74 |
1 files changed, 58 insertions, 16 deletions
diff --git a/include/dirent.h b/include/dirent.h index d17f10998..25fd77c4e 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -249,7 +249,8 @@ libc_hidden_proto(dirfd) extern int scandir (__const char *__restrict __dir, struct dirent ***__restrict __namelist, int (*__selector) (__const struct dirent *), - int (*__cmp) (__const void *, __const void *)) + int (*__cmp) (__const struct dirent **, + __const struct dirent **)) __nonnull ((1, 2)); # else # ifdef __REDIRECT @@ -257,7 +258,8 @@ extern int __REDIRECT (scandir, (__const char *__restrict __dir, struct dirent ***__restrict __namelist, int (*__selector) (__const struct dirent *), - int (*__cmp) (__const void *, __const void *)), + int (*__cmp) (__const struct dirent **, + __const struct dirent **)), scandir64) __nonnull ((1, 2)); # else # define scandir scandir64 @@ -270,18 +272,21 @@ extern int __REDIRECT (scandir, extern int scandir64 (__const char *__restrict __dir, struct dirent64 ***__restrict __namelist, int (*__selector) (__const struct dirent64 *), - int (*__cmp) (__const void *, __const void *)) + int (*__cmp) (__const struct dirent64 **, + __const struct dirent64 **)) __nonnull ((1, 2)); # endif /* Function to compare two `struct dirent's alphabetically. */ # ifndef __USE_FILE_OFFSET64 -extern int alphasort (__const void *__e1, __const void *__e2) +extern int alphasort (__const struct dirent **__e1, + __const struct dirent **__e2) __THROW __attribute_pure__ __nonnull ((1, 2)); # else # ifdef __REDIRECT -extern int __REDIRECT (alphasort, - (__const void *__e1, __const void *__e2), +extern int __REDIRECT_NTH (alphasort, + (__const struct dirent **__e1, + __const struct dirent **__e2), alphasort64) __attribute_pure__ __nonnull ((1, 2)); # else # define alphasort alphasort64 @@ -289,30 +294,67 @@ extern int __REDIRECT (alphasort, # endif # if defined __USE_GNU && defined __USE_LARGEFILE64 -extern int alphasort64 (__const void *__e1, __const void *__e2) +extern int alphasort64 (__const struct dirent64 **__e1, + __const struct dirent64 **__e2) __THROW __attribute_pure__ __nonnull ((1, 2)); # endif +#endif /* Use BSD or misc or XPG7. */ -/* Function to compare two `struct dirent's alphabetically. */ + +#if defined __USE_BSD || defined __USE_MISC +/* Read directory entries from FD into BUF, reading at most NBYTES. + Reading starts at offset *BASEP, and *BASEP is updated with the new + position after reading. Returns the number of bytes read; zero when at + end of directory; or -1 for errors. */ +# ifndef __USE_FILE_OFFSET64 +extern __ssize_t getdirentries (int __fd, char *__restrict __buf, + size_t __nbytes, + __off_t *__restrict __basep) + __THROW __nonnull ((2, 4)); +# else +# ifdef __REDIRECT +extern __ssize_t __REDIRECT_NTH (getdirentries, + (int __fd, char *__restrict __buf, + size_t __nbytes, + __off64_t *__restrict __basep), + getdirentries64) __nonnull ((2, 4)); +# else +# define getdirentries getdirentries64 +# endif +# endif + +# ifdef __USE_LARGEFILE64 +extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf, + size_t __nbytes, + __off64_t *__restrict __basep) + __THROW __nonnull ((2, 4)); +# endif +#endif /* Use BSD or misc. */ + +#ifdef __USE_GNU +/* Function to compare two `struct dirent's by name & version. */ # ifndef __USE_FILE_OFFSET64 -extern int versionsort (__const void *__e1, __const void *__e2) +extern int versionsort (__const struct dirent **__e1, + __const struct dirent **__e2) __THROW __attribute_pure__ __nonnull ((1, 2)); # else # ifdef __REDIRECT -extern int __REDIRECT (versionsort, - (__const void *__e1, __const void *__e2), - versionsort64) __attribute_pure__ __nonnull ((1, 2)); +extern int __REDIRECT_NTH (versionsort, + (__const struct dirent **__e1, + __const struct dirent **__e2), + versionsort64) + __attribute_pure__ __nonnull ((1, 2)); # else # define versionsort versionsort64 # endif # endif -# if defined __USE_GNU && defined __USE_LARGEFILE64 -extern int versionsort64 (__const void *__e1, __const void *__e2) +# ifdef __USE_LARGEFILE64 +extern int versionsort64 (__const struct dirent64 **__e1, + __const struct dirent64 **__e2) __THROW __attribute_pure__ __nonnull ((1, 2)); # endif - -#endif /* Use BSD or misc. */ +#endif /* Use GNU. */ __END_DECLS |