X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libiberty%2Fgetcwd.c;h=28f26eb179ff37fae4965070aee983a414e2966a;hb=907bdc3db533c0dcadda72b0f402358576538208;hp=06d55c04f58699752e91909fef0e69ed2ede726f;hpb=3c67ba63fe49eb98772c621befa986b0e8ec6bbc;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libiberty/getcwd.c b/libiberty/getcwd.c index 06d55c04f58..28f26eb179f 100644 --- a/libiberty/getcwd.c +++ b/libiberty/getcwd.c @@ -2,21 +2,18 @@ This function is in the public domain. */ /* -NAME - getcwd -- get absolute pathname for current working directory -SYNOPSIS - char *getcwd (char pathname[len], len) +@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) -DESCRIPTION - Copy the absolute pathname for the current working directory into - the supplied buffer and return a pointer to the buffer. If the - current directory's path doesn't fit in LEN characters, the result - is NULL and errno is set. +Copy the absolute pathname for the current working directory into +@var{pathname}, which is assumed to point to a buffer of at least +@var{len} bytes, and return a pointer to the buffer. If the current +directory's path doesn't fit in @var{len} characters, the result is +@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, +@code{getcwd} will obtain @var{len} bytes of space using +@code{malloc}. -BUGS - Emulated via the getwd() call, which is reasonable for most - systems that do not have getcwd(). +@end deftypefn */ @@ -26,6 +23,12 @@ BUGS #include #endif #include +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif extern char *getwd (); extern int errno; @@ -35,9 +38,7 @@ extern int errno; #endif char * -getcwd (buf, len) - char *buf; - int len; +getcwd (char *buf, size_t len) { char ourbuf[MAXPATHLEN]; char *result; @@ -48,6 +49,13 @@ getcwd (buf, len) errno = ERANGE; return 0; } + if (!buf) { + buf = (char*)malloc(len); + if (!buf) { + errno = ENOMEM; + return 0; + } + } strcpy (buf, ourbuf); } return buf;