X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fxgetcwd.c;h=1409bcfba7d684d628e6b1283a2e7303f1d6dd4e;hb=b5a2c641784fe37cba7c02f109edda0fbed47de3;hp=85ac368738950bfd7183c944ca2eedc8871ae8ee;hpb=e6995fc57b107d86e2601d1c3f3538d42ba1bade;p=gnulib.git diff --git a/lib/xgetcwd.c b/lib/xgetcwd.c index 85ac36873..1409bcfba 100644 --- a/lib/xgetcwd.c +++ b/lib/xgetcwd.c @@ -45,6 +45,8 @@ char *getwd (); # define getcwd(Buf, Max) getwd (Buf) #endif +#include "xalloc.h" + /* Return the current directory, newly allocated, arbitrarily long. Return NULL and set errno on error. */ @@ -52,7 +54,10 @@ char * xgetcwd () { #if HAVE_GETCWD_NULL - return getcwd (NULL, 0); + char *cwd = getcwd (NULL, 0); + if (! cwd && errno == ENOMEM) + xalloc_die (); + return cwd; #else /* The initial buffer size for the working directory. A power of 2 @@ -65,12 +70,9 @@ xgetcwd () while (1) { - char *cwd; + char *buf = xmalloc (buf_size); + char *cwd = getcwd (buf, buf_size); int saved_errno; - char *buf = malloc (buf_size); - if (! buf) - return NULL; - cwd = getcwd (buf, buf_size); if (cwd) return cwd; saved_errno = errno; @@ -79,10 +81,7 @@ xgetcwd () return NULL; buf_size *= 2; if (buf_size == 0) - { - errno = ENOMEM; - return NULL; - } + xalloc_die (); } #endif }