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 (buf, len) 42 char *buf; 43 size_t len; 44{ 45 char ourbuf[MAXPATHLEN]; 46 char *result; 47 48 result = getwd (ourbuf); 49 if (result) { 50 if (strlen (ourbuf) >= len) { 51 errno = ERANGE; 52 return 0; 53 } 54 if (!buf) { 55 buf = (char*)malloc(len); 56 if (!buf) { 57 errno = ENOMEM; 58 return 0; 59 } 60 } 61 strcpy (buf, ourbuf); 62 } 63 return buf; 64} 65