Mercurial > cpython-lru_cache-weakref
view Python/getcwd.c @ 52201:fcdffd85a8bd
Merged revisions 70444 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r70444 | mark.dickinson | 2009-03-18 08:22:51 +0000 (Wed, 18 Mar 2009) | 3 lines
Fix bug in _insert_thousands_sep: too much zero padding could be
added for 'n' formats with non-repeating thousands-separator.
........
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Wed, 18 Mar 2009 08:25:36 +0000 |
| parents | 29ae5e0fc348 |
| children | e38335d4df91 5cea27275af1 |
line wrap: on
line source
/* Two PD getcwd() implementations. Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */ #include <stdio.h> #include <errno.h> #ifdef HAVE_GETWD /* Version for BSD systems -- use getwd() */ #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif #ifndef MAXPATHLEN #if defined(PATH_MAX) && PATH_MAX > 1024 #define MAXPATHLEN PATH_MAX #else #define MAXPATHLEN 1024 #endif #endif extern char *getwd(char *); char * getcwd(char *buf, int size) { char localbuf[MAXPATHLEN+1]; char *ret; if (size <= 0) { errno = EINVAL; return NULL; } ret = getwd(localbuf); if (ret != NULL && strlen(localbuf) >= (size_t)size) { errno = ERANGE; return NULL; } if (ret == NULL) { errno = EACCES; /* Most likely error */ return NULL; } strncpy(buf, localbuf, size); return buf; } #else /* !HAVE_GETWD */ /* Version for really old UNIX systems -- use pipe from pwd */ #ifndef PWD_CMD #define PWD_CMD "/bin/pwd" #endif char * getcwd(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 /* !HAVE_GETWD */
