From: Adhemerval Zanella Date: Tue, 25 Aug 2020 20:22:09 +0000 (-0300) Subject: Use LFS readdir in generic POSIX getcwd [BZ# 22899] X-Git-Tag: glibc-2.33~515 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=804200923df4f40dbde09ea708869d252caba288;p=thirdparty%2Fglibc.git Use LFS readdir in generic POSIX getcwd [BZ# 22899] Checked on x86_64-linux-gnu and i686-linux-gnu. --- diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c index e466a4a8bf8..066aab7de7f 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 #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 7d4b0001b3a..170a889c519 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 +# 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 # define __READDIR attribute_compat_text_section __old_readdir64