summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2018-08-20 20:20:31 -0400
committerRich Felker <dalias@aerifal.cx>2018-08-20 20:33:19 -0400
commit767f7a1091af3a3dcee2f7a49d0713359a81961c (patch)
treebdfded5ab7f34c369c9015464b56c96fff57ffd3
parent8b2b61e0001281be0dcd3dedc899bf187172fecb (diff)
downloadmusl-767f7a1091af3a3dcee2f7a49d0713359a81961c.tar.gz
remove erroneous SYMLINK_MAX definition from limits.h, pathconf
POSIX requires the symlink function to fail with ENAMETOOLONG if the link contents to be written exceed SYMLINK_MAX in length, but neither Linux nor our syscall wrapper code enforce this. the value 255 for SYMLINK_MAX is not meaningful and does not seem to have been motivated by anything except perhaps a wrong assumption that a definition was mandatory. it has been present (though moving through bits to top-level limits.h) since the beginning of the project history. [f]pathconf is entitled to return -1 as the limit for conf names for which there is no hard limit, with the usual POSIX note that an indefinite limit does not imply an infinite limit. in principle we might should report a limit for filesystems that impose one, but such functionality is not currently present for any of the pathconf limits, and adding it is beyond the scope of fixing the incorrect limit.
-rw-r--r--include/limits.h1
-rw-r--r--src/conf/fpathconf.c2
2 files changed, 1 insertions, 2 deletions
diff --git a/include/limits.h b/include/limits.h
index 9cb5426f..ab163a22 100644
--- a/include/limits.h
+++ b/include/limits.h
@@ -42,7 +42,6 @@
#define PIPE_BUF 4096
#define FILESIZEBITS 64
#define NAME_MAX 255
-#define SYMLINK_MAX 255
#define PATH_MAX 4096
#define NGROUPS_MAX 32
#define ARG_MAX 131072
diff --git a/src/conf/fpathconf.c b/src/conf/fpathconf.c
index 8eb037e6..e6aca5cf 100644
--- a/src/conf/fpathconf.c
+++ b/src/conf/fpathconf.c
@@ -24,7 +24,7 @@ long fpathconf(int fd, int name)
[_PC_REC_MIN_XFER_SIZE] = 4096,
[_PC_REC_XFER_ALIGN] = 4096,
[_PC_ALLOC_SIZE_MIN] = 4096,
- [_PC_SYMLINK_MAX] = SYMLINK_MAX,
+ [_PC_SYMLINK_MAX] = -1,
[_PC_2_SYMLINKS] = 1
};
if (name >= sizeof(values)/sizeof(values[0])) {