1/* Emulate getcwd using getwd. 2 This function is in the public domain. */ 3 4/* 5 6@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) 7 8Copy the absolute pathname for the current working directory into 9@var{pathname}, which is assumed to point to a buffer of at least 10@var{len} bytes, and return a pointer to the buffer. If the current 11directory's path doesn't fit in @var{len} characters, the result is 12@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, 13@code{getcwd} will obtain @var{len} bytes of space using 14@code{malloc}. 15 16@end deftypefn 17 18*/ 19 20#include "config.h" 21 22#ifdef HAVE_SYS_PARAM_H 23#include <sys/param.h> 24#endif 25#include <errno.h> 26#ifdef HAVE_STRING_H 27#include <string.h> 28#endif 29#ifdef HAVE_STDLIB_H 30#include <stdlib.h> 31#endif 32 33extern char *getwd (); 34extern int errno; 35 36#ifndef MAXPATHLEN 37#define MAXPATHLEN 1024 38#endif 39 40char * 41getcwd (char *buf, size_t len) 42{ 43 char ourbuf[MAXPATHLEN]; 44 char *result; 45 46 result = getwd (ourbuf); 47 if (result) { 48 if (strlen (ourbuf) >= len) { 49 errno = ERANGE; 50 return 0; 51 } 52 if (!buf) { 53 buf = (char*)malloc(len); 54 if (!buf) { 55 errno = ENOMEM; 56 return 0; 57 } 58 } 59 strcpy (buf, ourbuf); 60 } 61 return buf; 62} 63