Staging
v0.5.1
https://github.com/python/cpython
Revision d08417182f7045b53c467934dbd36a51f39e7d5b authored by Ronald Oussoren on 29 September 2009, 13:01:59 UTC, committed by Ronald Oussoren on 29 September 2009, 13:01:59 UTC
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75131 | ronald.oussoren | 2009-09-29 15:00:44 +0200 (Tue, 29 Sep 2009) | 8 lines

  * Update the Mac/README file. Add the list of OSX-specific configure options
    to that README file with some explanation.

  * Be more strict in the configure script: complain loudly when the user has
    specified invalid combinations of OSX-specific configure arguments.

    The error message refers to the Mac/README file for more information.
........
1 parent 6d50b37
Raw File
Tip revision: d08417182f7045b53c467934dbd36a51f39e7d5b authored by Ronald Oussoren on 29 September 2009, 13:01:59 UTC
Merged revisions 75131 via svnmerge from
Tip revision: d084171
getcwd.c

/* 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 */
back to top