|  | /* 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; | 
|  | } |