update gnulib to b35c22af02271c8dd9844b98db17702b8bf2bd93

* lib/Makefile.am, lib/alloca.in.h, lib/arg-nonnull.h, lib/argmatch.c,
lib/argmatch.h, lib/argp-ba.c, lib/argp-eexst.c, lib/argp-fmtstream.c,
lib/argp-fmtstream.h, lib/argp-fs-xinl.c, lib/argp-help.c,
lib/argp-namefrob.h, lib/argp-parse.c, lib/argp-pin.c, lib/argp-pv.c,
lib/argp-pvh.c, lib/argp-xinl.c, lib/argp.h, lib/asnprintf.c,
lib/basename-lgpl.c, lib/c++defs.h, lib/c-ctype.h, lib/c-strcase.h,
lib/c-strcasecmp.c, lib/c-strcaseeq.h, lib/c-strncasecmp.c,
lib/config.charset, lib/dirname-lgpl.c, lib/dirname.h, lib/dosname.h,
lib/errno.in.h, lib/error.c, lib/error.h, lib/exitfail.c,
lib/exitfail.h, lib/fcntl.in.h, lib/filename.h, lib/float+.h,
lib/float.c, lib/float.in.h, lib/getopt-cdefs.in.h, lib/getopt-core.h,
lib/getopt-ext.h, lib/getopt-pfx-core.h, lib/getopt-pfx-ext.h,
lib/getopt.c, lib/getopt.in.h, lib/getopt1.c, lib/getopt_int.h,
lib/getprogname.c, lib/getprogname.h, lib/gettext.h,
lib/gettimeofday.c, lib/hard-locale.c, lib/hard-locale.h,
lib/intprops.h, lib/isatty.c, lib/itold.c, lib/limits.in.h,
lib/localcharset.c, lib/localcharset.h, lib/localtime-buffer.c,
lib/localtime-buffer.h, lib/lstat.c, lib/malloc.c, lib/malloca.c,
lib/malloca.h, lib/mbrtowc.c, lib/mbsinit.c, lib/memchr.c,
lib/mempcpy.c, lib/minmax.h, lib/mkstemp.c, lib/mkstemps.c,
lib/msvc-inval.c, lib/msvc-inval.h, lib/msvc-nothrow.c,
lib/msvc-nothrow.h, lib/pathmax.h, lib/printf-args.c,
lib/printf-args.h, lib/printf-parse.c, lib/printf-parse.h,
lib/progname.c, lib/progname.h, lib/quote.h, lib/quotearg.c,
lib/quotearg.h, lib/rawmemchr.c, lib/ref-add.sin, lib/ref-del.sin,
lib/size_max.h, lib/sleep.c, lib/stat-w32.c, lib/stat-w32.h,
lib/stat.c, lib/stdalign.in.h, lib/stdbool.in.h, lib/stddef.in.h,
lib/stdint.in.h, lib/stdio.in.h, lib/stdlib.in.h, lib/stpcpy.c,
lib/strcasecmp.c, lib/strchrnul.c, lib/streq.h,
lib/strerror-override.c, lib/strerror-override.h, lib/strerror.c,
lib/string.in.h, lib/strings.in.h, lib/stripslash.c,
lib/strncasecmp.c, lib/strndup.c, lib/strnlen.c, lib/strverscmp.c,
lib/sys_stat.in.h, lib/sys_time.in.h, lib/sys_types.in.h,
lib/sys_wait.in.h, lib/sysexits.in.h, lib/tempname.c, lib/tempname.h,
lib/time.in.h, lib/unistd.in.h, lib/vasnprintf.c, lib/vasnprintf.h,
lib/verify.h, lib/vsnprintf.c, lib/warn-on-use.h, lib/wchar.in.h,
lib/wctype.in.h, lib/xalloc-die.c, lib/xalloc-oversized.h,
lib/xalloc.h, lib/xmalloc.c, lib/xsize.h, m4/00gnulib.m4,
m4/absolute-header.m4, m4/alloca.m4, m4/argp.m4, m4/configmake.m4,
m4/dirname.m4, m4/double-slash-root.m4, m4/eealloc.m4, m4/errno_h.m4,
m4/error.m4, m4/exponentd.m4, m4/extensions.m4, m4/extern-inline.m4,
m4/fcntl-o.m4, m4/fcntl_h.m4, m4/float_h.m4, m4/getopt.m4,
m4/getprogname.m4, m4/gettimeofday.m4, m4/glibc21.m4,
m4/gnulib-cache.m4, m4/gnulib-common.m4, m4/gnulib-comp.m4,
m4/gnulib-tool.m4, m4/hard-locale.m4, m4/include_next.m4,
m4/intmax_t.m4, m4/inttypes_h.m4, m4/isatty.m4, m4/largefile.m4,
m4/limits-h.m4, m4/localcharset.m4, m4/locale-fr.m4, m4/locale-ja.m4,
m4/locale-zh.m4, m4/localtime-buffer.m4, m4/longlong.m4, m4/lstat.m4,
m4/malloc.m4, m4/malloca.m4, m4/math_h.m4, m4/mbrtowc.m4,
m4/mbsinit.m4, m4/mbstate_t.m4, m4/memchr.m4, m4/mempcpy.m4,
m4/minmax.m4, m4/mkstemp.m4, m4/mkstemps.m4, m4/mmap-anon.m4,
m4/msvc-inval.m4, m4/msvc-nothrow.m4, m4/multiarch.m4, m4/nocrash.m4,
m4/off_t.m4, m4/pathmax.m4, m4/printf.m4, m4/quote.m4, m4/quotearg.m4,
m4/rawmemchr.m4, m4/size_max.m4, m4/sleep.m4, m4/ssize_t.m4,
m4/stat.m4, m4/stdalign.m4, m4/stdbool.m4, m4/stddef_h.m4,
m4/stdint.m4, m4/stdint_h.m4, m4/stdio_h.m4, m4/stdlib_h.m4,
m4/stpcpy.m4, m4/strcase.m4, m4/strchrnul.m4, m4/strerror.m4,
m4/string_h.m4, m4/strings_h.m4, m4/strndup.m4, m4/strnlen.m4,
m4/strverscmp.m4, m4/sys_socket_h.m4, m4/sys_stat_h.m4,
m4/sys_time_h.m4, m4/sys_types_h.m4, m4/sys_wait_h.m4, m4/sysexits.m4,
m4/tempname.m4, m4/time_h.m4, m4/unistd_h.m4, m4/vasnprintf.m4,
m4/vsnprintf.m4, m4/warn-on-use.m4, m4/wchar_h.m4, m4/wchar_t.m4,
m4/wctype_h.m4, m4/wint_t.m4, m4/xalloc.m4, m4/xsize.m4: Update.
* lib/malloca.valgrind, lib/secure_getenv.c, m4/secure_getenv.m4:
Delete.
* lib/stat-time.c, lib/stat-time.h, m4/stat-time.m4: New files.
This commit is contained in:
Alexandre Duret-Lutz 2018-05-17 16:05:57 +02:00
parent 645bb55622
commit 2076197e8d
241 changed files with 1272 additions and 932 deletions

