From d598f8169bbc9178c59d35f0df95637a70d3377f Mon Sep 17 00:00:00 2001 From: Zach van Rijn Date: Mon, 10 Apr 2023 04:09:56 -0500 Subject: [PATCH] Revert "getcwd: Speed up on Linux. Add support for Android." This reverts commit 356a414e8c15ef3f8cc7b7157427c8ce9a9f7c1b. diff --git a/lib/getcwd.c b/lib/getcwd.c index 0530630c43..04b8d2df39 100644 --- a/lib/getcwd.c +++ b/lib/getcwd.c @@ -173,9 +173,6 @@ __getcwd_generic (char *buf, size_t size) #if HAVE_OPENAT_SUPPORT int fd = AT_FDCWD; bool fd_needs_closing = false; -# if defined __linux__ - bool proc_fs_not_mounted = false; -# endif #else char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1]; char *dotlist = dots; @@ -441,67 +438,6 @@ __getcwd_generic (char *buf, size_t size) thisdev = dotdev; thisino = dotino; - -#if HAVE_OPENAT_SUPPORT - /* On some platforms, a system call returns the directory that FD points - to. This is useful if some of the ancestor directories of the - directory are unreadable, because in this situation the loop that - climbs up the ancestor hierarchy runs into an EACCES error. - For example, in some Android app, /data/data/com.termux is readable, - but /data/data and /data are not. */ -# if defined __linux__ - /* On Linux, in particular, if /proc is mounted, - readlink ("/proc/self/fd/") - returns the directory, if its length is < 4096. (If the length is - >= 4096, it fails with error ENAMETOOLONG, even if the buffer that we - pass to the readlink function would be large enough.) */ - if (!proc_fs_not_mounted) - { - char namebuf[14 + 10 + 1]; - sprintf (namebuf, "/proc/self/fd/%u", (unsigned int) fd); - char linkbuf[4096]; - ssize_t linklen = readlink (namebuf, linkbuf, sizeof linkbuf); - if (linklen < 0) - { - if (errno != ENAMETOOLONG) - /* If this call was not successful, the next one will likely be - not successful either. */ - proc_fs_not_mounted = true; - } - else - { - dirroom = dirp - dir; - if (dirroom < linklen) - { - if (size != 0) - { - __set_errno (ERANGE); - goto lose; - } - else - { - char *tmp; - size_t oldsize = allocated; - - allocated += linklen - dirroom; - if (allocated < oldsize - || ! (tmp = realloc (dir, allocated))) - goto memory_exhausted; - - /* Move current contents up to the end of the buffer. */ - dirp = memmove (tmp + dirroom + (allocated - oldsize), - tmp + dirroom, - oldsize - dirroom); - dir = tmp; - } - } - dirp -= linklen; - memcpy (dirp, linkbuf, linklen); - break; - } - } -# endif -#endif } if (dirstream && __closedir (dirstream) != 0) -- 2.25.1