summaryrefslogtreecommitdiff
path: root/src/libstddjb/sarealpath.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2019-10-20 03:04:05 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2019-10-20 03:04:05 +0000
commit56c1fdfaf3d415b920aa98ab9d8f7ba2a5509708 (patch)
treefb5f198694530e12841cd6ac5850c9e44dbc545d /src/libstddjb/sarealpath.c
parente7ea3358ef627675fbd4669516617688a7e3dd94 (diff)
downloadskalibs-56c1fdfaf3d415b920aa98ab9d8f7ba2a5509708.tar.xz
Real fix for undefined PATH_MAX
Diffstat (limited to 'src/libstddjb/sarealpath.c')
-rw-r--r--src/libstddjb/sarealpath.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libstddjb/sarealpath.c b/src/libstddjb/sarealpath.c
index 0e316b2..8c994c4 100644
--- a/src/libstddjb/sarealpath.c
+++ b/src/libstddjb/sarealpath.c
@@ -1,5 +1,6 @@
/* ISC license. */
+#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <skalibs/stralloc.h>
@@ -9,9 +10,20 @@ int sarealpath (stralloc *sa, char const *path)
{
if (sa->s)
{
- if (!stralloc_readyplus(sa, 128)) return -1 ;
+#ifdef PATH_MAX
+ if (!stralloc_readyplus(sa, PATH_MAX)) return -1 ;
if (!realpath(path, sa->s + sa->len)) return -1 ;
sa->len += strlen(sa->s + sa->len) ;
+#else
+ char *p = realpath(path, 0) ;
+ if (!p) return -1 ;
+ if (!stralloc_cats(sa, p) || !stralloc_0(sa))
+ {
+ free(p) ;
+ return -1 ;
+ }
+ free(p) ;
+#endif
}
else
{