Import lstat

This patch is to import lstat gnulib module.

gdb:

2014-11-28  Yao Qi  <yao@codesourcery.com>

	* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES): Add
	lstat.
	* gnulib/aclocal.m4: Re-generated.
	* gnulib/config.in: Re-generated.
	* gnulib/configure: Re-generated.
	* gnulib/import/Makefile.am: Re-generated.
	* gnulib/import/Makefile.in: Re-generated.
	* gnulib/import/m4/gnulib-cache.m4: Re-generated.
	* gnulib/import/m4/gnulib-comp.m4: Re-generated.
	* gnulib/import/lstat.c: New file.
	* gnulib/import/m4/lstat.m4: New file.
This commit is contained in:
Yao Qi 2014-11-23 21:54:45 +08:00
parent bdca27a2f5
commit f45c62c4d5
11 changed files with 400 additions and 79 deletions

View File

@ -1,3 +1,17 @@
2014-11-28 Yao Qi <yao@codesourcery.com>
* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES): Add
lstat.
* gnulib/aclocal.m4: Re-generated.
* gnulib/config.in: Re-generated.
* gnulib/configure: Re-generated.
* gnulib/import/Makefile.am: Re-generated.
* gnulib/import/Makefile.in: Re-generated.
* gnulib/import/m4/gnulib-cache.m4: Re-generated.
* gnulib/import/m4/gnulib-comp.m4: Re-generated.
* gnulib/import/lstat.c: New file.
* gnulib/import/m4/lstat.m4: New file.
2014-11-28 Yao Qi <yao@codesourcery.com>
* configure.ac (AC_CHECK_FUNCS): Remove readlink.

View File

@ -1043,6 +1043,7 @@ m4_include([import/m4/locale-fr.m4])
m4_include([import/m4/locale-ja.m4])
m4_include([import/m4/locale-zh.m4])
m4_include([import/m4/longlong.m4])
m4_include([import/m4/lstat.m4])
m4_include([import/m4/math_h.m4])
m4_include([import/m4/mbrtowc.m4])
m4_include([import/m4/mbsinit.m4])

View File

@ -52,6 +52,9 @@
/* Define to 1 when the gnulib module frexpl should be tested. */
#undef GNULIB_TEST_FREXPL
/* Define to 1 when the gnulib module lstat should be tested. */
#undef GNULIB_TEST_LSTAT
/* Define to 1 when the gnulib module mbrtowc should be tested. */
#undef GNULIB_TEST_MBRTOWC
@ -943,6 +946,10 @@
/* Define as the word index where to find the exponent of 'long double'. */
#undef LDBL_EXPBIT0_WORD
/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing
slash. */
#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
#undef MAP_ANONYMOUS

248
gdb/gnulib/configure vendored
View File

