summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2023-04-10 09:14:53 +0000
committerZach van Rijn <me@zv.io>2023-04-10 09:30:49 +0000
commitf9f1195d1490e17a72b1f2fda12aeedf1aec8d8f (patch)
tree06a82726a932ff14d4961edb077f7f14f7385b96
parentdb3f3501151c012751012659e149a7f80e4efd54 (diff)
downloadpackages-f9f1195d1490e17a72b1f2fda12aeedf1aec8d8f.tar.gz
packages-f9f1195d1490e17a72b1f2fda12aeedf1aec8d8f.tar.bz2
packages-f9f1195d1490e17a72b1f2fda12aeedf1aec8d8f.tar.xz
packages-f9f1195d1490e17a72b1f2fda12aeedf1aec8d8f.zip
system/coreutils: revert gnulib getcwd optimization. fixes #985, #987.
This commit reverts a commit in gnulib in coreutils that caused a functional change between coreutils { 9.1 --> 9.2 }. tl;dr: * on some systems, `(cd //tmp && /bin/pwd)` may return '/tmp' or '//tmp' depending on several factors; this is generally OK * in a musl-based Adélie environment, we identified a change in this behavior between coreutils updates during testing * the functional change was bisected to coreutils commit d42e4e9191abb818fc0e28507085a3945eed1477, which itself bumps the gnulib submodule, and is unrelated to coreutils itself * gnulib commit 356a414e8c15ef3f8cc7b7157427c8ce9a9f7c1b has been identified as the culprit for this functional change See #987 for more information.
-rw-r--r--system/coreutils/APKBUILD6
-rw-r--r--system/coreutils/revert-gnulib-getcwd-speedup-linux.patch92
2 files changed, 96 insertions, 2 deletions
diff --git a/system/coreutils/APKBUILD b/system/coreutils/APKBUILD
index 6a4c7957e..6201d14ed 100644
--- a/system/coreutils/APKBUILD
+++ b/system/coreutils/APKBUILD
@@ -3,7 +3,7 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=coreutils
pkgver=9.2
-pkgrel=0
+pkgrel=1
pkgdesc="Basic file, shell, and text manipulation utilities"
url="https://www.gnu.org/software/coreutils/"
arch="all"
@@ -23,6 +23,7 @@ source="https://ftp.gnu.org/gnu/coreutils/$pkgname-$pkgver.tar.xz
localename-test-fix.patch
test-df-symlink-bindmount.patch
test-tee-avoid-eintr.patch
+ revert-gnulib-getcwd-speedup-linux.patch
"
[ "${CBUILD}" != "${CHOST}" ] && source="$source
051_all_coreutils-mangen.patch
@@ -78,7 +79,8 @@ fd97fccd661befc558b3afb3e32c82dd2cef511a05e6129d49540599297c1b59ab1f109e63a12f58
eaba7ad1c5b43d25dc96baaf6f01be5976f9f64c26ea55e1c78d6a3f12825f2f0e998aae7f2ad6d9b2637a3d11586ffe21b87fbbd3c1bb6c9898c5963cb2a32c gnulib-test-fixes.patch
b1509e5678a05f24d6e764c047546e5e34a7fbd5edb59c7debedb144a0096d8ac247c7e2722a5f68c90751e5280bec743c9a6ed3e1433c1916294d68d7bca109 localename-test-fix.patch
15a91b343b6c4d6ef31b322cd2787893eacccb81a7e0202aeac17c3aa18130e6feb5ddb32f39187b4cf2a5d6a9a536a0a6f992e4da90d954a72f158d0df6e4ba test-df-symlink-bindmount.patch
-43bf6a1934a22478c93f4680180f1d7f157c9a5f7320bd8efac3f6e850db08bb57d32f4658eca34ee711e61538ef1932bd6abf730b4d2371e1a128c6d148939f test-tee-avoid-eintr.patch"
+43bf6a1934a22478c93f4680180f1d7f157c9a5f7320bd8efac3f6e850db08bb57d32f4658eca34ee711e61538ef1932bd6abf730b4d2371e1a128c6d148939f test-tee-avoid-eintr.patch
+84b8c141052a5db99f4d470a0f6f74ca01041f04e573ca0774f69a931bbe061c1b95cf5b09ab5f08f4322e04c6fc124449f368b51ccd6e837dec686b8521d86a revert-gnulib-getcwd-speedup-linux.patch"
[ "${CBUILD}" != "${CHOST}" ] && sha512sums="
bae804f057252c25452ac178c545dc2c4b4775cbfbdcfd4775edd1a4ed6507882bfac39e2b11ad01b74230ca48d761bf62f11bde5bcbc35a6e5a61cbe4a46e36 051_all_coreutils-mangen.patch
"
diff --git a/system/coreutils/revert-gnulib-getcwd-speedup-linux.patch b/system/coreutils/revert-gnulib-getcwd-speedup-linux.patch
new file mode 100644
index 000000000..fa8f66395
--- /dev/null
+++ b/system/coreutils/revert-gnulib-getcwd-speedup-linux.patch
@@ -0,0 +1,92 @@
+From d598f8169bbc9178c59d35f0df95637a70d3377f Mon Sep 17 00:00:00 2001
+From: Zach van Rijn <me@zv.io>
+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/<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
+