ยปCore Development>Code coverage>Python/getcwd.c

Python code coverage for Python/getcwd.c

#countcontent
1n/a
2n/a/* Two PD getcwd() implementations.
3n/a Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */
4n/a
5n/a#include <stdio.h>
6n/a#include <errno.h>
7n/a
8n/a#ifdef HAVE_GETWD
9n/a
10n/a/* Version for BSD systems -- use getwd() */
11n/a
12n/a#ifdef HAVE_SYS_PARAM_H
13n/a#include <sys/param.h>
14n/a#endif
15n/a
16n/a#ifndef MAXPATHLEN
17n/a#if defined(PATH_MAX) && PATH_MAX > 1024
18n/a#define MAXPATHLEN PATH_MAX
19n/a#else
20n/a#define MAXPATHLEN 1024
21n/a#endif
22n/a#endif
23n/a
24n/aextern char *getwd(char *);
25n/a
26n/achar *
27n/agetcwd(char *buf, int size)
28n/a{
29n/a char localbuf[MAXPATHLEN+1];
30n/a char *ret;
31n/a
32n/a if (size <= 0) {
33n/a errno = EINVAL;
34n/a return NULL;
35n/a }
36n/a ret = getwd(localbuf);
37n/a if (ret != NULL && strlen(localbuf) >= (size_t)size) {
38n/a errno = ERANGE;
39n/a return NULL;
40n/a }
41n/a if (ret == NULL) {
42n/a errno = EACCES; /* Most likely error */
43n/a return NULL;
44n/a }
45n/a strncpy(buf, localbuf, size);
46n/a return buf;
47n/a}
48n/a
49n/a#else /* !HAVE_GETWD */
50n/a
51n/a/* Version for really old UNIX systems -- use pipe from pwd */
52n/a
53n/a#ifndef PWD_CMD
54n/a#define PWD_CMD "/bin/pwd"
55n/a#endif
56n/a
57n/achar *
58n/agetcwd(char *buf, int size)
59n/a{
60n/a FILE *fp;
61n/a char *p;
62n/a int sts;
63n/a if (size <= 0) {
64n/a errno = EINVAL;
65n/a return NULL;
66n/a }
67n/a if ((fp = popen(PWD_CMD, "r")) == NULL)
68n/a return NULL;
69n/a if (fgets(buf, size, fp) == NULL || (sts = pclose(fp)) != 0) {
70n/a errno = EACCES; /* Most likely error */
71n/a return NULL;
72n/a }
73n/a for (p = buf; *p != '\n'; p++) {
74n/a if (*p == '\0') {
75n/a errno = ERANGE;
76n/a return NULL;
77n/a }
78n/a }
79n/a *p = '\0';
80n/a return buf;
81n/a}
82n/a
83n/a#endif /* !HAVE_GETWD */