From bef4efb18c54f4b2285557a1b5a5a037f3dce019 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Wed, 16 Mar 2011 21:07:18 +0100 Subject: scandir,readdir[_t]: use one common source for X() and X64() Since the sources differ only minimally, use only scandir.c,readdir[_t].c and redefine the used functions accordingly. Use a strong_alias instead of compiling *64.c if __WORDSIZE = 64 Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- libc/misc/dirent/readdir64_r.c | 62 ++++-------------------------------------- 1 file changed, 6 insertions(+), 56 deletions(-) (limited to 'libc/misc/dirent/readdir64_r.c') diff --git a/libc/misc/dirent/readdir64_r.c b/libc/misc/dirent/readdir64_r.c index ba726003d..c045cbdea 100644 --- a/libc/misc/dirent/readdir64_r.c +++ b/libc/misc/dirent/readdir64_r.c @@ -5,62 +5,12 @@ */ #include <_lfs_64.h> - -#include -#include -#include -#include #include -#include "dirstream.h" - - -int readdir64_r(DIR *dir, struct dirent64 *entry, struct dirent64 **result) -{ - int ret; - ssize_t bytes; - struct dirent64 *de; - - if (!dir) { - __set_errno(EBADF); - return(EBADF); - } - de = NULL; - - __UCLIBC_MUTEX_LOCK(dir->dd_lock); - - do { - if (dir->dd_size <= dir->dd_nextloc) { - /* read dir->dd_max bytes of directory entries. */ - bytes = __getdents64(dir->dd_fd, dir->dd_buf, dir->dd_max); - if (bytes <= 0) { - *result = NULL; - ret = (bytes==0)? 0 : errno; - goto all_done; - } - dir->dd_size = bytes; - dir->dd_nextloc = 0; - } - - de = (struct dirent64 *) (((char *) dir->dd_buf) + dir->dd_nextloc); - - /* Am I right? H.J. */ - dir->dd_nextloc += de->d_reclen; - - /* We have to save the next offset here. */ - dir->dd_nextoff = de->d_off; - /* Skip deleted files. */ - } while (de->d_ino == 0); - - if (de == NULL) { - *result = NULL; - } else { - *result = memcpy (entry, de, de->d_reclen); - } - ret = 0; -all_done: +#if __WORDSIZE != 64 +# define __READDIR_R readdir64_r +# define __DIRENT_TYPE struct dirent64 +# define __GETDENTS __getdents64 - __UCLIBC_MUTEX_UNLOCK(dir->dd_lock); - return((de != NULL)? 0 : ret); -} -libc_hidden_def(readdir64_r) +# include "readdir_r.c" +#endif -- cgit v1.2.3