+++ /dev/null
-\r
-/* Two PD getcwd() implementations.\r
- Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */\r
-\r
-#include <stdio.h>\r
-#include <errno.h>\r
-\r
-#ifdef HAVE_GETWD\r
-\r
-/* Version for BSD systems -- use getwd() */\r
-\r
-#ifdef HAVE_SYS_PARAM_H\r
-#include <sys/param.h>\r
-#endif\r
-\r
-#ifndef MAXPATHLEN\r
-#if defined(PATH_MAX) && PATH_MAX > 1024\r
-#define MAXPATHLEN PATH_MAX\r
-#else\r
-#define MAXPATHLEN 1024\r
-#endif\r
-#endif\r
-\r
-extern char *getwd(char *);\r
-\r
-char *\r
-getcwd(char *buf, int size)\r
-{\r
- char localbuf[MAXPATHLEN+1];\r
- char *ret;\r
-\r
- if (size <= 0) {\r
- errno = EINVAL;\r
- return NULL;\r
- }\r
- ret = getwd(localbuf);\r
- if (ret != NULL && strlen(localbuf) >= (size_t)size) {\r
- errno = ERANGE;\r
- return NULL;\r
- }\r
- if (ret == NULL) {\r
- errno = EACCES; /* Most likely error */\r
- return NULL;\r
- }\r
- strncpy(buf, localbuf, size);\r
- return buf;\r
-}\r
-\r
-#else /* !HAVE_GETWD */\r
-\r
-/* Version for really old UNIX systems -- use pipe from pwd */\r
-\r
-#ifndef PWD_CMD\r
-#define PWD_CMD "/bin/pwd"\r
-#endif\r
-\r
-char *\r
-getcwd(char *buf, int size)\r
-{\r
- FILE *fp;\r
- char *p;\r
- if (size <= 0) {\r
- errno = EINVAL;\r
- return NULL;\r
- }\r
- if ((fp = popen(PWD_CMD, "r")) == NULL)\r
- return NULL;\r
- if (fgets(buf, size, fp) == NULL || pclose(fp) != 0) {\r
- errno = EACCES; /* Most likely error */\r
- return NULL;\r
- }\r
- for (p = buf; *p != '\n'; p++) {\r
- if (*p == '\0') {\r
- errno = ERANGE;\r
- return NULL;\r
- }\r
- }\r
- *p = '\0';\r
- return buf;\r
-}\r
-\r
-#endif /* !HAVE_GETWD */\r