Mercurial > hg > octave-lojdl > gnulib-hg
changeset 3433:656345934fec
(xgetcwd): Reorganize to avoid some duplication.
Use an initial, malloc'd, buffer of length 128 rather than
a statically allocated one of length 1024.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Fri, 31 Aug 2001 11:39:16 +0000 |
parents | d7be61723351 |
children | 02c41c27a2e2 |
files | lib/xgetcwd.c |
diffstat | 1 files changed, 12 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/xgetcwd.c +++ b/lib/xgetcwd.c @@ -54,38 +54,25 @@ #if defined __GLIBC__ && __GLIBC__ >= 2 return getcwd (NULL, 0); #else - char *ret; - size_t path_max; - char buf[1024]; - - errno = 0; - ret = getcwd (buf, sizeof (buf)); - if (ret != NULL) - return xstrdup (buf); - if (errno != ERANGE) - return NULL; - - path_max = 1 << 10; + size_t buf_size = 128; /* must be a power of 2 */ + char *buf = NULL; - for (;;) + while (1) { - char *cwd = (char *) xmalloc (path_max); - int save_errno; + char *ret; + buf = (char *) xrealloc (buf, buf_size); - errno = 0; - ret = getcwd (cwd, path_max); - if (ret != NULL) - return ret; - save_errno = errno; - free (cwd); - if (save_errno != ERANGE) + cwd = getcwd (buf, buf_size); + if (cwd != NULL) + return cwd; + if (errno != ERANGE) { - errno = save_errno; + free (buf); return NULL; } - path_max *= 2; - if (path_max == 0) + buf_size *= 2; + if (buf_size == 0) xalloc_die (); } #endif