@ -694,39 +694,6 @@ HAVE__BOOL
GL_GENERATE_STDBOOL_H_FALSE
GL_GENERATE_STDBOOL_H_TRUE
STDBOOL_H
REPLACE_UTIMENSAT
REPLACE_STAT
REPLACE_MKNOD
REPLACE_MKFIFO
REPLACE_MKDIR
REPLACE_LSTAT
REPLACE_FUTIMENS
REPLACE_FSTATAT
REPLACE_FSTAT
HAVE_UTIMENSAT
HAVE_MKNODAT
HAVE_MKNOD
HAVE_MKFIFOAT
HAVE_MKFIFO
HAVE_MKDIRAT
HAVE_LSTAT
HAVE_LCHMOD
HAVE_FUTIMENS
HAVE_FSTATAT
HAVE_FCHMODAT
GNULIB_UTIMENSAT
GNULIB_STAT
GNULIB_MKNODAT
GNULIB_MKNOD
GNULIB_MKFIFOAT
GNULIB_MKFIFO
GNULIB_MKDIRAT
GNULIB_LSTAT
GNULIB_LCHMOD
GNULIB_FUTIMENS
GNULIB_FSTATAT
GNULIB_FSTAT
GNULIB_FCHMODAT
UNDEFINE_STRTOK_R
REPLACE_STRTOK_R
REPLACE_STRSIGNAL
@ -897,6 +864,39 @@ GNULIB_WCTOB
GNULIB_BTOWC
NEXT_AS_FIRST_DIRECTIVE_MATH_H
NEXT_MATH_H
REPLACE_UTIMENSAT
REPLACE_STAT
REPLACE_MKNOD
REPLACE_MKFIFO
REPLACE_MKDIR
REPLACE_LSTAT
REPLACE_FUTIMENS
REPLACE_FSTATAT
REPLACE_FSTAT
HAVE_UTIMENSAT
HAVE_MKNODAT
HAVE_MKNOD
HAVE_MKFIFOAT
HAVE_MKFIFO
HAVE_MKDIRAT
HAVE_LSTAT
HAVE_LCHMOD
HAVE_FUTIMENS
HAVE_FSTATAT
HAVE_FCHMODAT
GNULIB_UTIMENSAT
GNULIB_STAT
GNULIB_MKNODAT
GNULIB_MKNOD
GNULIB_MKFIFOAT
GNULIB_MKFIFO
GNULIB_MKDIRAT
GNULIB_LSTAT
GNULIB_LCHMOD
GNULIB_FUTIMENS
GNULIB_FSTATAT
GNULIB_FSTAT
GNULIB_FCHMODAT
LOCALCHARSET_TESTS_ENVIRONMENT
GLIBC21
NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
@ -3090,6 +3090,7 @@ as_fn_append ac_header_list " stdint.h"
as_fn_append ac_header_list " inttypes.h"
as_fn_append ac_header_list " unistd.h"
as_fn_append ac_func_list " symlink"
as_fn_append ac_func_list " lstat"
as_fn_append ac_header_list " math.h"
as_fn_append ac_func_list " mbsinit"
as_fn_append ac_func_list " mbrtowc"
@ -3097,7 +3098,6 @@ as_fn_append ac_header_list " sys/mman.h"
as_fn_append ac_func_list " mprotect"
as_fn_append ac_header_list " sys/param.h"
as_fn_append ac_func_list " readlink"
as_fn_append ac_func_list " lstat"
as_fn_append ac_header_list " sys/stat.h"
as_fn_append ac_header_list " sys/time.h"
as_fn_append ac_header_list " features.h"
@ -5030,6 +5030,7 @@ fi
# Code from module largefile:
# Code from module localcharset:
# Code from module lstat:
# Code from module math:
# Code from module mbrtowc:
# Code from module mbsinit:
@ -8875,6 +8876,106 @@ $as_echo "$ac_cv_gnu_library_2_1" >&6; }
GNULIB_FCHMODAT=0;
GNULIB_FSTAT=0;
GNULIB_FSTATAT=0;
GNULIB_FUTIMENS=0;
GNULIB_LCHMOD=0;
GNULIB_LSTAT=0;
GNULIB_MKDIRAT=0;
GNULIB_MKFIFO=0;
GNULIB_MKFIFOAT=0;
GNULIB_MKNOD=0;
GNULIB_MKNODAT=0;
GNULIB_STAT=0;
GNULIB_UTIMENSAT=0;
HAVE_FCHMODAT=1;
HAVE_FSTATAT=1;
HAVE_FUTIMENS=1;
HAVE_LCHMOD=1;
HAVE_LSTAT=1;
HAVE_MKDIRAT=1;
HAVE_MKFIFO=1;
HAVE_MKFIFOAT=1;
HAVE_MKNOD=1;
HAVE_MKNODAT=1;
HAVE_UTIMENSAT=1;
REPLACE_FSTAT=0;
REPLACE_FSTATAT=0;
REPLACE_FUTIMENS=0;
REPLACE_LSTAT=0;
REPLACE_MKDIR=0;
REPLACE_MKFIFO=0;
REPLACE_MKNOD=0;
REPLACE_STAT=0;
REPLACE_UTIMENSAT=0;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
if test "${gl_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
$as_echo_n "(cached) " >&6
else
rm -f conftest.sym conftest.file
echo >conftest.file
if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
if test "$cross_compiling" = yes; then :
case "$host_os" in
# Guess yes on glibc systems.
*-gnu*) gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
# If we don't know, assume the worst.
*) gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
esac
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
main ()
{
struct stat sbuf;
/* Linux will dereference the symlink and fail, as required by
POSIX. That is better in the sense that it means we will not
have to compile and use the lstat wrapper. */
return lstat ("conftest.sym/", &sbuf) == 0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
gl_cv_func_lstat_dereferences_slashed_symlink=yes
else
gl_cv_func_lstat_dereferences_slashed_symlink=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
else
# If the 'ln -s' command failed, then we probably don't even
# have an lstat function.
gl_cv_func_lstat_dereferences_slashed_symlink="guessing no"
fi
rm -f conftest.sym conftest.file
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5
$as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; }
case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
*yes)
cat >>confdefs.h <<_ACEOF
#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
_ACEOF
;;
esac
GNULIB_BTOWC=0;
@ -9869,43 +9970,6 @@ $as_echo "$gl_cv_func_memmem_works_always" >&6; }
GNULIB_FCHMODAT=0;
GNULIB_FSTAT=0;
GNULIB_FSTATAT=0;
GNULIB_FUTIMENS=0;
GNULIB_LCHMOD=0;
GNULIB_LSTAT=0;
GNULIB_MKDIRAT=0;
GNULIB_MKFIFO=0;
GNULIB_MKFIFOAT=0;
GNULIB_MKNOD=0;
GNULIB_MKNODAT=0;
GNULIB_STAT=0;
GNULIB_UTIMENSAT=0;
HAVE_FCHMODAT=1;
HAVE_FSTATAT=1;
HAVE_FUTIMENS=1;
HAVE_LCHMOD=1;
HAVE_LSTAT=1;
HAVE_MKDIRAT=1;
HAVE_MKFIFO=1;
HAVE_MKFIFOAT=1;
HAVE_MKNOD=1;
HAVE_MKNODAT=1;
HAVE_UTIMENSAT=1;
REPLACE_FSTAT=0;
REPLACE_FSTATAT=0;
REPLACE_FUTIMENS=0;
REPLACE_LSTAT=0;
REPLACE_MKDIR=0;
REPLACE_MKFIFO=0;
REPLACE_MKNOD=0;
REPLACE_STAT=0;
REPLACE_UTIMENSAT=0;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
if test "${ac_cv_header_stdbool_h+set}" = set; then :
@ -12640,6 +12704,48 @@ _ACEOF
if test $ac_cv_func_lstat = yes; then
case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
*no)
REPLACE_LSTAT=1
;;
esac
else
HAVE_LSTAT=0
fi
if test $REPLACE_LSTAT = 1; then
gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext"
:
fi
GNULIB_LSTAT=1
$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h

