From: Pádraig Brady
Date: Sat, 6 Jul 2019 18:43:11 +0000 (+0100) Subject: areadlink-with-size: guess a buffer size with 0 size X-Git-Tag: v1.0~4770 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=0ccc444f3d2dc3ad1b4d682f7d8403633942ed39;p=gnulib.git areadlink-with-size: guess a buffer size with 0 size The size is usually taken from st_size, which can be zero, resulting in inefficient operation as seen with: $ strace -e readlink stat -c %N /proc/$$/cwd readlink("/proc/9036/cwd", "/", 1) = 1 readlink("/proc/9036/cwd", "/h", 2) = 2 readlink("/proc/9036/cwd", "/hom", 4) = 4 readlink("/proc/9036/cwd", "/home/pa", 8) = 8 readlink("/proc/9036/cwd", "/home/padraig", 16) = 13 Instead let zero select an initial memory allocation of 128 bytes, which most symlinks fit within. * lib/areadlink-with-size.c (areadlink_with_size): Start with a 128 byte buffer, for SIZE == 0. * lib/areadlinkat-with-size.c (areadlinkat_with_size): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 885907d5c6..0b061317cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2019-07-06 Pádraig Brady
+
+ areadlink-with-size: guess a buffer size with 0 size
+ The size is usually taken from st_size, which can be zero,
+ resulting in inefficient operation.
+ Instead let zero select an initial memory allocation
+ of 128 bytes, which most symlinks fit within.
+ * lib/areadlink-with-size.c (areadlink_with_size):
+ Start with a 128 byte buffer, for SIZE == 0.
+ * lib/areadlinkat-with-size.c (areadlinkat_with_size): Likewise.
+
2019-07-06 Konstantin Kharlamov