| /* 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 <sys/param.h> | 
 | #endif | 
 | #include <errno.h> | 
 | #ifdef HAVE_STRING_H | 
 | #include <string.h> | 
 | #endif | 
 | #ifdef HAVE_STDLIB_H | 
 | #include <stdlib.h> | 
 | #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; | 
 | } |