View File

@ -21,7 +21,7 @@
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes lstat memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
AUTOMAKE_OPTIONS = 1.5 gnits
@ -443,6 +443,15 @@ EXTRA_DIST += config.charset ref-add.sin ref-del.sin
## end gnulib module localcharset
## begin gnulib module lstat
EXTRA_DIST += lstat.c
EXTRA_libgnu_a_SOURCES += lstat.c
## end gnulib module lstat
## begin gnulib module math
BUILT_SOURCES += math.h

View File

@ -36,7 +36,7 @@
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes lstat memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
@ -94,6 +94,7 @@ am__aclocal_m4_deps = $(top_srcdir)/import/m4/00gnulib.m4 \
$(top_srcdir)/import/m4/locale-ja.m4 \
$(top_srcdir)/import/m4/locale-zh.m4 \
$(top_srcdir)/import/m4/longlong.m4 \
$(top_srcdir)/import/m4/lstat.m4 \
$(top_srcdir)/import/m4/math_h.m4 \
$(top_srcdir)/import/m4/mbrtowc.m4 \
$(top_srcdir)/import/m4/mbsinit.m4 \
@ -1032,10 +1033,11 @@ EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h dirent.in.h \
fnmatch.c fnmatch.in.h fnmatch_loop.c fpucw.h frexp.c frexp.c \
frexpl.c inttypes.in.h float+.h isnan.c isnand-nolibm.h \
isnand.c float+.h isnan.c isnanl-nolibm.h isnanl.c \
config.charset ref-add.sin ref-del.sin math.in.h mbrtowc.c \
mbsinit.c mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c \
memchr.c memchr.valgrind memmem.c str-two-way.h pathmax.h \
readlink.c $(top_srcdir)/import/extra/snippet/arg-nonnull.h \
config.charset ref-add.sin ref-del.sin lstat.c math.in.h \
mbrtowc.c mbsinit.c mbsrtowcs-impl.h mbsrtowcs-state.c \
mbsrtowcs.c memchr.c memchr.valgrind memmem.c str-two-way.h \
pathmax.h readlink.c \
$(top_srcdir)/import/extra/snippet/arg-nonnull.h \
$(top_srcdir)/import/extra/snippet/c++defs.h \
$(top_srcdir)/import/extra/snippet/warn-on-use.h stat.c \
stdbool.in.h stddef.in.h stdint.in.h streq.h string.in.h \
@ -1079,7 +1081,7 @@ libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@
EXTRA_libgnu_a_SOURCES = alloca.c dirfd.c float.c itold.c fnmatch.c \
fnmatch_loop.c frexp.c frexp.c frexpl.c isnan.c isnand.c \
isnan.c isnanl.c mbrtowc.c mbsinit.c mbsrtowcs-state.c \
isnan.c isnanl.c lstat.c mbrtowc.c mbsinit.c mbsrtowcs-state.c \
mbsrtowcs.c memchr.c memmem.c readlink.c stat.c strstr.c
charset_alias = $(DESTDIR)$(libdir)/charset.alias
charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
@ -1157,6 +1159,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@

