annotate Python/getcwd.c @ 13255:916fb024ce94 legacy-trunk

Change copyright notice.
author Guido van Rossum <guido@python.org>
date Fri, 30 Jun 2000 23:50:40 +0000
parents 8c8de5b736dc
children 87ee82e5c56d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
1 /***********************************************************
2062
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1848
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1848
diff changeset
3 The Netherlands.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
4
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
5 All Rights Reserved
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
6
13255
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
7 Copyright (c) 2000, BeOpen.com.
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
8 Copyright (c) 1995-2000, Corporation for National Research Initiatives.
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
9 Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
10 All rights reserved.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
11
13255
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
12 See the file "Misc/COPYRIGHT" for information on usage and
916fb024ce94 Change copyright notice.
Guido van Rossum <guido@python.org>
parents: 13096
diff changeset
13 redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
14
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
15 ******************************************************************/
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 144
diff changeset
16
144
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
17 /* Two PD getcwd() implementations.
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
18 Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
19
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
20 #include <stdio.h>
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
21 #include <errno.h>
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
22
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
23 #ifdef HAVE_GETWD
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
24
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
25 /* Version for BSD systems -- use getwd() */
144
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
26
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
27 #ifdef HAVE_SYS_PARAM_H
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
28 #include <sys/param.h>
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
29 #endif
116
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
31 #ifndef MAXPATHLEN
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
32 #define MAXPATHLEN 1024
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
33 #endif
116
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 extern char *getwd();
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 char *
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 getcwd(buf, size)
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 char *buf;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 int size;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 {
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 char localbuf[MAXPATHLEN+1];
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 char *ret;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 if (size <= 0) {
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 errno = EINVAL;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 return NULL;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 }
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 ret = getwd(localbuf);
13096
8c8de5b736dc Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
50 if (ret != NULL && strlen(localbuf) >= (size_t)size) {
116
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 errno = ERANGE;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 return NULL;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 }
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 if (ret == NULL) {
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 errno = EACCES; /* Most likely error */
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 return NULL;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 }
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 strncpy(buf, localbuf, size);
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 return buf;
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 }
0a02ca9dcd6e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
62 #else /* !HAVE_GETWD */
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
63
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
64 /* Version for really old UNIX systems -- use pipe from pwd */
144
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
65
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
66 #ifndef PWD_CMD
144
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
67 #define PWD_CMD "/bin/pwd"
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
68 #endif
144
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
69
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
70 char *
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
71 getcwd(buf, size)
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
72 char *buf;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
73 int size;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
74 {
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
75 FILE *fp;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
76 char *p;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
77 int sts;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
78 if (size <= 0) {
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
79 errno = EINVAL;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
80 return NULL;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
81 }
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
82 if ((fp = popen(PWD_CMD, "r")) == NULL)
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
83 return NULL;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
84 if (fgets(buf, size, fp) == NULL || (sts = pclose(fp)) != 0) {
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
85 errno = EACCES; /* Most likely error */
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
86 return NULL;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
87 }
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
88 for (p = buf; *p != '\n'; p++) {
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
89 if (*p == '\0') {
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
90 errno = ERANGE;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
91 return NULL;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
92 }
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
93 }
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
94 *p = '\0';
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
95 return buf;
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
96 }
c70eefe48029 Added version that opens a pipe to /bin/pwd.
Guido van Rossum <guido@python.org>
parents: 116
diff changeset
97
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
98 #endif /* !HAVE_GETWD */