Mercurial > cpython-lru_cache-weakref
diff Python/getcwd.c @ 144:c70eefe48029 legacy-trunk
Added version that opens a pipe to /bin/pwd.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 19 Feb 1991 12:28:18 +0000 |
| parents | 0a02ca9dcd6e |
| children | 853b736a6a9e |
line wrap: on
line diff
--- a/Python/getcwd.c Tue Feb 19 12:27:35 1991 +0000 +++ b/Python/getcwd.c Tue Feb 19 12:28:18 1991 +0000 @@ -1,9 +1,18 @@ -/* Quick hack to get posix.getcwd() working for pure BSD 4.3 */ +/* Two PD getcwd() implementations. + Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */ + +/* #define NO_GETWD /* Turn this on to popen pwd instead of calling getwd() */ + +#include <stdio.h> +#include <errno.h> + +extern int errno; + +#ifndef NO_GETWD + +/* Default: Version for BSD systems -- use getwd() */ #include "sys/param.h" -#include "errno.h" - -extern int errno; extern char *getwd(); @@ -32,4 +41,38 @@ return buf; } -/* PS: for really old systems you must popen /bin/pwd ... */ +#else + +/* NO_GETWD defined: Version for backward UNIXes -- popen /bin/pwd */ + +#define PWD_CMD "/bin/pwd" + +char * +getcwd(buf, size) + char *buf; + int size; +{ + FILE *fp; + char *p; + int sts; + if (size <= 0) { + errno = EINVAL; + return NULL; + } + if ((fp = popen(PWD_CMD, "r")) == NULL) + return NULL; + if (fgets(buf, size, fp) == NULL || (sts = pclose(fp)) != 0) { + errno = EACCES; /* Most likely error */ + return NULL; + } + for (p = buf; *p != '\n'; p++) { + if (*p == '\0') { + errno = ERANGE; + return NULL; + } + } + *p = '\0'; + return buf; +} + +#endif