97
gdb/gnulib/import/lstat.c Normal file
View File

@ -0,0 +1,97 @@
/* Work around a bug of lstat on some systems
Copyright (C) 1997-2006, 2008-2012 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
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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/>. */
/* written by Jim Meyering */
/* If the user's config.h happens to include <sys/stat.h>, let it include only
the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to
rpl_lstat. */
#define __need_system_sys_stat_h
#include <config.h>
#if !HAVE_LSTAT
/* On systems that lack symlinks, our replacement <sys/stat.h> already
defined lstat as stat, so there is nothing further to do other than
avoid an empty file. */
typedef int dummy;
#else /* HAVE_LSTAT */
/* Get the original definition of lstat. It might be defined as a macro. */
# include <sys/types.h>
# include <sys/stat.h>
# undef __need_system_sys_stat_h
static int
orig_lstat (const char *filename, struct stat *buf)
{
return lstat (filename, buf);
}
/* Specification. */
/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
eliminates this include because of the preliminary #include <sys/stat.h>
above. */
# include "sys/stat.h"
# include <string.h>
# include <errno.h>
/* lstat works differently on Linux and Solaris systems. POSIX (see
"pathname resolution" in the glossary) requires that programs like
'ls' take into consideration the fact that FILE has a trailing slash
when FILE is a symbolic link. On Linux and Solaris 10 systems, the
lstat function already has the desired semantics (in treating
'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)',
but on Solaris 9 and earlier it does not.
If FILE has a trailing slash and specifies a symbolic link,
then use stat() to get more info on the referent of FILE.
If the referent is a non-directory, then set errno to ENOTDIR
and return -1. Otherwise, return stat's result. */
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;
/* 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))
{
errno = ENOTDIR;
return -1;
}
return stat (file, sbuf);
}
#endif /* HAVE_LSTAT */

