]>
Savannah Git Hosting - gnulib.git/commit
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.