diff options
-rw-r--r-- | sysdeps/posix/getcwd.c | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/readdir64.c | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c index e466a4a8bf..066aab7de7 100644 --- a/sysdeps/posix/getcwd.c +++ b/sysdeps/posix/getcwd.c @@ -97,11 +97,12 @@ # define __lstat64 lstat # define __closedir closedir # define __opendir opendir -# define __readdir readdir +# define __readdir64 readdir # define __fdopendir fdopendir # define __openat openat # define __rewinddir rewinddir # define __openat64 openat +# define dirent64 dirent #else # include <not-cancel.h> #endif @@ -260,7 +261,7 @@ __getcwd_generic (char *buf, size_t size) while (!(thisdev == rootdev && thisino == rootino)) { - struct dirent *d; + struct dirent64 *d; dev_t dotdev; ino_t dotino; bool mount_point; @@ -313,7 +314,7 @@ __getcwd_generic (char *buf, size_t size) /* Clear errno to distinguish EOF from error if readdir returns NULL. */ __set_errno (0); - d = __readdir (dirstream); + d = __readdir64 (dirstream); /* When we've iterated through all directory entries without finding one with a matching d_ino, rewind the stream and consider each @@ -326,7 +327,7 @@ __getcwd_generic (char *buf, size_t size) { use_d_ino = false; __rewinddir (dirstream); - d = __readdir (dirstream); + d = __readdir64 (dirstream); } if (d == NULL) diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c index 7d4b0001b3..170a889c51 100644 --- a/sysdeps/unix/sysv/linux/readdir64.c +++ b/sysdeps/unix/sysv/linux/readdir64.c @@ -42,7 +42,11 @@ weak_alias (__readdir64, readdir) /* The compat code expects the 'struct direct' with d_ino being a __ino_t instead of __ino64_t. */ # include <shlib-compat.h> +# if IS_IN(rtld) +weak_alias (__readdir64, readdir64) +# else versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2); +# endif # if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) # include <olddirent.h> # define __READDIR attribute_compat_text_section __old_readdir64 |