Mercurial > cpython-lru_cache-weakref
view Python/getcwd.c @ 49955:878d40468c4e legacy-trunk
Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
| author | Vinay Sajip <vinay_sajip@yahoo.co.uk> |
|---|---|
| date | Wed, 03 Dec 2008 23:22:58 +0000 |
| parents | b535c191a44b |
| 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 */
