/* Emulate getcwd using getwd. This function is in the public domain. */ /* @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) 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}. @end deftypefn */ #include "config.h" #ifdef HAVE_SYS_PARAM_H #include #endif #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif extern char *getwd (); extern int errno; #ifndef MAXPATHLEN #define MAXPATHLEN 1024 #endif char * getcwd (char *buf, size_t len) { char ourbuf[MAXPATHLEN]; char *result; result = getwd (ourbuf); if (result) { if (strlen (ourbuf) >= len) { errno = ERANGE; return 0; } if (!buf) { buf = (char*)malloc(len); if (!buf) { errno = ENOMEM; return 0; } } strcpy (buf, ourbuf); } return buf; }