Mercurial > hg > octave-nkf > gnulib-hg
annotate lib/getcwd.c @ 8623:27cfd50b8f6c
Fix missing escape.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 03 Apr 2007 22:45:13 +0000 |
parents | 11ae25a37675 |
children | bbbbbf4cd1c5 |
rev | line source |
---|---|
7944
a1d177cd9523
* doc/gnulib-tool.texi (Initial import): Update to match current
Paul Eggert <eggert@cs.ucla.edu>
parents:
7863
diff
changeset
|
1 /* Copyright (C) 1991,92,93,94,95,96,97,98,99,2004,2005,2006,2007 Free Software |
5907 | 2 Foundation, Inc. |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
3 This file is part of the GNU C Library. |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
4 |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
5 This program is free software; you can redistribute it and/or modify |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
7 the Free Software Foundation; either version 2, or (at your option) |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
8 any later version. |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
9 |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
13 GNU General Public License for more details. |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
14 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
15 You should have received a copy of the GNU General Public License along |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
16 with this program; if not, write to the Free Software Foundation, |
5848
a48fb0e98c8c
*** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents:
5499
diff
changeset
|
17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
18 |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6949
diff
changeset
|
19 #if !_LIBC |
6259
96c32553b4c6
Use a consistent style for including <config.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5955
diff
changeset
|
20 # include <config.h> |
8199
51d32a83a7df
Move more declarations into <unistd.h>.
Bruno Haible <bruno@clisp.org>
parents:
8075
diff
changeset
|
21 # include <unistd.h> |
8214
822e9380142e
Minor fixups to port to Solaris 10 with Sun C 5.8.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8202
diff
changeset
|
22 # include "dirfd.h" |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
23 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
24 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
25 #include <errno.h> |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
26 #include <sys/types.h> |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
27 #include <sys/stat.h> |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
28 #include <stdbool.h> |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
29 #include <stddef.h> |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
30 |
5955
ace6ea191424
Assume HAVE_FCNTL_H (i.e., include <fcntl.h> unconditionally,
Jim Meyering <jim@meyering.net>
parents:
5907
diff
changeset
|
31 #include <fcntl.h> /* For AT_FDCWD on Solaris 9. */ |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
32 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
33 #ifndef __set_errno |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
34 # define __set_errno(val) (errno = (val)) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
35 #endif |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
36 |
6949
96af1224c6fa
* backupfile.c, dirfd.h, fts.c, getcwd.c, glob.c, glob_.h:
Paul Eggert <eggert@cs.ucla.edu>
parents:
6934
diff
changeset
|
37 #include <dirent.h> |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
38 #ifndef _D_EXACT_NAMLEN |
6934
d68ff786c180
* lib/getloadavg.c: Use __VMS, not VMS.
Paul Eggert <eggert@cs.ucla.edu>
parents:
6912
diff
changeset
|
39 # define _D_EXACT_NAMLEN(d) strlen ((d)->d_name) |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
40 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
41 #ifndef _D_ALLOC_NAMLEN |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
42 # define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
43 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
44 |
6275 | 45 #include <unistd.h> |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
46 #include <stdlib.h> |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
47 #include <string.h> |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
48 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
49 #if _LIBC |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
50 # ifndef mempcpy |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
51 # define mempcpy __mempcpy |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
52 # endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
53 #endif |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
54 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
55 #include <limits.h> |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
56 |
6647
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
57 /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
58 value exceeds INT_MAX, so its use as an int doesn't conform to the |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
59 C standard, and GCC and Sun C complain in some cases. */ |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
60 #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
61 # undef AT_FDCWD |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
62 # define AT_FDCWD (-3041965) |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
63 #endif |
ca74ccfe8d1b
* getcwd.c (AT_FDCWD): Work around a bug in Solaris 9 and 10, where
Paul Eggert <eggert@cs.ucla.edu>
parents:
6439
diff
changeset
|
64 |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
65 #ifdef ENAMETOOLONG |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
66 # define is_ENAMETOOLONG(x) ((x) == ENAMETOOLONG) |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
67 #else |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
68 # define is_ENAMETOOLONG(x) 0 |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
69 #endif |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
70 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
71 #ifndef MAX |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
72 # define MAX(a, b) ((a) < (b) ? (b) : (a)) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
73 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
74 #ifndef MIN |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
75 # define MIN(a, b) ((a) < (b) ? (a) : (b)) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
76 #endif |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
77 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
78 #ifndef PATH_MAX |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
79 # ifdef MAXPATHLEN |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
80 # define PATH_MAX MAXPATHLEN |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
81 # else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
82 # define PATH_MAX 1024 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
83 # endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
84 #endif |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
85 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
86 #if D_INO_IN_DIRENT |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
87 # define MATCHING_INO(dp, ino) ((dp)->d_ino == (ino)) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
88 #else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
89 # define MATCHING_INO(dp, ino) true |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
90 #endif |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
91 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
92 #if !_LIBC |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
93 # define __getcwd getcwd |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
94 # define __lstat lstat |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
95 # define __closedir closedir |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
96 # define __opendir opendir |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
97 # define __readdir readdir |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
98 #endif |
7863 | 99 |
100 /* The results of opendir() in this file are not used with dirfd and fchdir, | |
101 therefore save some unnecessary recursion in fchdir.c. */ | |
102 #undef opendir | |
103 #undef closedir | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
104 |
5907 | 105 /* Get the name of the current working directory, and put it in SIZE |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
106 bytes of BUF. Returns NULL if the directory couldn't be determined or |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
107 SIZE was too small. If successful, returns BUF. In GNU, if BUF is |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
108 NULL, an array is allocated with `malloc'; the array is SIZE bytes long, |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
109 unless SIZE == 0, in which case it is as big as necessary. */ |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
110 |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
111 char * |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
112 __getcwd (char *buf, size_t size) |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
113 { |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
114 /* Lengths of big file name components and entire file names, and a |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
115 deep level of file name nesting. These numbers are not upper |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
116 bounds; they are merely large values suitable for initial |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
117 allocations, designed to be large enough for most real-world |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
118 uses. */ |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
119 enum |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
120 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
121 BIG_FILE_NAME_COMPONENT_LENGTH = 255, |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
122 BIG_FILE_NAME_LENGTH = MIN (4095, PATH_MAX - 1), |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
123 DEEP_NESTING = 100 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
124 }; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
125 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
126 #ifdef AT_FDCWD |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
127 int fd = AT_FDCWD; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
128 bool fd_needs_closing = false; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
129 #else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
130 char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1]; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
131 char *dotlist = dots; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
132 size_t dotsize = sizeof dots; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
133 size_t dotlen = 0; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
134 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
135 DIR *dirstream = NULL; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
136 dev_t rootdev, thisdev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
137 ino_t rootino, thisino; |
5907 | 138 char *dir; |
139 register char *dirp; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
140 struct stat st; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
141 size_t allocated = size; |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
142 size_t used; |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
143 |
8217
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
144 #if HAVE_PARTLY_WORKING_GETCWD |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
145 /* The system getcwd works, except it sometimes fails when it |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
146 shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. If |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
147 AT_FDCWD is not defined, the algorithm below is O(N**2) and this |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
148 is much slower than the system getcwd (at least on GNU/Linux). |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
149 So trust the system getcwd's results unless they look |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
150 suspicious. |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
151 |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
152 Use the system getcwd even if we have openat support, since the |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
153 system getcwd works even when a parent is unreadable, while the |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
154 openat-based approach does not. */ |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
155 |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
156 # undef getcwd |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
157 dir = getcwd (buf, size); |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
158 if (dir || (errno != ERANGE && !is_ENAMETOOLONG (errno) && errno != ENOENT)) |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
159 return dir; |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
160 #endif |
f43bac5db7d2
* lib/getcwd.c (__getcwd): Undo previous change; it mishandled
Paul Eggert <eggert@cs.ucla.edu>
parents:
8216
diff
changeset
|
161 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
162 if (size == 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
163 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
164 if (buf != NULL) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
165 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
166 __set_errno (EINVAL); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
167 return NULL; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
168 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
169 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
170 allocated = BIG_FILE_NAME_LENGTH + 1; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
171 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
172 |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
173 if (buf == NULL) |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
174 { |
5907 | 175 dir = malloc (allocated); |
176 if (dir == NULL) | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
177 return NULL; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
178 } |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
179 else |
5907 | 180 dir = buf; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
181 |
5907 | 182 dirp = dir + allocated; |
183 *--dirp = '\0'; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
184 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
185 if (__lstat (".", &st) < 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
186 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
187 thisdev = st.st_dev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
188 thisino = st.st_ino; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
189 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
190 if (__lstat ("/", &st) < 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
191 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
192 rootdev = st.st_dev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
193 rootino = st.st_ino; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
194 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
195 while (!(thisdev == rootdev && thisino == rootino)) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
196 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
197 struct dirent *d; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
198 dev_t dotdev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
199 ino_t dotino; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
200 bool mount_point; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
201 int parent_status; |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
202 size_t dirroom; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
203 size_t namlen; |
6912 | 204 bool use_d_ino = true; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
205 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
206 /* Look at the parent directory. */ |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
207 #ifdef AT_FDCWD |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
208 fd = openat (fd, "..", O_RDONLY); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
209 if (fd < 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
210 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
211 fd_needs_closing = true; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
212 parent_status = fstat (fd, &st); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
213 #else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
214 dotlist[dotlen++] = '.'; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
215 dotlist[dotlen++] = '.'; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
216 dotlist[dotlen] = '\0'; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
217 parent_status = __lstat (dotlist, &st); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
218 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
219 if (parent_status != 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
220 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
221 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
222 if (dirstream && __closedir (dirstream) != 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
223 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
224 dirstream = NULL; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
225 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
226 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
227 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
228 /* Figure out if this directory is a mount point. */ |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
229 dotdev = st.st_dev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
230 dotino = st.st_ino; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
231 mount_point = dotdev != thisdev; |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
232 |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
233 /* Search for the last directory. */ |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
234 #ifdef AT_FDCWD |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
235 dirstream = fdopendir (fd); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
236 if (dirstream == NULL) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
237 goto lose; |
8202
b0e0eba8a254
Don't use FD after a successful "fdopendir (fd)".
Jim Meyering <jim@meyering.net>
parents:
8199
diff
changeset
|
238 /* Reset fd. It may have been closed by fdopendir. */ |
b0e0eba8a254
Don't use FD after a successful "fdopendir (fd)".
Jim Meyering <jim@meyering.net>
parents:
8199
diff
changeset
|
239 fd = dirfd (dirstream); |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
240 fd_needs_closing = false; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
241 #else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
242 dirstream = __opendir (dotlist); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
243 if (dirstream == NULL) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
244 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
245 dotlist[dotlen++] = '/'; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
246 #endif |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
247 for (;;) |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
248 { |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
249 /* Clear errno to distinguish EOF from error if readdir returns |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
250 NULL. */ |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
251 __set_errno (0); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
252 d = __readdir (dirstream); |
6912 | 253 |
254 /* When we've iterated through all directory entries without finding | |
255 one with a matching d_ino, rewind the stream and consider each | |
256 name again, but this time, using lstat. This is necessary in a | |
257 chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where | |
258 .., ../.., ../../.., etc. all had the same device number, yet the | |
259 d_ino values for entries in / did not match those obtained | |
260 via lstat. */ | |
261 if (d == NULL && errno == 0 && use_d_ino) | |
262 { | |
263 use_d_ino = false; | |
264 rewinddir (dirstream); | |
265 d = __readdir (dirstream); | |
266 } | |
267 | |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
268 if (d == NULL) |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
269 { |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
270 if (errno == 0) |
6912 | 271 /* EOF on dirstream, which can mean e.g., that the current |
272 directory has been removed. */ | |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
273 __set_errno (ENOENT); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
274 goto lose; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
275 } |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
276 if (d->d_name[0] == '.' && |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
277 (d->d_name[1] == '\0' || |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
278 (d->d_name[1] == '.' && d->d_name[2] == '\0'))) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
279 continue; |
6912 | 280 |
281 if (use_d_ino) | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
282 { |
6912 | 283 bool match = (MATCHING_INO (d, thisino) || mount_point); |
284 if (! match) | |
285 continue; | |
286 } | |
287 | |
288 { | |
289 int entry_status; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
290 #ifdef AT_FDCWD |
6912 | 291 entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW); |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
292 #else |
6912 | 293 /* Compute size needed for this file name, or for the file |
294 name ".." in the same directory, whichever is larger. | |
295 Room for ".." might be needed the next time through | |
296 the outer loop. */ | |
297 size_t name_alloc = _D_ALLOC_NAMLEN (d); | |
298 size_t filesize = dotlen + MAX (sizeof "..", name_alloc); | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
299 |
6912 | 300 if (filesize < dotlen) |
301 goto memory_exhausted; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
302 |
6912 | 303 if (dotsize < filesize) |
304 { | |
305 /* My, what a deep directory tree you have, Grandma. */ | |
306 size_t newsize = MAX (filesize, dotsize * 2); | |
307 size_t i; | |
308 if (newsize < dotsize) | |
309 goto memory_exhausted; | |
310 if (dotlist != dots) | |
311 free (dotlist); | |
312 dotlist = malloc (newsize); | |
313 if (dotlist == NULL) | |
314 goto lose; | |
315 dotsize = newsize; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
316 |
6912 | 317 i = 0; |
318 do | |
319 { | |
320 dotlist[i++] = '.'; | |
321 dotlist[i++] = '.'; | |
322 dotlist[i++] = '/'; | |
323 } | |
324 while (i < dotlen); | |
325 } | |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
326 |
6912 | 327 memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d)); |
328 entry_status = __lstat (dotlist, &st); | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
329 #endif |
6912 | 330 /* We don't fail here if we cannot stat() a directory entry. |
331 This can happen when (network) file systems fail. If this | |
332 entry is in fact the one we are looking for we will find | |
333 out soon as we reach the end of the directory without | |
334 having found anything. */ | |
335 if (entry_status == 0 && S_ISDIR (st.st_mode) | |
336 && st.st_dev == thisdev && st.st_ino == thisino) | |
337 break; | |
338 } | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
339 } |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
340 |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
341 dirroom = dirp - dir; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
342 namlen = _D_EXACT_NAMLEN (d); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
343 |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
344 if (dirroom <= namlen) |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
345 { |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
346 if (size != 0) |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
347 { |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
348 __set_errno (ERANGE); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
349 goto lose; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
350 } |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
351 else |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
352 { |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
353 char *tmp; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
354 size_t oldsize = allocated; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
355 |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
356 allocated += MAX (allocated, namlen); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
357 if (allocated < oldsize |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
358 || ! (tmp = realloc (dir, allocated))) |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
359 goto memory_exhausted; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
360 |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
361 /* Move current contents up to the end of the buffer. |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
362 This is guaranteed to be non-overlapping. */ |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
363 dirp = memcpy (tmp + allocated - (oldsize - dirroom), |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
364 tmp + dirroom, |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
365 oldsize - dirroom); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
366 dir = tmp; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
367 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
368 } |
6439
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
369 dirp -= namlen; |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
370 memcpy (dirp, d->d_name, namlen); |
3fd547210013
* getcwd.c (__getcwd): Don't assume that system calls after readdir
Paul Eggert <eggert@cs.ucla.edu>
parents:
6305
diff
changeset
|
371 *--dirp = '/'; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
372 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
373 thisdev = dotdev; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
374 thisino = dotino; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
375 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
376 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
377 if (dirstream && __closedir (dirstream) != 0) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
378 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
379 dirstream = NULL; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
380 goto lose; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
381 } |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
382 |
5907 | 383 if (dirp == &dir[allocated - 1]) |
384 *--dirp = '/'; | |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
385 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
386 #ifndef AT_FDCWD |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
387 if (dotlist != dots) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
388 free (dotlist); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
389 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
390 |
5907 | 391 used = dir + allocated - dirp; |
392 memmove (dir, dirp, used); | |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
393 |
8474
11ae25a37675
* lib/getcwd.c (__getcwd): Remove redundant comparison of buf to NULL.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8217
diff
changeset
|
394 if (size == 0) |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
395 /* Ensure that the buffer is only as large as necessary. */ |
5907 | 396 buf = realloc (dir, used); |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
397 |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
398 if (buf == NULL) |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
399 /* Either buf was NULL all along, or `realloc' failed but |
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
400 we still have the original string. */ |
5907 | 401 buf = dir; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
402 |
5499
41fd04e6a198
(is_ENAMETOOLONG): New macro.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5491
diff
changeset
|
403 return buf; |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
404 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
405 memory_exhausted: |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
406 __set_errno (ENOMEM); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
407 lose: |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
408 { |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
409 int save = errno; |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
410 if (dirstream) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
411 __closedir (dirstream); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
412 #ifdef AT_FDCWD |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
413 if (fd_needs_closing) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
414 close (fd); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
415 #else |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
416 if (dotlist != dots) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
417 free (dotlist); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
418 #endif |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
419 if (buf == NULL) |
5907 | 420 free (dir); |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
421 __set_errno (save); |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
422 } |
5136
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
423 return NULL; |
3d7c80bdf362
New getcwd module, imported from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
424 } |
5491
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
425 |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
426 #ifdef weak_alias |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
427 weak_alias (__getcwd, getcwd) |
b3d5c90efc81
Merge from coreutils for getcwd and HP-UX 11.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5136
diff
changeset
|
428 #endif |