View file

@ -1,6 +1,6 @@
/* Work around a bug of lstat on some systems
Copyright (C) 1997-2006, 2008-2017 Free Software Foundation, Inc.
Copyright (C) 1997-2006, 2008-2018 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -13,7 +13,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* written by Jim Meyering */
@ -47,6 +47,8 @@ orig_lstat (const char *filename, struct stat *buf)
above. */
# include "sys/stat.h"
# include "stat-time.h"
# include <string.h>
# include <errno.h>
@ -66,32 +68,33 @@ orig_lstat (const char *filename, struct stat *buf)
int
rpl_lstat (const char *file, struct stat *sbuf)
{
size_t len;
int lstat_result = orig_lstat (file, sbuf);
if (lstat_result != 0)
return lstat_result;
int result = orig_lstat (file, sbuf);
/* This replacement file can blindly check against '/' rather than
using the ISSLASH macro, because all platforms with '\\' either
lack symlinks (mingw) or have working lstat (cygwin) and thus do
not compile this file. 0 len should have already been filtered
out above, with a failure return of ENOENT. */
len = strlen (file);
if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode))
return 0;
/* At this point, a trailing slash is only permitted on
symlink-to-dir; but it should have found information on the
directory, not the symlink. Call stat() to get info about the
link's referent. Our replacement stat guarantees valid results,
even if the symlink is not pointing to a directory. */
if (!S_ISLNK (sbuf->st_mode))
if (result == 0)
{
errno = ENOTDIR;
return -1;
if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/')
result = stat_time_normalize (result, sbuf);
else
{
/* At this point, a trailing slash is permitted only on
symlink-to-dir; but it should have found information on the
directory, not the symlink. Call 'stat' to get info about the
link's referent. Our replacement stat guarantees valid results,
even if the symlink is not pointing to a directory. */
if (!S_ISLNK (sbuf->st_mode))
{
errno = ENOTDIR;
return -1;
}
result = stat (file, sbuf);
}
}
return stat (file, sbuf);
return result;
}
#endif /* HAVE_LSTAT */