Mercurial > hg > octave-kai > gnulib-hg
annotate lib/lstat.c @ 17463:203c036eb0c6
bootstrap: support checksum utils without a --status option
* build-aux/bootstrap: Only look for sha1sum if updating po files.
Add sha1 to the list of supported checksum utils since it's now
supported through adjustments below.
(update_po_files): Remove the use of --status
in a way that will suppress all error messages, but since this is
only used to minimize updates, it shouldn't cause an issue.
Exit early if there is a problem updating the po file checksums.
(find_tool): Remove the check for --version support as this
is optional as per commit 86186b17. Don't even check for the
presence of the command as if that is needed, it's supported
through configuring prerequisites in bootstrap.conf.
Prompt that when a tool isn't found, one can define an environment
variable to add to the hardcoded search list.
author | Pádraig Brady <P@draigBrady.com> |
---|---|
date | Thu, 08 Aug 2013 11:08:49 +0100 |
parents | e542fd46ad6f |
children |
rev | line source |
---|---|
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
1 /* Work around a bug of lstat on some systems |
4474
f1650b772bb6
Correct SunOS and Solaris version number notation to match Sun's usage.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4061
diff
changeset
|
2 |
17249
e542fd46ad6f
maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents:
17188
diff
changeset
|
3 Copyright (C) 1997-2006, 2008-2013 Free Software Foundation, Inc. |
4061
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
4 |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7581
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
4061
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7581
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7581
diff
changeset
|
8 (at your option) any later version. |
4061
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
9 |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
13 GNU General Public License for more details. |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
14 |
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7581
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
4061
b8665a9e1ed0
New file. Simply #define LSTAT and include stat.c.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
17 |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
18 /* written by Jim Meyering */ |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
19 |
15538
9fd857e43955
Avoid endless recursions if config.h includes some header files.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
20 /* If the user's config.h happens to include <sys/stat.h>, let it include only |
9fd857e43955
Avoid endless recursions if config.h includes some header files.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
21 the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to |
9fd857e43955
Avoid endless recursions if config.h includes some header files.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
22 rpl_lstat. */ |
9fd857e43955
Avoid endless recursions if config.h includes some header files.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
23 #define __need_system_sys_stat_h |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6641
diff
changeset
|
24 #include <config.h> |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
25 |
12064
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
26 #if !HAVE_LSTAT |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
27 /* On systems that lack symlinks, our replacement <sys/stat.h> already |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
28 defined lstat as stat, so there is nothing further to do other than |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
29 avoid an empty file. */ |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
30 typedef int dummy; |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
31 #else /* HAVE_LSTAT */ |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
32 |
12039 | 33 /* Get the original definition of lstat. It might be defined as a macro. */ |
12064
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
34 # include <sys/types.h> |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
35 # include <sys/stat.h> |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
36 # undef __need_system_sys_stat_h |
10688
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
37 |
17188
d7a44f0f7a15
ftruncate, fts, lstat, openat, raise: no 'static inline'
Paul Eggert <eggert@cs.ucla.edu>
parents:
16235
diff
changeset
|
38 static int |
10688
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
39 orig_lstat (const char *filename, struct stat *buf) |
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
40 { |
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
41 return lstat (filename, buf); |
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
42 } |
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
43 |
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
44 /* Specification. */ |
15583
716e67b8d5a9
openat: Work around compilation error with OSF/1 5.1 DTK cc.
Bruno Haible <bruno@clisp.org>
parents:
15538
diff
changeset
|
45 /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc |
716e67b8d5a9
openat: Work around compilation error with OSF/1 5.1 DTK cc.
Bruno Haible <bruno@clisp.org>
parents:
15538
diff
changeset
|
46 eliminates this include because of the preliminary #include <sys/stat.h> |
716e67b8d5a9
openat: Work around compilation error with OSF/1 5.1 DTK cc.
Bruno Haible <bruno@clisp.org>
parents:
15538
diff
changeset
|
47 above. */ |
716e67b8d5a9
openat: Work around compilation error with OSF/1 5.1 DTK cc.
Bruno Haible <bruno@clisp.org>
parents:
15538
diff
changeset
|
48 # include "sys/stat.h" |
10688
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
49 |
12064
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
50 # include <string.h> |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
51 # include <errno.h> |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
52 |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
53 /* lstat works differently on Linux and Solaris systems. POSIX (see |
16235
18a38c9615f0
In commentary, do not use ` to quote.
Paul Eggert <eggert@cs.ucla.edu>
parents:
16201
diff
changeset
|
54 "pathname resolution" in the glossary) requires that programs like |
18a38c9615f0
In commentary, do not use ` to quote.
Paul Eggert <eggert@cs.ucla.edu>
parents:
16201
diff
changeset
|
55 'ls' take into consideration the fact that FILE has a trailing slash |
6641 | 56 when FILE is a symbolic link. On Linux and Solaris 10 systems, the |
57 lstat function already has the desired semantics (in treating | |
16235
18a38c9615f0
In commentary, do not use ` to quote.
Paul Eggert <eggert@cs.ucla.edu>
parents:
16201
diff
changeset
|
58 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', |
6641 | 59 but on Solaris 9 and earlier it does not. |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
60 |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
61 If FILE has a trailing slash and specifies a symbolic link, |
6641 | 62 then use stat() to get more info on the referent of FILE. |
63 If the referent is a non-directory, then set errno to ENOTDIR | |
64 and return -1. Otherwise, return stat's result. */ | |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
65 |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
66 int |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
67 rpl_lstat (const char *file, struct stat *sbuf) |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
68 { |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
69 size_t len; |
10688
989b49566cae
Move the lstat() declaration to <sys/stat.h>.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
70 int lstat_result = orig_lstat (file, sbuf); |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
71 |
12039 | 72 if (lstat_result != 0) |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
73 return lstat_result; |
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
74 |
12039 | 75 /* This replacement file can blindly check against '/' rather than |
76 using the ISSLASH macro, because all platforms with '\\' either | |
77 lack symlinks (mingw) or have working lstat (cygwin) and thus do | |
78 not compile this file. 0 len should have already been filtered | |
79 out above, with a failure return of ENOENT. */ | |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
80 len = strlen (file); |
12039 | 81 if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode)) |
6641 | 82 return 0; |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
83 |
12039 | 84 /* At this point, a trailing slash is only permitted on |
85 symlink-to-dir; but it should have found information on the | |
86 directory, not the symlink. Call stat() to get info about the | |
87 link's referent. Our replacement stat guarantees valid results, | |
88 even if the symlink is not pointing to a directory. */ | |
89 if (!S_ISLNK (sbuf->st_mode)) | |
90 { | |
91 errno = ENOTDIR; | |
92 return -1; | |
93 } | |
94 return stat (file, sbuf); | |
5933
35504bd557fa
Remove stat module & update lstat.
Derek R. Price <derek@ximbiot.com>
parents:
5848
diff
changeset
|
95 } |
12064
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
96 |
e9a820d62f5a
lstat: avoid mingw compilation error
Eric Blake <ebb9@byu.net>
parents:
12039
diff
changeset
|
97 #endif /* HAVE_LSTAT */ |