Signed-off-by: Yoshinori Sato <ysato(a)users.sourceforge.jp>
---
libc/misc/dirent/__readdir.c | 39 ++++++++++++++++++++++++++++++++++++++
libc/misc/dirent/readdir.c | 45 ++++----------------------------------------
libc/misc/dirent/readdir64.c | 12 ++++++++++--
3 files changed, 53 insertions(+), 43 deletions(-)
create mode 100644 libc/misc/dirent/__readdir.c
diff --git a/libc/misc/dirent/__readdir.c b/libc/misc/dirent/__readdir.c
new file mode 100644
index 0000000..18f6d79
--- /dev/null
+++ b/libc/misc/dirent/__readdir.c
@@ -0,0 +1,39 @@
+__DIRENT_TYPE *__READDIR(DIR * dir)
+{
+ ssize_t bytes;
+ __DIRENT_TYPE *de;
+
+ if (!dir) {
+ __set_errno(EBADF);
+ return NULL;
+ }
+
+ __UCLIBC_MUTEX_LOCK(dir->dd_lock);
+
+ do {
+ if (dir->dd_size <= dir->dd_nextloc) {
+ /* read dir->dd_max bytes of directory entries. */
+ bytes = __GETDENTS(dir->dd_fd, dir->dd_buf, dir->dd_max);
+ if (bytes <= 0) {
+ de = NULL;
+ goto all_done;
+ }
+ dir->dd_size = bytes;
+ dir->dd_nextloc = 0;
+ }
+
+ de = (__DIRENT_TYPE *) (((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);
+
+all_done:
+ __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
+ return de;
+}
diff --git a/libc/misc/dirent/readdir.c b/libc/misc/dirent/readdir.c
index 7517106..b5a23bb 100644
--- a/libc/misc/dirent/readdir.c
+++ b/libc/misc/dirent/readdir.c
@@ -10,53 +10,16 @@
#include <stddef.h>
#include "dirstream.h"
-#ifndef __READDIR
+#if !defined __ARCH_HAS_DEPRECATED_SYSCALLS__
# define __READDIR readdir
# define __DIRENT_TYPE struct dirent
# define __GETDENTS __getdents
-#endif
-
-__DIRENT_TYPE *__READDIR(DIR * dir)
-{
- ssize_t bytes;
- __DIRENT_TYPE *de;
-
- if (!dir) {
- __set_errno(EBADF);
- return NULL;
- }
-
- __UCLIBC_MUTEX_LOCK(dir->dd_lock);
-
- do {
- if (dir->dd_size <= dir->dd_nextloc) {
- /* read dir->dd_max bytes of directory entries. */
- bytes = __GETDENTS(dir->dd_fd, dir->dd_buf, dir->dd_max);
- if (bytes <= 0) {
- de = NULL;
- goto all_done;
- }
- dir->dd_size = bytes;
- dir->dd_nextloc = 0;
- }
-
- de = (__DIRENT_TYPE *) (((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);
+# include "__readdir.c"
-all_done:
- __UCLIBC_MUTEX_UNLOCK(dir->dd_lock);
- return de;
-}
libc_hidden_def(__READDIR)
-#if defined __UCLIBC_HAS_LFS__ && __WORDSIZE == 64
+# if WORDSIZE == 64
strong_alias_untyped(readdir,readdir64)
libc_hidden_def(readdir64)
+# endif
#endif
diff --git a/libc/misc/dirent/readdir64.c b/libc/misc/dirent/readdir64.c
index 17577a7..e16d6a1 100644
--- a/libc/misc/dirent/readdir64.c
+++ b/libc/misc/dirent/readdir64.c
@@ -6,11 +6,19 @@
#include <_lfs_64.h>
#include <dirent.h>
+#include <errno.h>
+#define __need_NULL
+#include <stddef.h>
+#include "dirstream.h"
#if __WORDSIZE != 64
# define __READDIR readdir64
# define __DIRENT_TYPE struct dirent64
# define __GETDENTS __getdents64
-
-# include "readdir.c"
#endif
+
+# include "__readdir.c"
+
+libc_hidden_def(__READDIR)
+strong_alias_untyped(readdir64,readdir)
+libc_hidden_def(readdir)
--
2.6.1