From d7043da28199f2a98c202a025c8bccf93329deb9 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 12 Feb 2016 01:32:57 -0800 Subject: [PATCH] realpath: prefer the buffer size given by pathconf() If realpath(..., NULL) doesn't work, we have to allocate a buffer blindly. Use the value returned from pathconf() in preference from compile-time constants. Signed-off-by: H. Peter Anvin --- realpath.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/realpath.c b/realpath.c index 82adfc90..48b685ab 100644 --- a/realpath.c +++ b/realpath.c @@ -80,15 +80,19 @@ char *nasm_realpath(const char *rel_path) int path_max = -1; char *buf; -# ifdef PATH_MAX - path_max = PATH_MAX; /* SUSv2 */ -# elif defined(MAXPATHLEN) - path_max = MAXPATHLEN; /* Solaris */ -# elif defined(HAVE_PATHCONF) && defined(_PC_PATH_MAX) - path_max = pathconf(path, _PC_PATH_MAX); /* POSIX */ -# endif - if (path_max < 0) +#if defined(HAVE_PATHCONF) && defined(_PC_PATH_MAX) + path_max = pathconf(rel_path, _PC_PATH_MAX); /* POSIX */ +#endif + + if (path_max < 0) { +#ifdef PATH_MAX + path_max = PATH_MAX; /* SUSv2 */ +#elif defined(MAXPATHLEN) + path_max = MAXPATHLEN; /* Solaris */ +#else path_max = 65536; /* Crazily high, we hope */ +#endif + } buf = nasm_malloc(path_max); -- 2.11.4.GIT