View File

@ -27,7 +27,7 @@
# Specification in the form of a command-line invocation:
# gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
# gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca dirent dirfd errno fnmatch-gnu frexpl inttypes lstat memchr memmem pathmax readlink strstr sys_stat unistd update-copyright wchar wctype-h
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
@ -39,6 +39,7 @@ gl_MODULES([
fnmatch-gnu
frexpl
inttypes
lstat
memchr
memmem
pathmax

View File

@ -64,6 +64,7 @@ AC_DEFUN([gl_EARLY],
# Code from module largefile:
AC_REQUIRE([AC_SYS_LARGEFILE])
# Code from module localcharset:
# Code from module lstat:
# Code from module math:
# Code from module mbrtowc:
# Code from module mbsinit:
@ -167,6 +168,12 @@ AC_DEFUN([gl_INIT],
gl_LOCALCHARSET
LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
gl_FUNC_LSTAT
if test $REPLACE_LSTAT = 1; then
AC_LIBOBJ([lstat])
gl_PREREQ_LSTAT
fi
gl_SYS_STAT_MODULE_INDICATOR([lstat])
gl_MATH_H
gl_FUNC_MBRTOWC
if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
@ -407,6 +414,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/itold.c
lib/localcharset.c
lib/localcharset.h
lib/lstat.c
lib/math.c
lib/math.in.h
lib/mbrtowc.c
@ -470,6 +478,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/locale-ja.m4
m4/locale-zh.m4
m4/longlong.m4
m4/lstat.m4
m4/math_h.m4
m4/mbrtowc.m4
m4/mbsinit.m4

View File

@ -0,0 +1,73 @@
# serial 26
# Copyright (C) 1997-2001, 2003-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
dnl From Jim Meyering.
AC_DEFUN([gl_FUNC_LSTAT],
[
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
dnl If lstat does not exist, the replacement <sys/stat.h> does
dnl "#define lstat stat", and lstat.c is a no-op.
AC_CHECK_FUNCS_ONCE([lstat])
if test $ac_cv_func_lstat = yes; then
AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
*no)
REPLACE_LSTAT=1
;;
esac
else
HAVE_LSTAT=0
fi
])
# Prerequisites of lib/lstat.c.
AC_DEFUN([gl_PREREQ_LSTAT], [:])
AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
[
dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
[gl_cv_func_lstat_dereferences_slashed_symlink],
[rm -f conftest.sym conftest.file
echo >conftest.file
if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[AC_INCLUDES_DEFAULT],
[[struct stat sbuf;
/* Linux will dereference the symlink and fail, as required by
POSIX. That is better in the sense that it means we will not
have to compile and use the lstat wrapper. */
return lstat ("conftest.sym/", &sbuf) == 0;
]])],
[gl_cv_func_lstat_dereferences_slashed_symlink=yes],
[gl_cv_func_lstat_dereferences_slashed_symlink=no],
[case "$host_os" in
# Guess yes on glibc systems.
*-gnu*) gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
# If we don't know, assume the worst.
*) gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
esac
])
else
# If the 'ln -s' command failed, then we probably don't even
# have an lstat function.
gl_cv_func_lstat_dereferences_slashed_symlink="guessing no"
fi
rm -f conftest.sym conftest.file
])
case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
*yes)
AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
[Define to 1 if 'lstat' dereferences a symlink specified
with a trailing slash.])
;;
esac
])

View File

@ -37,6 +37,7 @@ IMPORTED_GNULIB_MODULES="\
fnmatch-gnu \
frexpl \
inttypes \
lstat \
memchr \
memmem \
pathmax \