From 7927384a1d78ec87282d54c3af7563935185d145 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 19 Feb 1991 12:28:18 +0000 Subject: Added version that opens a pipe to /bin/pwd. --- Python/getcwd.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/Python/getcwd.c b/Python/getcwd.c index 340acab..03ff8e8 100644 --- a/Python/getcwd.c +++ b/Python/getcwd.c @@ -1,10 +1,19 @@ -/* Quick hack to get posix.getcwd() working for pure BSD 4.3 */ +/* Two PD getcwd() implementations. + Author: Guido van Rossum, CWI Amsterdam, Jan 1991, . */ -#include "sys/param.h" -#include "errno.h" +/* #define NO_GETWD /* Turn this on to popen pwd instead of calling getwd() */ + +#include +#include extern int errno; +#ifndef NO_GETWD + +/* Default: Version for BSD systems -- use getwd() */ + +#include "sys/param.h" + extern char *getwd(); char * @@ -32,4 +41,38 @@ getcwd(buf, size) 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 -- cgit v0.12