From e24571d3364556bebac63d256b27a7eebf116b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 26 Jul 2011 12:49:44 +0200 Subject: [PATCH] Do not use PATH_MAX. --- src/ChangeLog | 4 ++++ src/init.c | 27 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0dbabfa2..425802d6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2011-07-26 Carlos Martín Nieto (tiny change) + + * init.c (home_dir): Allocate path buffer dinamically. + 2011-07-26 Giuseppe Scrivano * retr.c (retrieve_url): Do not register redirects when in spider mode. diff --git a/src/init.c b/src/init.c index 277d4a74..17f9f9e6 100644 --- a/src/init.c +++ b/src/init.c @@ -366,8 +366,9 @@ defaults (void) char * home_dir (void) { - static char buf[PATH_MAX]; - static char *home; + static char *buf = NULL; + static char *home, *ret; + int len; if (!home) { @@ -380,12 +381,21 @@ home_dir (void) const char *_w32_get_argv0 (void); /* in libwatt.a/pcconfig.c */ char *p; - strcpy (buf, _w32_get_argv0 ()); + buff = _w32_get_argv0 (); + p = strrchr (buf, '/'); /* djgpp */ if (!p) p = strrchr (buf, '\\'); /* others */ assert (p); - *p = '\0'; + + len = p - buff + 1; + buff = malloc (len + 1); + if (buff == NULL) + return NULL; + + strncpy (buff, _w32_get_argv0 (), len); + buff[len] = '\0'; + home = buf; #elif !defined(WINDOWS) /* If HOME is not defined, try getting it from the password @@ -393,8 +403,7 @@ home_dir (void) struct passwd *pwd = getpwuid (getuid ()); if (!pwd || !pwd->pw_dir) return NULL; - strcpy (buf, pwd->pw_dir); - home = buf; + home = pwd->pw_dir; #else /* !WINDOWS */ /* Under Windows, if $HOME isn't defined, use the directory where `wget.exe' resides. */ @@ -403,7 +412,11 @@ home_dir (void) } } - return home ? xstrdup (home) : NULL; + ret = home ? xstrdup (home) : NULL; + if (buf) + free (buf); + + return ret; } /* Check the 'WGETRC' environment variable and return the file name