gnulib: upgrade to today's version
* tools/snippet/_Noreturn.h, tools/snippet/c++defs.h, tools/snippet/arg-nonnull.h, tools/snippet/warn-on-use.h: Rename to... * lib/_Noreturn.h, lib/c++defs.h, lib/arg-nonnull.h, lib/warn-on-use.h: ... these. * lib/filename.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/localtime-buffer.c, lib/localtime-buffer.h, lib/malloca.c, lib/malloca.h, lib/malloca.valgrind, lib/stat-w32.c, lib/stat-w32.h, m4/eealloc.m4, m4/localtime-buffer.m4, m4/malloca.m4: New files. * lib/argp-help.c, lib/argp-parse.c, lib/error.c, lib/float.in.h, lib/getopt1.c, lib/getopt.c, lib/getopt.in.h, lib/getopt_int.h, lib/gettext.h, lib/gettimeofday.c, lib/intprops.h, lib/isatty.c, lib/limits.in.h, lib/localcharset.c, lib/Makefile.am, lib/mbrtowc.c, lib/mbsinit.c, lib/msvc-nothrow.c, lib/quotearg.c, lib/stat.c, lib/stdalign.in.h, lib/stdint.in.h, lib/string.in.h, lib/sys_stat.in.h, lib/sys_types.in.h, lib/tempname.c, lib/time.in.h, lib/unistd.in.h, lib/vasnprintf.c, lib/wchar.in.h, lib/wctype.in.h, lib/xalloc.h, lib/xalloc-oversized.h, m4/fcntl-o.m4, m4/float_h.m4, m4/getopt.m4, m4/gettimeofday.m4, m4/gnulib-common.m4, m4/gnulib-comp.m4, m4/include_next.m4, m4/largefile.m4, m4/lstat.m4, m4/mbrtowc.m4, m4/memchr.m4, m4/mkstemp.m4, m4/printf.m4, m4/sleep.m4, m4/stat.m4, m4/stdalign.m4, m4/stdint.m4, m4/strerror.m4, m4/string_h.m4, m4/sys_stat_h.m4, m4/sys_time_h.m4, m4/sys_types_h.m4, m4/time_h.m4, m4/unistd_h.m4, m4/wchar_h.m4, m4/wctype_h.m4, m4/wint_t.m4: Update.
This commit is contained in:
parent
aa8cf6ac92
commit
80d50c5665
81 changed files with 3458 additions and 1954 deletions
6
lib/.gitignore
vendored
6
lib/.gitignore
vendored
|
|
@ -1,13 +1,14 @@
|
||||||
alloca.h
|
alloca.h
|
||||||
arg-nonnull.h
|
|
||||||
c++defs.h
|
|
||||||
configmake.h
|
configmake.h
|
||||||
dummy.c
|
dummy.c
|
||||||
errno.h
|
errno.h
|
||||||
fcntl.h
|
fcntl.h
|
||||||
|
getopt-cdefs.h
|
||||||
getopt.h
|
getopt.h
|
||||||
libgnu.a
|
libgnu.a
|
||||||
|
limits.h
|
||||||
stdalign.h
|
stdalign.h
|
||||||
|
stdint.h
|
||||||
stdio.h
|
stdio.h
|
||||||
stdlib.h
|
stdlib.h
|
||||||
string.h
|
string.h
|
||||||
|
|
@ -16,7 +17,6 @@ sys/
|
||||||
sysexits.h
|
sysexits.h
|
||||||
time.h
|
time.h
|
||||||
unistd.h
|
unistd.h
|
||||||
warn-on-use.h
|
|
||||||
wchar.h
|
wchar.h
|
||||||
wctype.h
|
wctype.h
|
||||||
*.sed
|
*.sed
|
||||||
|
|
|
||||||
139
lib/Makefile.am
139
lib/Makefile.am
|
|
@ -37,6 +37,7 @@ MOSTLYCLEANDIRS =
|
||||||
CLEANFILES =
|
CLEANFILES =
|
||||||
DISTCLEANFILES =
|
DISTCLEANFILES =
|
||||||
MAINTAINERCLEANFILES =
|
MAINTAINERCLEANFILES =
|
||||||
|
# No GNU Make output.
|
||||||
|
|
||||||
AM_CPPFLAGS =
|
AM_CPPFLAGS =
|
||||||
AM_CFLAGS =
|
AM_CFLAGS =
|
||||||
|
|
@ -273,6 +274,13 @@ EXTRA_DIST += fcntl.in.h
|
||||||
|
|
||||||
## end gnulib module fcntl-h
|
## end gnulib module fcntl-h
|
||||||
|
|
||||||
|
## begin gnulib module filename
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += filename.h
|
||||||
|
|
||||||
|
## end gnulib module filename
|
||||||
|
|
||||||
## begin gnulib module float
|
## begin gnulib module float
|
||||||
|
|
||||||
BUILT_SOURCES += $(FLOAT_H)
|
BUILT_SOURCES += $(FLOAT_H)
|
||||||
|
|
@ -306,11 +314,11 @@ EXTRA_libgnu_la_SOURCES += float.c itold.c
|
||||||
|
|
||||||
## begin gnulib module getopt-posix
|
## begin gnulib module getopt-posix
|
||||||
|
|
||||||
BUILT_SOURCES += $(GETOPT_H)
|
BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H)
|
||||||
|
|
||||||
# We need the following in order to create <getopt.h> when the system
|
# We need the following in order to create <getopt.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
|
getopt.h: getopt.in.h $(top_builddir)/config.status
|
||||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
|
sed -e 's|@''GUARD_PREFIX''@|GL|g' \
|
||||||
|
|
@ -323,9 +331,18 @@ getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
|
||||||
< $(srcdir)/getopt.in.h; \
|
< $(srcdir)/getopt.in.h; \
|
||||||
} > $@-t && \
|
} > $@-t && \
|
||||||
mv -f $@-t $@
|
mv -f $@-t $@
|
||||||
MOSTLYCLEANFILES += getopt.h getopt.h-t
|
|
||||||
|
|
||||||
EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
|
getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
|
||||||
|
< $(srcdir)/getopt-cdefs.in.h; \
|
||||||
|
} > $@-t && \
|
||||||
|
mv -f $@-t $@
|
||||||
|
|
||||||
|
MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h getopt1.c getopt_int.h
|
||||||
|
|
||||||
EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c
|
EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c
|
||||||
|
|
||||||
|
|
@ -478,6 +495,15 @@ EXTRA_DIST += config.charset ref-add.sin ref-del.sin
|
||||||
|
|
||||||
## end gnulib module localcharset
|
## end gnulib module localcharset
|
||||||
|
|
||||||
|
## begin gnulib module localtime-buffer
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += localtime-buffer.c localtime-buffer.h
|
||||||
|
|
||||||
|
EXTRA_libgnu_la_SOURCES += localtime-buffer.c
|
||||||
|
|
||||||
|
## end gnulib module localtime-buffer
|
||||||
|
|
||||||
## begin gnulib module lstat
|
## begin gnulib module lstat
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -505,6 +531,14 @@ EXTRA_libgnu_la_SOURCES += malloc.c
|
||||||
|
|
||||||
## end gnulib module malloc-posix
|
## end gnulib module malloc-posix
|
||||||
|
|
||||||
|
## begin gnulib module malloca
|
||||||
|
|
||||||
|
libgnu_la_SOURCES += malloca.c
|
||||||
|
|
||||||
|
EXTRA_DIST += malloca.h malloca.valgrind
|
||||||
|
|
||||||
|
## end gnulib module malloca
|
||||||
|
|
||||||
## begin gnulib module mbrtowc
|
## begin gnulib module mbrtowc
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -647,90 +681,57 @@ EXTRA_libgnu_la_SOURCES += sleep.c
|
||||||
## begin gnulib module snippet/_Noreturn
|
## begin gnulib module snippet/_Noreturn
|
||||||
|
|
||||||
# Because this Makefile snippet defines a variable used by other
|
# Because this Makefile snippet defines a variable used by other
|
||||||
# gnulib Makefile snippets, it must be present in all Makefile.am that
|
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||||
# need it. This is ensured by the applicability 'all' defined above.
|
# need it. This is ensured by the applicability 'all' defined above.
|
||||||
|
|
||||||
_NORETURN_H=$(top_srcdir)/tools/snippet/_Noreturn.h
|
_NORETURN_H=$(srcdir)/_Noreturn.h
|
||||||
|
|
||||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/_Noreturn.h
|
EXTRA_DIST += _Noreturn.h
|
||||||
|
|
||||||
## end gnulib module snippet/_Noreturn
|
## end gnulib module snippet/_Noreturn
|
||||||
|
|
||||||
## begin gnulib module snippet/arg-nonnull
|
## begin gnulib module snippet/arg-nonnull
|
||||||
|
|
||||||
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
|
# Because this Makefile snippet defines a variable used by other
|
||||||
# statements but through direct file reference. Therefore this snippet must be
|
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||||
# present in all Makefile.am that need it. This is ensured by the applicability
|
# need it. This is ensured by the applicability 'all' defined above.
|
||||||
# 'all' defined above.
|
|
||||||
|
|
||||||
BUILT_SOURCES += arg-nonnull.h
|
ARG_NONNULL_H=$(srcdir)/arg-nonnull.h
|
||||||
# The arg-nonnull.h that gets inserted into generated .h files is the same as
|
|
||||||
# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
|
|
||||||
# off.
|
|
||||||
arg-nonnull.h: $(top_srcdir)/tools/snippet/arg-nonnull.h
|
|
||||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
|
||||||
sed -n -e '/GL_ARG_NONNULL/,$$p' \
|
|
||||||
< $(top_srcdir)/tools/snippet/arg-nonnull.h \
|
|
||||||
> $@-t && \
|
|
||||||
mv $@-t $@
|
|
||||||
MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
|
|
||||||
|
|
||||||
ARG_NONNULL_H=arg-nonnull.h
|
EXTRA_DIST += arg-nonnull.h
|
||||||
|
|
||||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/arg-nonnull.h
|
|
||||||
|
|
||||||
## end gnulib module snippet/arg-nonnull
|
## end gnulib module snippet/arg-nonnull
|
||||||
|
|
||||||
## begin gnulib module snippet/c++defs
|
## begin gnulib module snippet/c++defs
|
||||||
|
|
||||||
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
|
# Because this Makefile snippet defines a variable used by other
|
||||||
# statements but through direct file reference. Therefore this snippet must be
|
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||||
# present in all Makefile.am that need it. This is ensured by the applicability
|
# need it. This is ensured by the applicability 'all' defined above.
|
||||||
# 'all' defined above.
|
|
||||||
|
|
||||||
BUILT_SOURCES += c++defs.h
|
CXXDEFS_H=$(srcdir)/c++defs.h
|
||||||
# The c++defs.h that gets inserted into generated .h files is the same as
|
|
||||||
# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
|
|
||||||
c++defs.h: $(top_srcdir)/tools/snippet/c++defs.h
|
|
||||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
|
||||||
sed -n -e '/_GL_CXXDEFS/,$$p' \
|
|
||||||
< $(top_srcdir)/tools/snippet/c++defs.h \
|
|
||||||
> $@-t && \
|
|
||||||
mv $@-t $@
|
|
||||||
MOSTLYCLEANFILES += c++defs.h c++defs.h-t
|
|
||||||
|
|
||||||
CXXDEFS_H=c++defs.h
|
EXTRA_DIST += c++defs.h
|
||||||
|
|
||||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/c++defs.h
|
|
||||||
|
|
||||||
## end gnulib module snippet/c++defs
|
## end gnulib module snippet/c++defs
|
||||||
|
|
||||||
## begin gnulib module snippet/warn-on-use
|
## begin gnulib module snippet/warn-on-use
|
||||||
|
|
||||||
BUILT_SOURCES += warn-on-use.h
|
# Because this Makefile snippet defines a variable used by other
|
||||||
# The warn-on-use.h that gets inserted into generated .h files is the same as
|
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||||
# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
|
# need it. This is ensured by the applicability 'all' defined above.
|
||||||
# off.
|
|
||||||
warn-on-use.h: $(top_srcdir)/tools/snippet/warn-on-use.h
|
|
||||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
|
||||||
sed -n -e '/^.ifndef/,$$p' \
|
|
||||||
< $(top_srcdir)/tools/snippet/warn-on-use.h \
|
|
||||||
> $@-t && \
|
|
||||||
mv $@-t $@
|
|
||||||
MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
|
|
||||||
|
|
||||||
WARN_ON_USE_H=warn-on-use.h
|
WARN_ON_USE_H=$(srcdir)/warn-on-use.h
|
||||||
|
|
||||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/warn-on-use.h
|
EXTRA_DIST += warn-on-use.h
|
||||||
|
|
||||||
## end gnulib module snippet/warn-on-use
|
## end gnulib module snippet/warn-on-use
|
||||||
|
|
||||||
## begin gnulib module stat
|
## begin gnulib module stat
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += stat.c
|
EXTRA_DIST += stat-w32.c stat-w32.h stat.c
|
||||||
|
|
||||||
EXTRA_libgnu_la_SOURCES += stat.c
|
EXTRA_libgnu_la_SOURCES += stat-w32.c stat.c
|
||||||
|
|
||||||
## end gnulib module stat
|
## end gnulib module stat
|
||||||
|
|
||||||
|
|
@ -1163,6 +1164,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||||
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
||||||
|
-e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
|
||||||
-e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
|
-e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
|
||||||
-e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
|
-e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
|
||||||
-e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
|
-e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
|
||||||
|
|
@ -1201,7 +1203,8 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
|
-e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
|
||||||
-e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
|
-e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
|
||||||
< $(srcdir)/string.in.h | \
|
< $(srcdir)/string.in.h | \
|
||||||
sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
|
sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
|
||||||
|
-e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
|
||||||
-e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
|
-e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
|
||||||
-e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
|
-e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
|
||||||
-e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
|
-e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
|
||||||
|
|
@ -1323,6 +1326,7 @@ sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
|
||||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||||
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
|
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
|
||||||
-e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
|
-e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
|
||||||
|
-e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
|
||||||
-e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
|
-e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
|
||||||
-e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
|
-e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
|
||||||
-e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
|
-e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
|
||||||
|
|
@ -1336,6 +1340,7 @@ sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNU
|
||||||
-e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
|
-e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
|
||||||
-e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
|
-e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
|
||||||
-e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
|
-e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
|
||||||
|
-e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \
|
||||||
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
|
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
|
||||||
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
|
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
|
||||||
-e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
|
-e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
|
||||||
|
|
@ -1419,6 +1424,7 @@ sys/types.h: sys_types.in.h $(top_builddir)/config.status
|
||||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||||
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
|
-e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
|
||||||
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
|
-e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
|
||||||
|
-e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
|
||||||
< $(srcdir)/sys_types.in.h; \
|
< $(srcdir)/sys_types.in.h; \
|
||||||
} > $@-t && \
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
|
|
@ -1507,24 +1513,31 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||||
-e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
|
-e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
|
||||||
-e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
|
-e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \
|
||||||
|
-e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \
|
||||||
-e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
|
-e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
|
||||||
-e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
|
-e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
|
||||||
|
-e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \
|
||||||
-e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
|
-e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
|
||||||
-e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
|
-e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
|
||||||
-e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
|
-e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
|
||||||
-e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
|
-e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
|
||||||
|
-e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \
|
||||||
-e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
|
-e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
|
||||||
-e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
|
-e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
|
||||||
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
|
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
|
||||||
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
|
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
|
||||||
-e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
|
-e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
|
||||||
|
-e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \
|
||||||
|
-e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
|
||||||
-e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
|
-e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
|
||||||
-e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
|
-e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
|
||||||
-e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
|
-e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
|
||||||
-e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
|
-e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
|
||||||
-e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
|
-e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
|
||||||
|
-e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \
|
||||||
-e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
|
-e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
|
||||||
|
-e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \
|
||||||
-e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
-e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||||
-e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
-e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||||
-e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
-e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||||
|
|
@ -1599,6 +1612,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
|
-e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
|
||||||
-e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
|
-e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
|
||||||
-e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
|
-e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
|
||||||
|
-e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \
|
||||||
-e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
|
-e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
|
||||||
-e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
|
-e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
|
||||||
-e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
|
-e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
|
||||||
|
|
@ -1636,6 +1650,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
|
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
|
||||||
-e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
|
-e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
|
||||||
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
|
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
|
||||||
|
-e 's|@''HAVE_TRUNCATE''@|$(HAVE_TRUNCATE)|g' \
|
||||||
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
|
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
|
||||||
-e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
|
-e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
|
||||||
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
|
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
|
||||||
|
|
@ -1677,6 +1692,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
|
||||||
-e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
|
-e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
|
||||||
-e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
|
-e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
|
||||||
-e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
|
-e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
|
||||||
|
-e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \
|
||||||
-e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
|
-e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
|
||||||
-e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
|
-e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
|
||||||
-e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
|
-e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
|
||||||
|
|
@ -1736,6 +1752,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
|
||||||
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
|
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
|
||||||
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
||||||
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
|
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
|
||||||
|
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
|
||||||
-e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
|
-e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
|
||||||
-e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
|
-e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
|
||||||
-e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
|
-e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
|
||||||
|
|
@ -1776,6 +1793,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
|
||||||
-e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
|
-e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
|
||||||
-e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
|
-e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
|
||||||
-e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
|
-e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
|
||||||
|
-e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
|
||||||
< $(srcdir)/wchar.in.h | \
|
< $(srcdir)/wchar.in.h | \
|
||||||
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
|
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
|
||||||
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
|
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
|
||||||
|
|
@ -1815,6 +1833,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
|
||||||
-e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
|
-e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
|
||||||
-e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
|
-e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
|
||||||
-e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
|
-e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
|
||||||
|
-e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
|
||||||
-e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
|
-e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
|
||||||
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
||||||
| \
|
| \
|
||||||
|
|
@ -1831,6 +1850,7 @@ wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)
|
||||||
-e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
|
-e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
|
||||||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
||||||
-e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
|
-e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
|
||||||
|
-e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
|
||||||
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
|
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
|
||||||
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
|
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
|
||||||
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
|
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
|
||||||
|
|
@ -1858,6 +1878,7 @@ wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||||
-e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
|
-e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
|
||||||
|
-e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
|
||||||
-e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
|
-e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
|
||||||
-e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
|
-e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
|
||||||
-e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
|
-e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
|
||||||
|
|
|
||||||
|
|
@ -880,7 +880,8 @@ hol_append (struct hol *hol, struct hol *more)
|
||||||
|
|
||||||
/* Fix up the short options pointers from HOL. */
|
/* Fix up the short options pointers from HOL. */
|
||||||
for (e = entries, left = hol->num_entries; left > 0; e++, left--)
|
for (e = entries, left = hol->num_entries; left > 0; e++, left--)
|
||||||
e->short_options += (short_options - hol->short_options);
|
e->short_options
|
||||||
|
= short_options + (e->short_options - hol->short_options);
|
||||||
|
|
||||||
/* Now add the short options from MORE, fixing up its entries
|
/* Now add the short options from MORE, fixing up its entries
|
||||||
too. */
|
too. */
|
||||||
|
|
@ -1460,7 +1461,7 @@ argp_args_usage (const struct argp *argp, const struct argp_state *state,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the documentation for ARGP to STREAM; if POST is false, then
|
/* Print the documentation for ARGP to STREAM; if POST is false, then
|
||||||
everything preceeding a '\v' character in the documentation strings (or
|
everything preceding a '\v' character in the documentation strings (or
|
||||||
the whole string, for those with none) is printed, otherwise, everything
|
the whole string, for those with none) is printed, otherwise, everything
|
||||||
following the '\v' character (nothing for strings without). Each separate
|
following the '\v' character (nothing for strings without). Each separate
|
||||||
bit of documentation is separated a blank line, and if PRE_BLANK is true,
|
bit of documentation is separated a blank line, and if PRE_BLANK is true,
|
||||||
|
|
@ -1873,8 +1874,8 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
|
||||||
char const *s = NULL;
|
char const *s = NULL;
|
||||||
putc_unlocked (':', stream);
|
putc_unlocked (':', stream);
|
||||||
putc_unlocked (' ', stream);
|
putc_unlocked (' ', stream);
|
||||||
# if HAVE_DECL_STRERROR_R
|
# if GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R
|
||||||
# if STRERROR_R_CHAR_P
|
# if !GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P
|
||||||
s = __strerror_r (errnum, buf, sizeof buf);
|
s = __strerror_r (errnum, buf, sizeof buf);
|
||||||
# else
|
# else
|
||||||
if (__strerror_r (errnum, buf, sizeof buf) == 0)
|
if (__strerror_r (errnum, buf, sizeof buf) == 0)
|
||||||
|
|
|
||||||
|
|
@ -740,12 +740,15 @@ parser_parse_opt (struct parser *parser, int opt, char *val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* A long option. We use shifts instead of masking for extracting
|
/* A long option. Preserve the sign in the user key, without
|
||||||
the user value in order to preserve the sign. */
|
invoking undefined behavior. Assume two's complement. */
|
||||||
err =
|
{
|
||||||
group_parse (&parser->groups[group_key - 1], &parser->state,
|
int user_key =
|
||||||
(opt << GROUP_BITS) >> GROUP_BITS,
|
((opt & (1 << (USER_BITS - 1))) ? ~USER_MASK : 0) | (opt & USER_MASK);
|
||||||
parser->opt_data.optarg);
|
err =
|
||||||
|
group_parse (&parser->groups[group_key - 1], &parser->state,
|
||||||
|
user_key, parser->opt_data.optarg);
|
||||||
|
}
|
||||||
|
|
||||||
if (err == EBADKEY)
|
if (err == EBADKEY)
|
||||||
/* At least currently, an option not recognized is an error in the
|
/* At least currently, an option not recognized is an error in the
|
||||||
|
|
|
||||||
23
lib/error.c
23
lib/error.c
|
|
@ -98,28 +98,32 @@ extern void __error_at_line (int status, int errnum, const char *file_name,
|
||||||
# define WIN32_LEAN_AND_MEAN
|
# define WIN32_LEAN_AND_MEAN
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
/* Get _get_osfhandle. */
|
/* Get _get_osfhandle. */
|
||||||
# include "msvc-nothrow.h"
|
# if GNULIB_MSVC_NOTHROW
|
||||||
|
# include "msvc-nothrow.h"
|
||||||
|
# else
|
||||||
|
# include <io.h>
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* The gnulib override of fcntl is not needed in this file. */
|
/* The gnulib override of fcntl is not needed in this file. */
|
||||||
# undef fcntl
|
# undef fcntl
|
||||||
|
|
||||||
# if !HAVE_DECL_STRERROR_R
|
# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R)
|
||||||
# ifndef HAVE_DECL_STRERROR_R
|
# ifndef HAVE_DECL_STRERROR_R
|
||||||
"this configure-time declaration test was not run"
|
"this configure-time declaration test was not run"
|
||||||
# endif
|
# endif
|
||||||
# if STRERROR_R_CHAR_P
|
# if STRERROR_R_CHAR_P
|
||||||
char *strerror_r ();
|
char *strerror_r (int errnum, char *buf, size_t buflen);
|
||||||
# else
|
# else
|
||||||
int strerror_r ();
|
int strerror_r (int errnum, char *buf, size_t buflen);
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#define program_name getprogname ()
|
#define program_name getprogname ()
|
||||||
|
|
||||||
# if HAVE_STRERROR_R || defined strerror_r
|
# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r
|
||||||
# define __strerror_r strerror_r
|
# define __strerror_r strerror_r
|
||||||
# endif /* HAVE_STRERROR_R || defined strerror_r */
|
# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */
|
||||||
#endif /* not _LIBC */
|
#endif /* not _LIBC */
|
||||||
|
|
||||||
#if !_LIBC
|
#if !_LIBC
|
||||||
|
|
@ -172,9 +176,9 @@ print_errno_message (int errnum)
|
||||||
{
|
{
|
||||||
char const *s;
|
char const *s;
|
||||||
|
|
||||||
#if defined HAVE_STRERROR_R || _LIBC
|
#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R
|
||||||
char errbuf[1024];
|
char errbuf[1024];
|
||||||
# if _LIBC || STRERROR_R_CHAR_P
|
# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P)
|
||||||
s = __strerror_r (errnum, errbuf, sizeof errbuf);
|
s = __strerror_r (errnum, errbuf, sizeof errbuf);
|
||||||
# else
|
# else
|
||||||
if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
|
if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
|
||||||
|
|
@ -268,7 +272,6 @@ error_tail (int status, int errnum, const char *message, va_list args)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
vfprintf (stderr, message, args);
|
vfprintf (stderr, message, args);
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
++error_message_count;
|
++error_message_count;
|
||||||
if (errnum)
|
if (errnum)
|
||||||
|
|
@ -318,6 +321,7 @@ error (int status, int errnum, const char *message, ...)
|
||||||
|
|
||||||
va_start (args, message);
|
va_start (args, message);
|
||||||
error_tail (status, errnum, message, args);
|
error_tail (status, errnum, message, args);
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
_IO_funlockfile (stderr);
|
_IO_funlockfile (stderr);
|
||||||
|
|
@ -388,6 +392,7 @@ error_at_line (int status, int errnum, const char *file_name,
|
||||||
|
|
||||||
va_start (args, message);
|
va_start (args, message);
|
||||||
error_tail (status, errnum, message, args);
|
error_tail (status, errnum, message, args);
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
_IO_funlockfile (stderr);
|
_IO_funlockfile (stderr);
|
||||||
|
|
|
||||||
54
lib/filename.h
Normal file
54
lib/filename.h
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
/* Basic filename support macros.
|
||||||
|
Copyright (C) 2001-2004, 2007-2017 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/>. */
|
||||||
|
|
||||||
|
#ifndef _FILENAME_H
|
||||||
|
#define _FILENAME_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Pathname support.
|
||||||
|
ISSLASH(C) tests whether C is a directory separator character.
|
||||||
|
IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
|
||||||
|
it may be concatenated to a directory pathname.
|
||||||
|
IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
|
||||||
|
*/
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Native Windows, Cygwin, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
# define HAS_DEVICE(P) \
|
||||||
|
((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
|
||||||
|
&& (P)[1] == ':')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
|
||||||
|
# define IS_PATH_WITH_DIR(P) \
|
||||||
|
(strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
|
||||||
|
# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define ISSLASH(C) ((C) == '/')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
|
||||||
|
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
||||||
|
# define FILE_SYSTEM_PREFIX_LEN(P) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _FILENAME_H */
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
|
/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
|
||||||
precision in the compiler but 64 bits of precision at runtime. See
|
precision in the compiler but 64 bits of precision at runtime. See
|
||||||
<http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>. */
|
<http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>. */
|
||||||
#if defined __i386__ && defined __FreeBSD__
|
#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
|
||||||
/* Number of mantissa units, in base FLT_RADIX. */
|
/* Number of mantissa units, in base FLT_RADIX. */
|
||||||
# undef LDBL_MANT_DIG
|
# undef LDBL_MANT_DIG
|
||||||
# define LDBL_MANT_DIG 64
|
# define LDBL_MANT_DIG 64
|
||||||
|
|
|
||||||
67
lib/getopt-cdefs.in.h
Normal file
67
lib/getopt-cdefs.in.h
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
/* getopt-on-non-glibc compatibility macros.
|
||||||
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
|
This file is part of gnulib.
|
||||||
|
Unlike most of the getopt implementation, it is NOT shared
|
||||||
|
with the GNU C Library.
|
||||||
|
|
||||||
|
gnulib 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.
|
||||||
|
|
||||||
|
gnulib 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 gnulib; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GETOPT_CDEFS_H
|
||||||
|
#define _GETOPT_CDEFS_H 1
|
||||||
|
|
||||||
|
/* This header should not be used directly; include getopt.h or
|
||||||
|
unistd.h instead. It does not have a protective #error, because
|
||||||
|
the guard macro for getopt.h in gnulib is not fixed. */
|
||||||
|
|
||||||
|
/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect
|
||||||
|
a number of the internal macros supplied to GNU libc's headers by
|
||||||
|
sys/cdefs.h. Provide fallback definitions for all of them. */
|
||||||
|
#if @HAVE_SYS_CDEFS_H@
|
||||||
|
# include <sys/cdefs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __BEGIN_DECLS
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define __BEGIN_DECLS extern "C" {
|
||||||
|
# else
|
||||||
|
# define __BEGIN_DECLS /* nothing */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef __END_DECLS
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define __END_DECLS }
|
||||||
|
# else
|
||||||
|
# define __END_DECLS /* nothing */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __GNUC_PREREQ
|
||||||
|
# if defined __GNUC__ && defined __GNUC_VERSION__
|
||||||
|
# define __GNUC_PREREQ(maj, min) \
|
||||||
|
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||||
|
# else
|
||||||
|
# define __GNUC_PREREQ(maj, min) 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __THROW
|
||||||
|
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
||||||
|
# define __THROW throw ()
|
||||||
|
# else
|
||||||
|
# define __THROW
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GETOPT_CDEFS_H */
|
||||||
96
lib/getopt-core.h
Normal file
96
lib/getopt-core.h
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
/* Declarations for getopt (basic, portable features only).
|
||||||
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library and is also part of gnulib.
|
||||||
|
Patches to this file should be submitted to both projects.
|
||||||
|
|
||||||
|
The GNU C Library 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.
|
||||||
|
|
||||||
|
The GNU C Library 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 the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GETOPT_CORE_H
|
||||||
|
#define _GETOPT_CORE_H 1
|
||||||
|
|
||||||
|
/* This header should not be used directly; include getopt.h or
|
||||||
|
unistd.h instead. Unlike most bits headers, it does not have
|
||||||
|
a protective #error, because the guard macro for getopt.h in
|
||||||
|
gnulib is not fixed. */
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* For communication from 'getopt' to the caller.
|
||||||
|
When 'getopt' finds an option that takes an argument,
|
||||||
|
the argument value is returned here.
|
||||||
|
Also, when 'ordering' is RETURN_IN_ORDER,
|
||||||
|
each non-option ARGV-element is returned here. */
|
||||||
|
|
||||||
|
extern char *optarg;
|
||||||
|
|
||||||
|
/* Index in ARGV of the next element to be scanned.
|
||||||
|
This is used for communication to and from the caller
|
||||||
|
and for communication between successive calls to 'getopt'.
|
||||||
|
|
||||||
|
On entry to 'getopt', zero means this is the first call; initialize.
|
||||||
|
|
||||||
|
When 'getopt' returns -1, this is the index of the first of the
|
||||||
|
non-option elements that the caller should itself scan.
|
||||||
|
|
||||||
|
Otherwise, 'optind' communicates from one call to the next
|
||||||
|
how much of ARGV has been scanned so far. */
|
||||||
|
|
||||||
|
extern int optind;
|
||||||
|
|
||||||
|
/* Callers store zero here to inhibit the error message 'getopt' prints
|
||||||
|
for unrecognized options. */
|
||||||
|
|
||||||
|
extern int opterr;
|
||||||
|
|
||||||
|
/* Set to an option character which was unrecognized. */
|
||||||
|
|
||||||
|
extern int optopt;
|
||||||
|
|
||||||
|
/* Get definitions and prototypes for functions to process the
|
||||||
|
arguments in ARGV (ARGC of them, minus the program name) for
|
||||||
|
options given in OPTS.
|
||||||
|
|
||||||
|
Return the option character from OPTS just read. Return -1 when
|
||||||
|
there are no more options. For unrecognized options, or options
|
||||||
|
missing arguments, 'optopt' is set to the option letter, and '?' is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
The OPTS string is a list of characters which are recognized option
|
||||||
|
letters, optionally followed by colons, specifying that that letter
|
||||||
|
takes an argument, to be placed in 'optarg'.
|
||||||
|
|
||||||
|
If a letter in OPTS is followed by two colons, its argument is
|
||||||
|
optional. This behavior is specific to the GNU 'getopt'.
|
||||||
|
|
||||||
|
The argument '--' causes premature termination of argument
|
||||||
|
scanning, explicitly telling 'getopt' that there are no more
|
||||||
|
options.
|
||||||
|
|
||||||
|
If OPTS begins with '-', then non-option arguments are treated as
|
||||||
|
arguments to the option '\1'. This behavior is specific to the GNU
|
||||||
|
'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in
|
||||||
|
the environment, then do not permute arguments.
|
||||||
|
|
||||||
|
For standards compliance, the 'argv' argument has the type
|
||||||
|
char *const *, but this is inaccurate; if argument permutation is
|
||||||
|
enabled, the argv array (not the strings it points to) must be
|
||||||
|
writable. */
|
||||||
|
|
||||||
|
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
|
||||||
|
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* _GETOPT_CORE_H */
|
||||||
77
lib/getopt-ext.h
Normal file
77
lib/getopt-ext.h
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
/* Declarations for getopt (GNU extensions).
|
||||||
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library and is also part of gnulib.
|
||||||
|
Patches to this file should be submitted to both projects.
|
||||||
|
|
||||||
|
The GNU C Library 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.
|
||||||
|
|
||||||
|
The GNU C Library 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 the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GETOPT_EXT_H
|
||||||
|
#define _GETOPT_EXT_H 1
|
||||||
|
|
||||||
|
/* This header should not be used directly; include getopt.h instead.
|
||||||
|
Unlike most bits headers, it does not have a protective #error,
|
||||||
|
because the guard macro for getopt.h in gnulib is not fixed. */
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* Describe the long-named options requested by the application.
|
||||||
|
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
||||||
|
of 'struct option' terminated by an element containing a name which is
|
||||||
|
zero.
|
||||||
|
|
||||||
|
The field 'has_arg' is:
|
||||||
|
no_argument (or 0) if the option does not take an argument,
|
||||||
|
required_argument (or 1) if the option requires an argument,
|
||||||
|
optional_argument (or 2) if the option takes an optional argument.
|
||||||
|
|
||||||
|
If the field 'flag' is not NULL, it points to a variable that is set
|
||||||
|
to the value given in the field 'val' when the option is found, but
|
||||||
|
left unchanged if the option is not found.
|
||||||
|
|
||||||
|
To have a long-named option do something other than set an 'int' to
|
||||||
|
a compiled-in constant, such as set a value from 'optarg', set the
|
||||||
|
option's 'flag' field to zero and its 'val' field to a nonzero
|
||||||
|
value (the equivalent single-letter option character, if there is
|
||||||
|
one). For long options that have a zero 'flag' field, 'getopt'
|
||||||
|
returns the contents of the 'val' field. */
|
||||||
|
|
||||||
|
struct option
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
/* has_arg can't be an enum because some compilers complain about
|
||||||
|
type mismatches in all the code that assumes it is an int. */
|
||||||
|
int has_arg;
|
||||||
|
int *flag;
|
||||||
|
int val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Names for the values of the 'has_arg' field of 'struct option'. */
|
||||||
|
|
||||||
|
#define no_argument 0
|
||||||
|
#define required_argument 1
|
||||||
|
#define optional_argument 2
|
||||||
|
|
||||||
|
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
|
||||||
|
const char *__shortopts,
|
||||||
|
const struct option *__longopts, int *__longind)
|
||||||
|
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||||
|
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
|
||||||
|
const char *__shortopts,
|
||||||
|
const struct option *__longopts, int *__longind)
|
||||||
|
__THROW _GL_ARG_NONNULL ((2, 3));
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* _GETOPT_EXT_H */
|
||||||
59
lib/getopt-pfx-core.h
Normal file
59
lib/getopt-pfx-core.h
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* getopt (basic, portable features) gnulib wrapper header.
|
||||||
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
|
This file is part of gnulib.
|
||||||
|
Unlike most of the getopt implementation, it is NOT shared
|
||||||
|
with the GNU C Library.
|
||||||
|
|
||||||
|
gnulib 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.
|
||||||
|
|
||||||
|
gnulib 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 gnulib; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GETOPT_PFX_CORE_H
|
||||||
|
#define _GETOPT_PFX_CORE_H 1
|
||||||
|
|
||||||
|
/* This header should not be used directly; include getopt.h or
|
||||||
|
unistd.h instead. It does not have a protective #error, because
|
||||||
|
the guard macro for getopt.h in gnulib is not fixed. */
|
||||||
|
|
||||||
|
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||||
|
identifier that prefixes the external functions and variables
|
||||||
|
defined in getopt-core.h and getopt-ext.h. Systematically
|
||||||
|
rename identifiers so that they do not collide with the system
|
||||||
|
functions and variables. Renaming avoids problems with some
|
||||||
|
compilers and linkers. */
|
||||||
|
#ifdef __GETOPT_PREFIX
|
||||||
|
# ifndef __GETOPT_ID
|
||||||
|
# define __GETOPT_CONCAT(x, y) x ## y
|
||||||
|
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
||||||
|
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
||||||
|
# endif
|
||||||
|
# undef getopt
|
||||||
|
# undef optarg
|
||||||
|
# undef opterr
|
||||||
|
# undef optind
|
||||||
|
# undef optopt
|
||||||
|
# define getopt __GETOPT_ID (getopt)
|
||||||
|
# define optarg __GETOPT_ID (optarg)
|
||||||
|
# define opterr __GETOPT_ID (opterr)
|
||||||
|
# define optind __GETOPT_ID (optind)
|
||||||
|
# define optopt __GETOPT_ID (optopt)
|
||||||
|
|
||||||
|
/* The system's getopt.h may have already included getopt-core.h to
|
||||||
|
declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that
|
||||||
|
getopt-core.h declares them with prefixes. */
|
||||||
|
# undef _GETOPT_CORE_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <getopt-core.h>
|
||||||
|
|
||||||
|
#endif /* _GETOPT_PFX_CORE_H */
|
||||||
71
lib/getopt-pfx-ext.h
Normal file
71
lib/getopt-pfx-ext.h
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
/* getopt (GNU extensions) gnulib wrapper header.
|
||||||
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
|
This file is part of gnulib.
|
||||||
|
Unlike most of the getopt implementation, it is NOT shared
|
||||||
|
with the GNU C Library.
|
||||||
|
|
||||||
|
gnulib 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.
|
||||||
|
|
||||||
|
gnulib 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 gnulib; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GETOPT_PFX_EXT_H
|
||||||
|
#define _GETOPT_PFX_EXT_H 1
|
||||||
|
|
||||||
|
/* This header should not be used directly; include getopt.h instead.
|
||||||
|
It does not have a protective #error, because the guard macro for
|
||||||
|
getopt.h in gnulib is not fixed. */
|
||||||
|
|
||||||
|
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||||
|
identifier that prefixes the external functions and variables
|
||||||
|
defined in getopt-core.h and getopt-ext.h. Systematically
|
||||||
|
rename identifiers so that they do not collide with the system
|
||||||
|
functions and variables. Renaming avoids problems with some
|
||||||
|
compilers and linkers. */
|
||||||
|
#ifdef __GETOPT_PREFIX
|
||||||
|
# ifndef __GETOPT_ID
|
||||||
|
# define __GETOPT_CONCAT(x, y) x ## y
|
||||||
|
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
||||||
|
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
||||||
|
# endif
|
||||||
|
# undef getopt_long
|
||||||
|
# undef getopt_long_only
|
||||||
|
# undef option
|
||||||
|
# undef _getopt_internal
|
||||||
|
# define getopt_long __GETOPT_ID (getopt_long)
|
||||||
|
# define getopt_long_only __GETOPT_ID (getopt_long_only)
|
||||||
|
# define option __GETOPT_ID (option)
|
||||||
|
# define _getopt_internal __GETOPT_ID (getopt_internal)
|
||||||
|
|
||||||
|
/* The system's getopt.h may have already included getopt-ext.h to
|
||||||
|
declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that
|
||||||
|
getopt-ext.h declares them with prefixes. */
|
||||||
|
# undef _GETOPT_EXT_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Standalone applications get correct prototypes for getopt_long and
|
||||||
|
getopt_long_only; they declare "char **argv". For backward
|
||||||
|
compatibility with old applications, if __GETOPT_PREFIX is not
|
||||||
|
defined, we supply GNU-libc-compatible, but incorrect, prototypes
|
||||||
|
using "char *const *argv". (GNU libc is stuck with the incorrect
|
||||||
|
prototypes, as they are baked into older versions of LSB.) */
|
||||||
|
#ifndef __getopt_argv_const
|
||||||
|
# if defined __GETOPT_PREFIX
|
||||||
|
# define __getopt_argv_const /* empty */
|
||||||
|
# else
|
||||||
|
# define __getopt_argv_const const
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <getopt-ext.h>
|
||||||
|
|
||||||
|
#endif /* _GETOPT_PFX_EXT_H */
|
||||||
1436
lib/getopt.c
1436
lib/getopt.c
File diff suppressed because it is too large
Load diff
258
lib/getopt.in.h
258
lib/getopt.in.h
|
|
@ -1,20 +1,22 @@
|
||||||
/* Declarations for getopt.
|
/* Declarations for getopt.
|
||||||
Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2017 Free Software
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
Foundation, Inc.
|
This file is part of gnulib.
|
||||||
This file is part of the GNU C Library.
|
Unlike most of the getopt implementation, it is NOT shared
|
||||||
|
with the GNU C Library, which supplies a different version of
|
||||||
|
this file.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
gnulib is free software; you can redistribute it and/or modify it
|
||||||
it under the terms of the GNU General Public License as published by
|
under the terms of the GNU General Public License as
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
published by the Free Software Foundation; either version 3 of
|
||||||
(at your option) any later version.
|
the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
gnulib is distributed in the hope that it will be useful, but
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
License along with gnulib; if not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#ifndef _@GUARD_PREFIX@_GETOPT_H
|
#ifndef _@GUARD_PREFIX@_GETOPT_H
|
||||||
|
|
||||||
|
|
@ -32,230 +34,28 @@
|
||||||
# undef _GL_SYSTEM_GETOPT
|
# undef _GL_SYSTEM_GETOPT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _@GUARD_PREFIX@_GETOPT_H
|
#define _@GUARD_PREFIX@_GETOPT_H 1
|
||||||
|
|
||||||
#ifndef __need_getopt
|
|
||||||
# define _@GUARD_PREFIX@_GETOPT_H 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Standalone applications should #define __GETOPT_PREFIX to an
|
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||||
identifier that prefixes the external functions and variables
|
identifier that prefixes the external functions and variables
|
||||||
defined in this header. When this happens, include the
|
defined in getopt-core.h and getopt-ext.h. When this happens,
|
||||||
headers that might declare getopt so that they will not cause
|
include the headers that might declare getopt so that they will not
|
||||||
confusion if included after this file (if the system had <getopt.h>,
|
cause confusion if included after this file (if the system had
|
||||||
we have already included it). Then systematically rename
|
<getopt.h>, we have already included it). */
|
||||||
identifiers so that they do not collide with the system functions
|
|
||||||
and variables. Renaming avoids problems with some compilers and
|
|
||||||
linkers. */
|
|
||||||
#if defined __GETOPT_PREFIX
|
#if defined __GETOPT_PREFIX
|
||||||
# if !defined __need_getopt
|
# if !@HAVE_GETOPT_H@
|
||||||
# if !@HAVE_GETOPT_H@
|
# define __need_system_stdlib_h
|
||||||
# define __need_system_stdlib_h
|
# include <stdlib.h>
|
||||||
# include <stdlib.h>
|
# undef __need_system_stdlib_h
|
||||||
# undef __need_system_stdlib_h
|
# include <stdio.h>
|
||||||
# include <stdio.h>
|
# include <unistd.h>
|
||||||
# include <unistd.h>
|
|
||||||
# endif
|
|
||||||
# undef __need_getopt
|
|
||||||
# endif
|
|
||||||
# undef __GETOPT_CONCAT
|
|
||||||
# undef __GETOPT_XCONCAT
|
|
||||||
# undef __GETOPT_ID
|
|
||||||
# undef getopt
|
|
||||||
# undef getopt_long
|
|
||||||
# undef getopt_long_only
|
|
||||||
# undef optarg
|
|
||||||
# undef opterr
|
|
||||||
# undef optind
|
|
||||||
# undef optopt
|
|
||||||
# undef option
|
|
||||||
# undef _getopt_internal
|
|
||||||
# define __GETOPT_CONCAT(x, y) x ## y
|
|
||||||
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
|
|
||||||
# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
|
|
||||||
# define getopt __GETOPT_ID (getopt)
|
|
||||||
# define getopt_long __GETOPT_ID (getopt_long)
|
|
||||||
# define getopt_long_only __GETOPT_ID (getopt_long_only)
|
|
||||||
# define optarg __GETOPT_ID (optarg)
|
|
||||||
# define opterr __GETOPT_ID (opterr)
|
|
||||||
# define optind __GETOPT_ID (optind)
|
|
||||||
# define optopt __GETOPT_ID (optopt)
|
|
||||||
# define option __GETOPT_ID (option)
|
|
||||||
# define _getopt_internal __GETOPT_ID (getopt_internal)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Standalone applications get correct prototypes for getopt_long and
|
|
||||||
getopt_long_only; they declare "char **argv". libc uses prototypes
|
|
||||||
with "char *const *argv" that are incorrect because getopt_long and
|
|
||||||
getopt_long_only can permute argv; this is required for backward
|
|
||||||
compatibility (e.g., for LSB 2.0.1).
|
|
||||||
|
|
||||||
This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt',
|
|
||||||
but it caused redefinition warnings if both unistd.h and getopt.h were
|
|
||||||
included, since unistd.h includes getopt.h having previously defined
|
|
||||||
__need_getopt.
|
|
||||||
|
|
||||||
The only place where __getopt_argv_const is used is in definitions
|
|
||||||
of getopt_long and getopt_long_only below, but these are visible
|
|
||||||
only if __need_getopt is not defined, so it is quite safe to rewrite
|
|
||||||
the conditional as follows:
|
|
||||||
*/
|
|
||||||
#if !defined __need_getopt
|
|
||||||
# if defined __GETOPT_PREFIX
|
|
||||||
# define __getopt_argv_const /* empty */
|
|
||||||
# else
|
|
||||||
# define __getopt_argv_const const
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If __GNU_LIBRARY__ is not already defined, either we are being used
|
|
||||||
standalone, or this is the first header included in the source file.
|
|
||||||
If we are being used with glibc, we need to include <features.h>, but
|
|
||||||
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
|
|
||||||
not defined, include <ctype.h>, which will pull in <features.h> for us
|
|
||||||
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
|
|
||||||
doesn't flood the namespace with stuff the way some other headers do.) */
|
|
||||||
#if !defined __GNU_LIBRARY__
|
|
||||||
# include <ctype.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __THROW
|
|
||||||
# ifndef __GNUC_PREREQ
|
|
||||||
# define __GNUC_PREREQ(maj, min) (0)
|
|
||||||
# endif
|
|
||||||
# if defined __cplusplus && __GNUC_PREREQ (2,8)
|
|
||||||
# define __THROW throw ()
|
|
||||||
# else
|
|
||||||
# define __THROW
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The definition of _GL_ARG_NONNULL is copied here. */
|
/* The definition of _GL_ARG_NONNULL is copied here. */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#include <getopt-cdefs.h>
|
||||||
extern "C" {
|
#include <getopt-pfx-core.h>
|
||||||
#endif
|
#include <getopt-pfx-ext.h>
|
||||||
|
|
||||||
/* For communication from 'getopt' to the caller.
|
|
||||||
When 'getopt' finds an option that takes an argument,
|
|
||||||
the argument value is returned here.
|
|
||||||
Also, when 'ordering' is RETURN_IN_ORDER,
|
|
||||||
each non-option ARGV-element is returned here. */
|
|
||||||
|
|
||||||
extern char *optarg;
|
|
||||||
|
|
||||||
/* Index in ARGV of the next element to be scanned.
|
|
||||||
This is used for communication to and from the caller
|
|
||||||
and for communication between successive calls to 'getopt'.
|
|
||||||
|
|
||||||
On entry to 'getopt', zero means this is the first call; initialize.
|
|
||||||
|
|
||||||
When 'getopt' returns -1, this is the index of the first of the
|
|
||||||
non-option elements that the caller should itself scan.
|
|
||||||
|
|
||||||
Otherwise, 'optind' communicates from one call to the next
|
|
||||||
how much of ARGV has been scanned so far. */
|
|
||||||
|
|
||||||
extern int optind;
|
|
||||||
|
|
||||||
/* Callers store zero here to inhibit the error message 'getopt' prints
|
|
||||||
for unrecognized options. */
|
|
||||||
|
|
||||||
extern int opterr;
|
|
||||||
|
|
||||||
/* Set to an option character which was unrecognized. */
|
|
||||||
|
|
||||||
extern int optopt;
|
|
||||||
|
|
||||||
#ifndef __need_getopt
|
|
||||||
/* Describe the long-named options requested by the application.
|
|
||||||
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
|
||||||
of 'struct option' terminated by an element containing a name which is
|
|
||||||
zero.
|
|
||||||
|
|
||||||
The field 'has_arg' is:
|
|
||||||
no_argument (or 0) if the option does not take an argument,
|
|
||||||
required_argument (or 1) if the option requires an argument,
|
|
||||||
optional_argument (or 2) if the option takes an optional argument.
|
|
||||||
|
|
||||||
If the field 'flag' is not NULL, it points to a variable that is set
|
|
||||||
to the value given in the field 'val' when the option is found, but
|
|
||||||
left unchanged if the option is not found.
|
|
||||||
|
|
||||||
To have a long-named option do something other than set an 'int' to
|
|
||||||
a compiled-in constant, such as set a value from 'optarg', set the
|
|
||||||
option's 'flag' field to zero and its 'val' field to a nonzero
|
|
||||||
value (the equivalent single-letter option character, if there is
|
|
||||||
one). For long options that have a zero 'flag' field, 'getopt'
|
|
||||||
returns the contents of the 'val' field. */
|
|
||||||
|
|
||||||
# if !GNULIB_defined_struct_option
|
|
||||||
struct option
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
/* has_arg can't be an enum because some compilers complain about
|
|
||||||
type mismatches in all the code that assumes it is an int. */
|
|
||||||
int has_arg;
|
|
||||||
int *flag;
|
|
||||||
int val;
|
|
||||||
};
|
|
||||||
# define GNULIB_defined_struct_option 1
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Names for the values of the 'has_arg' field of 'struct option'. */
|
|
||||||
|
|
||||||
# define no_argument 0
|
|
||||||
# define required_argument 1
|
|
||||||
# define optional_argument 2
|
|
||||||
#endif /* need getopt */
|
|
||||||
|
|
||||||
|
|
||||||
/* Get definitions and prototypes for functions to process the
|
|
||||||
arguments in ARGV (ARGC of them, minus the program name) for
|
|
||||||
options given in OPTS.
|
|
||||||
|
|
||||||
Return the option character from OPTS just read. Return -1 when
|
|
||||||
there are no more options. For unrecognized options, or options
|
|
||||||
missing arguments, 'optopt' is set to the option letter, and '?' is
|
|
||||||
returned.
|
|
||||||
|
|
||||||
The OPTS string is a list of characters which are recognized option
|
|
||||||
letters, optionally followed by colons, specifying that that letter
|
|
||||||
takes an argument, to be placed in 'optarg'.
|
|
||||||
|
|
||||||
If a letter in OPTS is followed by two colons, its argument is
|
|
||||||
optional. This behavior is specific to the GNU 'getopt'.
|
|
||||||
|
|
||||||
The argument '--' causes premature termination of argument
|
|
||||||
scanning, explicitly telling 'getopt' that there are no more
|
|
||||||
options.
|
|
||||||
|
|
||||||
If OPTS begins with '-', then non-option arguments are treated as
|
|
||||||
arguments to the option '\1'. This behavior is specific to the GNU
|
|
||||||
'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in
|
|
||||||
the environment, then do not permute arguments. */
|
|
||||||
|
|
||||||
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
|
|
||||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
|
||||||
|
|
||||||
#ifndef __need_getopt
|
|
||||||
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
|
|
||||||
const char *__shortopts,
|
|
||||||
const struct option *__longopts, int *__longind)
|
|
||||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
|
||||||
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
|
|
||||||
const char *__shortopts,
|
|
||||||
const struct option *__longopts, int *__longind)
|
|
||||||
__THROW _GL_ARG_NONNULL ((2, 3));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Make sure we later can get all the definitions and declarations. */
|
|
||||||
#undef __need_getopt
|
|
||||||
|
|
||||||
#endif /* _@GUARD_PREFIX@_GETOPT_H */
|
#endif /* _@GUARD_PREFIX@_GETOPT_H */
|
||||||
#endif /* _@GUARD_PREFIX@_GETOPT_H */
|
|
||||||
|
|
|
||||||
165
lib/getopt1.c
165
lib/getopt1.c
|
|
@ -1,56 +1,44 @@
|
||||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||||
Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2017 Free Software
|
Copyright (C) 1987-2017 Free Software Foundation, Inc.
|
||||||
Foundation, Inc.
|
This file is part of the GNU C Library and is also part of gnulib.
|
||||||
This file is part of the GNU C Library.
|
Patches to this file should be submitted to both projects.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
it under the terms of the GNU General Public License as published by
|
modify it under the terms of the GNU General Public
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
License as published by the Free Software Foundation; either
|
||||||
(at your option) any later version.
|
version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifndef _LIBC
|
||||||
# include <getopt.h>
|
|
||||||
#else
|
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
# include "getopt.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "getopt.h"
|
||||||
#include "getopt_int.h"
|
#include "getopt_int.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
/* This needs to come after some library #include
|
|
||||||
to get __GNU_LIBRARY__ defined. */
|
|
||||||
#ifdef __GNU_LIBRARY__
|
|
||||||
#include <stdlib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
|
getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
|
||||||
const struct option *long_options, int *opt_index)
|
const struct option *long_options, int *opt_index)
|
||||||
{
|
{
|
||||||
return _getopt_internal (argc, (char **) argv, options, long_options,
|
return _getopt_internal (argc, (char **) argv, options, long_options,
|
||||||
opt_index, 0, 0);
|
opt_index, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
_getopt_long_r (int argc, char **argv, const char *options,
|
_getopt_long_r (int argc, char **argv, const char *options,
|
||||||
const struct option *long_options, int *opt_index,
|
const struct option *long_options, int *opt_index,
|
||||||
struct _getopt_data *d)
|
struct _getopt_data *d)
|
||||||
{
|
{
|
||||||
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
||||||
0, d, 0);
|
0, d, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
|
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
|
||||||
|
|
@ -60,26 +48,27 @@ _getopt_long_r (int argc, char **argv, const char *options,
|
||||||
|
|
||||||
int
|
int
|
||||||
getopt_long_only (int argc, char *__getopt_argv_const *argv,
|
getopt_long_only (int argc, char *__getopt_argv_const *argv,
|
||||||
const char *options,
|
const char *options,
|
||||||
const struct option *long_options, int *opt_index)
|
const struct option *long_options, int *opt_index)
|
||||||
{
|
{
|
||||||
return _getopt_internal (argc, (char **) argv, options, long_options,
|
return _getopt_internal (argc, (char **) argv, options, long_options,
|
||||||
opt_index, 1, 0);
|
opt_index, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
_getopt_long_only_r (int argc, char **argv, const char *options,
|
_getopt_long_only_r (int argc, char **argv, const char *options,
|
||||||
const struct option *long_options, int *opt_index,
|
const struct option *long_options, int *opt_index,
|
||||||
struct _getopt_data *d)
|
struct _getopt_data *d)
|
||||||
{
|
{
|
||||||
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
||||||
1, d, 0);
|
1, d, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
|
|
@ -93,74 +82,74 @@ main (int argc, char **argv)
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
static const struct option long_options[] =
|
static const struct option long_options[] =
|
||||||
{
|
{
|
||||||
{"add", 1, 0, 0},
|
{"add", 1, 0, 0},
|
||||||
{"append", 0, 0, 0},
|
{"append", 0, 0, 0},
|
||||||
{"delete", 1, 0, 0},
|
{"delete", 1, 0, 0},
|
||||||
{"verbose", 0, 0, 0},
|
{"verbose", 0, 0, 0},
|
||||||
{"create", 0, 0, 0},
|
{"create", 0, 0, 0},
|
||||||
{"file", 1, 0, 0},
|
{"file", 1, 0, 0},
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
c = getopt_long (argc, argv, "abc:d:0123456789",
|
c = getopt_long (argc, argv, "abc:d:0123456789",
|
||||||
long_options, &option_index);
|
long_options, &option_index);
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
printf ("option %s", long_options[option_index].name);
|
printf ("option %s", long_options[option_index].name);
|
||||||
if (optarg)
|
if (optarg)
|
||||||
printf (" with arg %s", optarg);
|
printf (" with arg %s", optarg);
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '0':
|
case '0':
|
||||||
case '1':
|
case '1':
|
||||||
case '2':
|
case '2':
|
||||||
case '3':
|
case '3':
|
||||||
case '4':
|
case '4':
|
||||||
case '5':
|
case '5':
|
||||||
case '6':
|
case '6':
|
||||||
case '7':
|
case '7':
|
||||||
case '8':
|
case '8':
|
||||||
case '9':
|
case '9':
|
||||||
if (digit_optind != 0 && digit_optind != this_option_optind)
|
if (digit_optind != 0 && digit_optind != this_option_optind)
|
||||||
printf ("digits occur in two different argv-elements.\n");
|
printf ("digits occur in two different argv-elements.\n");
|
||||||
digit_optind = this_option_optind;
|
digit_optind = this_option_optind;
|
||||||
printf ("option %c\n", c);
|
printf ("option %c\n", c);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
printf ("option a\n");
|
printf ("option a\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
printf ("option b\n");
|
printf ("option b\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
printf ("option c with value '%s'\n", optarg);
|
printf ("option c with value '%s'\n", optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
printf ("option d with value '%s'\n", optarg);
|
printf ("option d with value '%s'\n", optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf ("?? getopt returned character code 0%o ??\n", c);
|
printf ("?? getopt returned character code 0%o ??\n", c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optind < argc)
|
if (optind < argc)
|
||||||
{
|
{
|
||||||
printf ("non-option ARGV-elements: ");
|
printf ("non-option ARGV-elements: ");
|
||||||
while (optind < argc)
|
while (optind < argc)
|
||||||
printf ("%s ", argv[optind++]);
|
printf ("%s ", argv[optind++]);
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,31 @@
|
||||||
/* Internal declarations for getopt.
|
/* Internal declarations for getopt.
|
||||||
Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2017 Free Software
|
Copyright (C) 1989-2017 Free Software Foundation, Inc.
|
||||||
Foundation, Inc.
|
This file is part of the GNU C Library and is also part of gnulib.
|
||||||
This file is part of the GNU C Library.
|
Patches to this file should be submitted to both projects.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
it under the terms of the GNU General Public License as published by
|
modify it under the terms of the GNU General Public
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
License as published by the Free Software Foundation; either
|
||||||
(at your option) any later version.
|
version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
GNU General Public License for more details.
|
General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
#ifndef _GETOPT_INT_H
|
#ifndef _GETOPT_INT_H
|
||||||
#define _GETOPT_INT_H 1
|
#define _GETOPT_INT_H 1
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
|
||||||
extern int _getopt_internal (int ___argc, char **___argv,
|
extern int _getopt_internal (int ___argc, char **___argv,
|
||||||
const char *__shortopts,
|
const char *__shortopts,
|
||||||
const struct option *__longopts, int *__longind,
|
const struct option *__longopts, int *__longind,
|
||||||
int __long_only, int __posixly_correct);
|
int __long_only, int __posixly_correct);
|
||||||
|
|
||||||
|
|
||||||
/* Reentrant versions which can handle parsing multiple argument
|
/* Reentrant versions which can handle parsing multiple argument
|
||||||
|
|
@ -32,28 +33,20 @@ extern int _getopt_internal (int ___argc, char **___argv,
|
||||||
|
|
||||||
/* Describe how to deal with options that follow non-option ARGV-elements.
|
/* Describe how to deal with options that follow non-option ARGV-elements.
|
||||||
|
|
||||||
If the caller did not specify anything,
|
REQUIRE_ORDER means don't recognize them as options; stop option
|
||||||
the default is REQUIRE_ORDER if the environment variable
|
processing when the first non-option is seen. This is what POSIX
|
||||||
POSIXLY_CORRECT is defined, PERMUTE otherwise.
|
specifies should happen.
|
||||||
|
|
||||||
REQUIRE_ORDER means don't recognize them as options;
|
PERMUTE means permute the contents of ARGV as we scan, so that
|
||||||
stop option processing when the first non-option is seen.
|
eventually all the non-options are at the end. This allows options
|
||||||
This is what Unix does.
|
to be given in any order, even with programs that were not written
|
||||||
This mode of operation is selected by either setting the environment
|
to expect this.
|
||||||
variable POSIXLY_CORRECT, or using '+' as the first character
|
|
||||||
of the list of option characters, or by calling getopt.
|
|
||||||
|
|
||||||
PERMUTE is the default. We permute the contents of ARGV as we
|
|
||||||
scan, so that eventually all the non-options are at the end.
|
|
||||||
This allows options to be given in any order, even with programs
|
|
||||||
that were not written to expect this.
|
|
||||||
|
|
||||||
RETURN_IN_ORDER is an option available to programs that were
|
RETURN_IN_ORDER is an option available to programs that were
|
||||||
written to expect options and other ARGV-elements in any order
|
written to expect options and other ARGV-elements in any order
|
||||||
and that care about the ordering of the two. We describe each
|
and that care about the ordering of the two. We describe each
|
||||||
non-option ARGV-element as if it were the argument of an option
|
non-option ARGV-element as if it were the argument of an option
|
||||||
with character code 1. Using '-' as the first character of the
|
with character code 1.
|
||||||
list of option characters selects this mode of operation.
|
|
||||||
|
|
||||||
The special argument '--' forces an end of option-scanning regardless
|
The special argument '--' forces an end of option-scanning regardless
|
||||||
of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
|
of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
|
||||||
|
|
@ -91,11 +84,6 @@ struct _getopt_data
|
||||||
/* See __ord above. */
|
/* See __ord above. */
|
||||||
enum __ord __ordering;
|
enum __ord __ordering;
|
||||||
|
|
||||||
/* If the POSIXLY_CORRECT environment variable is set
|
|
||||||
or getopt was called. */
|
|
||||||
int __posixly_correct;
|
|
||||||
|
|
||||||
|
|
||||||
/* Handle permutation of arguments. */
|
/* Handle permutation of arguments. */
|
||||||
|
|
||||||
/* Describe the part of ARGV that contains non-options that have
|
/* Describe the part of ARGV that contains non-options that have
|
||||||
|
|
@ -104,32 +92,27 @@ struct _getopt_data
|
||||||
|
|
||||||
int __first_nonopt;
|
int __first_nonopt;
|
||||||
int __last_nonopt;
|
int __last_nonopt;
|
||||||
|
|
||||||
#if defined _LIBC && defined USE_NONOPTION_FLAGS
|
|
||||||
int __nonoption_flags_max_len;
|
|
||||||
int __nonoption_flags_len;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The initializer is necessary to set OPTIND and OPTERR to their
|
/* The initializer is necessary to set OPTIND and OPTERR to their
|
||||||
default values and to clear the initialization flag. */
|
default values and to clear the initialization flag. */
|
||||||
#define _GETOPT_DATA_INITIALIZER { 1, 1 }
|
#define _GETOPT_DATA_INITIALIZER { 1, 1 }
|
||||||
|
|
||||||
extern int _getopt_internal_r (int ___argc, char **___argv,
|
extern int _getopt_internal_r (int ___argc, char **___argv,
|
||||||
const char *__shortopts,
|
const char *__shortopts,
|
||||||
const struct option *__longopts, int *__longind,
|
const struct option *__longopts, int *__longind,
|
||||||
int __long_only, struct _getopt_data *__data,
|
int __long_only, struct _getopt_data *__data,
|
||||||
int __posixly_correct);
|
int __posixly_correct);
|
||||||
|
|
||||||
extern int _getopt_long_r (int ___argc, char **___argv,
|
extern int _getopt_long_r (int ___argc, char **___argv,
|
||||||
const char *__shortopts,
|
const char *__shortopts,
|
||||||
const struct option *__longopts, int *__longind,
|
const struct option *__longopts, int *__longind,
|
||||||
struct _getopt_data *__data);
|
struct _getopt_data *__data);
|
||||||
|
|
||||||
extern int _getopt_long_only_r (int ___argc, char **___argv,
|
extern int _getopt_long_only_r (int ___argc, char **___argv,
|
||||||
const char *__shortopts,
|
const char *__shortopts,
|
||||||
const struct option *__longopts,
|
const struct option *__longopts,
|
||||||
int *__longind,
|
int *__longind,
|
||||||
struct _getopt_data *__data);
|
struct _getopt_data *__data);
|
||||||
|
|
||||||
#endif /* getopt_int.h */
|
#endif /* getopt_int.h */
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@
|
||||||
#ifndef _LIBGETTEXT_H
|
#ifndef _LIBGETTEXT_H
|
||||||
#define _LIBGETTEXT_H 1
|
#define _LIBGETTEXT_H 1
|
||||||
|
|
||||||
/* NLS can be disabled through the configure --disable-nls option. */
|
/* NLS can be disabled through the configure --disable-nls option
|
||||||
#if ENABLE_NLS
|
or through "#define ENABLE NLS 0" before including this file. */
|
||||||
|
#if defined ENABLE_NLS && ENABLE_NLS
|
||||||
|
|
||||||
/* Get declarations of GNU message catalog functions. */
|
/* Get declarations of GNU message catalog functions. */
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
|
|
@ -184,7 +185,8 @@ npgettext_aux (const char *domain,
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
|
#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
|
||||||
/* || __STDC_VERSION__ >= 199901L */ )
|
/* || __STDC_VERSION__ == 199901L
|
||||||
|
|| (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ )
|
||||||
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
|
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
|
||||||
#else
|
#else
|
||||||
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
|
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
|
||||||
|
|
|
||||||
|
|
@ -24,93 +24,95 @@
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#if HAVE_SYS_TIMEB_H
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
# include <sys/timeb.h>
|
# define WINDOWS_NATIVE
|
||||||
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
|
#include "localtime-buffer.h"
|
||||||
|
|
||||||
/* Work around the bug in some systems whereby gettimeofday clobbers
|
#ifdef WINDOWS_NATIVE
|
||||||
the static buffer that localtime uses for its return value. The
|
|
||||||
gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
|
|
||||||
this problem. The tzset replacement is necessary for at least
|
|
||||||
Solaris 2.5, 2.5.1, and 2.6. */
|
|
||||||
|
|
||||||
static struct tm tm_zero_buffer;
|
/* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */
|
||||||
static struct tm *localtime_buffer_addr = &tm_zero_buffer;
|
typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime);
|
||||||
|
static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL;
|
||||||
|
static BOOL initialized = FALSE;
|
||||||
|
|
||||||
# undef localtime
|
static void
|
||||||
extern struct tm *localtime (time_t const *);
|
initialize (void)
|
||||||
|
|
||||||
# undef gmtime
|
|
||||||
extern struct tm *gmtime (time_t const *);
|
|
||||||
|
|
||||||
/* This is a wrapper for localtime. It is used only on systems for which
|
|
||||||
gettimeofday clobbers the static buffer used for localtime's result.
|
|
||||||
|
|
||||||
On the first call, record the address of the static buffer that
|
|
||||||
localtime uses for its result. */
|
|
||||||
|
|
||||||
struct tm *
|
|
||||||
rpl_localtime (time_t const *timep)
|
|
||||||
{
|
{
|
||||||
struct tm *tm = localtime (timep);
|
HMODULE kernel32 = LoadLibrary ("kernel32.dll");
|
||||||
|
if (kernel32 != NULL)
|
||||||
if (localtime_buffer_addr == &tm_zero_buffer)
|
{
|
||||||
localtime_buffer_addr = tm;
|
GetSystemTimePreciseAsFileTimeFunc =
|
||||||
|
(GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime");
|
||||||
return tm;
|
}
|
||||||
|
initialized = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as above, since gmtime and localtime use the same buffer. */
|
|
||||||
struct tm *
|
|
||||||
rpl_gmtime (time_t const *timep)
|
|
||||||
{
|
|
||||||
struct tm *tm = gmtime (timep);
|
|
||||||
|
|
||||||
if (localtime_buffer_addr == &tm_zero_buffer)
|
|
||||||
localtime_buffer_addr = tm;
|
|
||||||
|
|
||||||
return tm;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */
|
|
||||||
|
|
||||||
#if TZSET_CLOBBERS_LOCALTIME
|
|
||||||
|
|
||||||
# undef tzset
|
|
||||||
extern void tzset (void);
|
|
||||||
|
|
||||||
/* This is a wrapper for tzset, for systems on which tzset may clobber
|
|
||||||
the static buffer used for localtime's result. */
|
|
||||||
void
|
|
||||||
rpl_tzset (void)
|
|
||||||
{
|
|
||||||
/* Save and restore the contents of the buffer used for localtime's
|
|
||||||
result around the call to tzset. */
|
|
||||||
struct tm save = *localtime_buffer_addr;
|
|
||||||
tzset ();
|
|
||||||
*localtime_buffer_addr = save;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is a wrapper for gettimeofday. It is used only on systems
|
/* This is a wrapper for gettimeofday. It is used only on systems
|
||||||
that lack this function, or whose implementation of this function
|
that lack this function, or whose implementation of this function
|
||||||
causes problems. */
|
causes problems.
|
||||||
|
Work around the bug in some systems whereby gettimeofday clobbers
|
||||||
|
the static buffer that localtime uses for its return value. The
|
||||||
|
gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
|
||||||
|
this problem. */
|
||||||
|
|
||||||
int
|
int
|
||||||
gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
||||||
{
|
{
|
||||||
#undef gettimeofday
|
#undef gettimeofday
|
||||||
#if HAVE_GETTIMEOFDAY
|
#ifdef WINDOWS_NATIVE
|
||||||
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
|
||||||
|
/* On native Windows, there are two ways to get the current time:
|
||||||
|
GetSystemTimeAsFileTime
|
||||||
|
<https://msdn.microsoft.com/en-us/library/ms724397.aspx>
|
||||||
|
or
|
||||||
|
GetSystemTimePreciseAsFileTime
|
||||||
|
<https://msdn.microsoft.com/en-us/library/hh706895.aspx>.
|
||||||
|
GetSystemTimeAsFileTime produces values that jump by increments of
|
||||||
|
15.627 milliseconds (!) on average.
|
||||||
|
Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2
|
||||||
|
microseconds.
|
||||||
|
More discussion on this topic:
|
||||||
|
<http://www.windowstimestamp.com/description>. */
|
||||||
|
FILETIME current_time;
|
||||||
|
|
||||||
|
if (!initialized)
|
||||||
|
initialize ();
|
||||||
|
if (GetSystemTimePreciseAsFileTimeFunc != NULL)
|
||||||
|
GetSystemTimePreciseAsFileTimeFunc (¤t_time);
|
||||||
|
else
|
||||||
|
GetSystemTimeAsFileTime (¤t_time);
|
||||||
|
|
||||||
|
/* Convert from FILETIME to 'struct timeval'. */
|
||||||
|
/* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */
|
||||||
|
ULONGLONG since_1601 =
|
||||||
|
((ULONGLONG) current_time.dwHighDateTime << 32)
|
||||||
|
| (ULONGLONG) current_time.dwLowDateTime;
|
||||||
|
/* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap
|
||||||
|
years, in total 134774 days. */
|
||||||
|
ULONGLONG since_1970 =
|
||||||
|
since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000;
|
||||||
|
ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10;
|
||||||
|
tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000;
|
||||||
|
tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# if HAVE_GETTIMEOFDAY
|
||||||
|
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
||||||
/* Save and restore the contents of the buffer used for localtime's
|
/* Save and restore the contents of the buffer used for localtime's
|
||||||
result around the call to gettimeofday. */
|
result around the call to gettimeofday. */
|
||||||
struct tm save = *localtime_buffer_addr;
|
struct tm save = *localtime_buffer_addr;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if defined timeval /* 'struct timeval' overridden by gnulib? */
|
# if defined timeval /* 'struct timeval' overridden by gnulib? */
|
||||||
# undef timeval
|
# undef timeval
|
||||||
struct timeval otv;
|
struct timeval otv;
|
||||||
int result = gettimeofday (&otv, (struct timezone *) tz);
|
int result = gettimeofday (&otv, (struct timezone *) tz);
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
|
|
@ -118,25 +120,16 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
||||||
tv->tv_sec = otv.tv_sec;
|
tv->tv_sec = otv.tv_sec;
|
||||||
tv->tv_usec = otv.tv_usec;
|
tv->tv_usec = otv.tv_usec;
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
int result = gettimeofday (tv, (struct timezone *) tz);
|
int result = gettimeofday (tv, (struct timezone *) tz);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
||||||
*localtime_buffer_addr = save;
|
*localtime_buffer_addr = save;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
# if HAVE__FTIME
|
|
||||||
|
|
||||||
struct _timeb timebuf;
|
|
||||||
_ftime (&timebuf);
|
|
||||||
tv->tv_sec = timebuf.time;
|
|
||||||
tv->tv_usec = timebuf.millitm * 1000;
|
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
||||||
# if !defined OK_TO_USE_1S_CLOCK
|
# if !defined OK_TO_USE_1S_CLOCK
|
||||||
|
|
@ -146,9 +139,8 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
||||||
tv->tv_sec = time (NULL);
|
tv->tv_sec = time (NULL);
|
||||||
tv->tv_usec = 0;
|
tv->tv_usec = 0;
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
#define _GL_INTPROPS_H
|
#define _GL_INTPROPS_H
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <verify.h>
|
|
||||||
|
|
||||||
/* Return a value with the common real type of E and V and the value of V. */
|
/* Return a value with the common real type of E and V and the value of V. */
|
||||||
#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
|
#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
|
||||||
|
|
@ -80,24 +79,7 @@
|
||||||
/* This include file assumes that signed types are two's complement without
|
/* This include file assumes that signed types are two's complement without
|
||||||
padding bits; the above macros have undefined behavior otherwise.
|
padding bits; the above macros have undefined behavior otherwise.
|
||||||
If this is a problem for you, please let us know how to fix it for your host.
|
If this is a problem for you, please let us know how to fix it for your host.
|
||||||
As a sanity check, test the assumption for some signed types that
|
This assumption is tested by the intprops-tests module. */
|
||||||
<limits.h> bounds. */
|
|
||||||
verify (TYPE_MINIMUM (signed char) == SCHAR_MIN);
|
|
||||||
verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX);
|
|
||||||
verify (TYPE_MINIMUM (short int) == SHRT_MIN);
|
|
||||||
verify (TYPE_MAXIMUM (short int) == SHRT_MAX);
|
|
||||||
verify (TYPE_MINIMUM (int) == INT_MIN);
|
|
||||||
verify (TYPE_MAXIMUM (int) == INT_MAX);
|
|
||||||
verify (TYPE_MINIMUM (long int) == LONG_MIN);
|
|
||||||
verify (TYPE_MAXIMUM (long int) == LONG_MAX);
|
|
||||||
#ifdef LLONG_MAX
|
|
||||||
verify (TYPE_MINIMUM (long long int) == LLONG_MIN);
|
|
||||||
verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
|
|
||||||
#endif
|
|
||||||
/* Similarly, sanity-check one ISO/IEC TS 18661-1:2014 macro if defined. */
|
|
||||||
#ifdef UINT_WIDTH
|
|
||||||
verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Does the __typeof__ keyword work? This could be done by
|
/* Does the __typeof__ keyword work? This could be done by
|
||||||
'configure', but for now it's easier to do it by hand. */
|
'configure', but for now it's easier to do it by hand. */
|
||||||
|
|
@ -237,7 +219,11 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
||||||
: (max) >> (b) < (a))
|
: (max) >> (b) < (a))
|
||||||
|
|
||||||
/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */
|
/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */
|
||||||
#define _GL_HAS_BUILTIN_OVERFLOW (5 <= __GNUC__)
|
#if 5 <= __GNUC__ && !defined __ICC
|
||||||
|
# define _GL_HAS_BUILTIN_OVERFLOW 1
|
||||||
|
#else
|
||||||
|
# define _GL_HAS_BUILTIN_OVERFLOW 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* True if __builtin_add_overflow_p (A, B, C) works. */
|
/* True if __builtin_add_overflow_p (A, B, C) works. */
|
||||||
#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
|
#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
|
||||||
|
|
@ -389,10 +375,10 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
||||||
(_Generic \
|
(_Generic \
|
||||||
(*(r), \
|
(*(r), \
|
||||||
signed char: \
|
signed char: \
|
||||||
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
|
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
signed char, SCHAR_MIN, SCHAR_MAX), \
|
signed char, SCHAR_MIN, SCHAR_MAX), \
|
||||||
short int: \
|
short int: \
|
||||||
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
|
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
short int, SHRT_MIN, SHRT_MAX), \
|
short int, SHRT_MIN, SHRT_MAX), \
|
||||||
int: \
|
int: \
|
||||||
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
|
|
@ -406,10 +392,10 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
||||||
#else
|
#else
|
||||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
|
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
|
||||||
(sizeof *(r) == sizeof (signed char) \
|
(sizeof *(r) == sizeof (signed char) \
|
||||||
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \
|
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
signed char, SCHAR_MIN, SCHAR_MAX) \
|
signed char, SCHAR_MIN, SCHAR_MAX) \
|
||||||
: sizeof *(r) == sizeof (short int) \
|
: sizeof *(r) == sizeof (short int) \
|
||||||
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \
|
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
short int, SHRT_MIN, SHRT_MAX) \
|
short int, SHRT_MIN, SHRT_MAX) \
|
||||||
: sizeof *(r) == sizeof (int) \
|
: sizeof *(r) == sizeof (int) \
|
||||||
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||||
|
|
@ -431,9 +417,8 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
||||||
|
|
||||||
/* Store the low-order bits of A <op> B into *R, where the operation
|
/* Store the low-order bits of A <op> B into *R, where the operation
|
||||||
is given by OP. Use the unsigned type UT for calculation to avoid
|
is given by OP. Use the unsigned type UT for calculation to avoid
|
||||||
overflow problems. *R's type is T, with extremal values TMIN and
|
overflow problems. *R's type is T, with extrema TMIN and TMAX.
|
||||||
TMAX. T must be a signed integer type. Return 1 if the result
|
T must be a signed integer type. Return 1 if the result overflows. */
|
||||||
overflows. */
|
|
||||||
#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
|
#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
|
||||||
(sizeof ((a) op (b)) < sizeof (t) \
|
(sizeof ((a) op (b)) < sizeof (t) \
|
||||||
? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \
|
? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \
|
||||||
|
|
@ -442,17 +427,27 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
||||||
((overflow (a, b) \
|
((overflow (a, b) \
|
||||||
|| (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \
|
|| (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \
|
||||||
|| (tmax) < ((a) op (b))) \
|
|| (tmax) < ((a) op (b))) \
|
||||||
? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \
|
? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \
|
||||||
: (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0))
|
: (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0))
|
||||||
|
|
||||||
/* Return A <op> B, where the operation is given by OP. Use the
|
/* Return the low-order bits of A <op> B, where the operation is given
|
||||||
unsigned type UT for calculation to avoid overflow problems.
|
by OP. Use the unsigned type UT for calculation to avoid undefined
|
||||||
Convert the result to type T without overflow by subtracting TMIN
|
behavior on signed integer overflow, and convert the result to type T.
|
||||||
from large values before converting, and adding it afterwards.
|
UT is at least as wide as T and is no narrower than unsigned int,
|
||||||
Compilers can optimize all the operations except OP. */
|
T is two's complement, and there is no padding or trap representations.
|
||||||
#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \
|
Assume that converting UT to T yields the low-order bits, as is
|
||||||
(((ut) (a) op (ut) (b)) <= (tmax) \
|
done in all known two's-complement C compilers. E.g., see:
|
||||||
? (t) ((ut) (a) op (ut) (b)) \
|
https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
|
||||||
: ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin)))
|
|
||||||
|
According to the C standard, converting UT to T yields an
|
||||||
|
implementation-defined result or signal for values outside T's
|
||||||
|
range. However, code that works around this theoretical problem
|
||||||
|
runs afoul of a compiler bug in Oracle Studio 12.3 x86. See:
|
||||||
|
http://lists.gnu.org/archive/html/bug-gnulib/2017-04/msg00049.html
|
||||||
|
As the compiler bug is real, don't try to work around the
|
||||||
|
theoretical problem. */
|
||||||
|
|
||||||
|
#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \
|
||||||
|
((t) ((ut) (a) op (ut) (b)))
|
||||||
|
|
||||||
#endif /* _GL_INTPROPS_H */
|
#endif /* _GL_INTPROPS_H */
|
||||||
|
|
|
||||||
10
lib/isatty.c
10
lib/isatty.c
|
|
@ -27,10 +27,16 @@
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "msvc-inval.h"
|
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
|
||||||
|
# include "msvc-inval.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Get _get_osfhandle(). */
|
/* Get _get_osfhandle(). */
|
||||||
#include "msvc-nothrow.h"
|
#if GNULIB_MSVC_NOTHROW
|
||||||
|
# include "msvc-nothrow.h"
|
||||||
|
#else
|
||||||
|
# include <io.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static BOOL IsConsoleHandle (HANDLE h)
|
static BOOL IsConsoleHandle (HANDLE h)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,17 @@
|
||||||
#ifndef _@GUARD_PREFIX@_LIMITS_H
|
#ifndef _@GUARD_PREFIX@_LIMITS_H
|
||||||
#define _@GUARD_PREFIX@_LIMITS_H
|
#define _@GUARD_PREFIX@_LIMITS_H
|
||||||
|
|
||||||
|
/* For HP-UX 11.31. */
|
||||||
|
#if defined LONG_LONG_MIN && !defined LLONG_MIN
|
||||||
|
# define LLONG_MIN LONG_LONG_MIN
|
||||||
|
#endif
|
||||||
|
#if defined LONG_LONG_MAX && !defined LLONG_MAX
|
||||||
|
# define LLONG_MAX LONG_LONG_MAX
|
||||||
|
#endif
|
||||||
|
#if defined ULONG_LONG_MAX && !defined ULLONG_MAX
|
||||||
|
# define ULLONG_MAX ULONG_LONG_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The number of usable bits in an unsigned or signed integer type
|
/* The number of usable bits in an unsigned or signed integer type
|
||||||
with minimum value MIN and maximum value MAX, as an int expression
|
with minimum value MIN and maximum value MAX, as an int expression
|
||||||
suitable in #if. Cover all known practical hosts. This
|
suitable in #if. Cover all known practical hosts. This
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
|
# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined _WIN32 || defined __WIN32__
|
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||||
# define WINDOWS_NATIVE
|
# define WINDOWS_NATIVE
|
||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -75,6 +75,7 @@
|
||||||
# include "relocatable.h"
|
# include "relocatable.h"
|
||||||
#else
|
#else
|
||||||
# define relocate(pathname) (pathname)
|
# define relocate(pathname) (pathname)
|
||||||
|
# define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get LIBDIR. */
|
/* Get LIBDIR. */
|
||||||
|
|
@ -129,6 +130,7 @@ get_charset_aliases (void)
|
||||||
if (cp == NULL)
|
if (cp == NULL)
|
||||||
{
|
{
|
||||||
#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
|
#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
|
||||||
|
char *malloc_dir = NULL;
|
||||||
const char *dir;
|
const char *dir;
|
||||||
const char *base = "charset.alias";
|
const char *base = "charset.alias";
|
||||||
char *file_name;
|
char *file_name;
|
||||||
|
|
@ -137,7 +139,7 @@ get_charset_aliases (void)
|
||||||
necessary for running the testsuite before "make install". */
|
necessary for running the testsuite before "make install". */
|
||||||
dir = getenv ("CHARSETALIASDIR");
|
dir = getenv ("CHARSETALIASDIR");
|
||||||
if (dir == NULL || dir[0] == '\0')
|
if (dir == NULL || dir[0] == '\0')
|
||||||
dir = relocate (LIBDIR);
|
dir = relocate2 (LIBDIR, &malloc_dir);
|
||||||
|
|
||||||
/* Concatenate dir and base into freshly allocated file_name. */
|
/* Concatenate dir and base into freshly allocated file_name. */
|
||||||
{
|
{
|
||||||
|
|
@ -154,6 +156,8 @@ get_charset_aliases (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free (malloc_dir);
|
||||||
|
|
||||||
if (file_name == NULL)
|
if (file_name == NULL)
|
||||||
/* Out of memory. Treat the file as empty. */
|
/* Out of memory. Treat the file as empty. */
|
||||||
cp = "";
|
cp = "";
|
||||||
|
|
|
||||||
58
lib/localtime-buffer.c
Normal file
58
lib/localtime-buffer.c
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* Provide access to the last buffer returned by localtime() or gmtime().
|
||||||
|
|
||||||
|
Copyright (C) 2001-2003, 2005-2007, 2009-2017 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, 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 */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "localtime-buffer.h"
|
||||||
|
|
||||||
|
#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
|
||||||
|
|
||||||
|
static struct tm tm_zero_buffer;
|
||||||
|
struct tm *localtime_buffer_addr = &tm_zero_buffer;
|
||||||
|
|
||||||
|
/* This is a wrapper for localtime.
|
||||||
|
|
||||||
|
On the first call, record the address of the static buffer that
|
||||||
|
localtime uses for its result. */
|
||||||
|
|
||||||
|
struct tm *
|
||||||
|
rpl_localtime (time_t const *timep)
|
||||||
|
{
|
||||||
|
struct tm *tm = localtime (timep);
|
||||||
|
|
||||||
|
if (localtime_buffer_addr == &tm_zero_buffer)
|
||||||
|
localtime_buffer_addr = tm;
|
||||||
|
|
||||||
|
return tm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Same as above, since gmtime and localtime use the same buffer. */
|
||||||
|
struct tm *
|
||||||
|
rpl_gmtime (time_t const *timep)
|
||||||
|
{
|
||||||
|
struct tm *tm = gmtime (timep);
|
||||||
|
|
||||||
|
if (localtime_buffer_addr == &tm_zero_buffer)
|
||||||
|
localtime_buffer_addr = tm;
|
||||||
|
|
||||||
|
return tm;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
27
lib/localtime-buffer.h
Normal file
27
lib/localtime-buffer.h
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* Provide access to the last buffer returned by localtime() or gmtime().
|
||||||
|
|
||||||
|
Copyright (C) 2001-2003, 2005-2007, 2009-2017 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, 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 */
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
|
||||||
|
|
||||||
|
/* The address of the last buffer returned by localtime() or gmtime(). */
|
||||||
|
extern struct tm *localtime_buffer_addr;
|
||||||
|
|
||||||
|
#endif
|
||||||
159
lib/malloca.c
Normal file
159
lib/malloca.c
Normal file
|
|
@ -0,0 +1,159 @@
|
||||||
|
/* Safe automatic memory allocation.
|
||||||
|
Copyright (C) 2003, 2006-2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
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, 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/>. */
|
||||||
|
|
||||||
|
#define _GL_USE_STDLIB_ALLOC 1
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "malloca.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "verify.h"
|
||||||
|
|
||||||
|
/* Silence a warning from clang's MemorySanitizer. */
|
||||||
|
#if defined __has_feature
|
||||||
|
# if __has_feature(memory_sanitizer)
|
||||||
|
# define NO_SANITIZE_MEMORY __attribute__((no_sanitize("memory")))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef NO_SANITIZE_MEMORY
|
||||||
|
# define NO_SANITIZE_MEMORY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The speed critical point in this file is freea() applied to an alloca()
|
||||||
|
result: it must be fast, to match the speed of alloca(). The speed of
|
||||||
|
mmalloca() and freea() in the other case are not critical, because they
|
||||||
|
are only invoked for big memory sizes. */
|
||||||
|
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
|
||||||
|
/* Store the mmalloca() results in a hash table. This is needed to reliably
|
||||||
|
distinguish a mmalloca() result and an alloca() result.
|
||||||
|
|
||||||
|
Although it is possible that the same pointer is returned by alloca() and
|
||||||
|
by mmalloca() at different times in the same application, it does not lead
|
||||||
|
to a bug in freea(), because:
|
||||||
|
- Before a pointer returned by alloca() can point into malloc()ed memory,
|
||||||
|
the function must return, and once this has happened the programmer must
|
||||||
|
not call freea() on it anyway.
|
||||||
|
- Before a pointer returned by mmalloca() can point into the stack, it
|
||||||
|
must be freed. The only function that can free it is freea(), and
|
||||||
|
when freea() frees it, it also removes it from the hash table. */
|
||||||
|
|
||||||
|
#define MAGIC_NUMBER 0x1415fb4a
|
||||||
|
#define MAGIC_SIZE sizeof (int)
|
||||||
|
/* This is how the header info would look like without any alignment
|
||||||
|
considerations. */
|
||||||
|
struct preliminary_header { void *next; int magic; };
|
||||||
|
/* But the header's size must be a multiple of sa_alignment_max. */
|
||||||
|
#define HEADER_SIZE \
|
||||||
|
(((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max)
|
||||||
|
union header {
|
||||||
|
void *next;
|
||||||
|
struct {
|
||||||
|
char room[HEADER_SIZE - MAGIC_SIZE];
|
||||||
|
int word;
|
||||||
|
} magic;
|
||||||
|
};
|
||||||
|
verify (HEADER_SIZE == sizeof (union header));
|
||||||
|
/* We make the hash table quite big, so that during lookups the probability
|
||||||
|
of empty hash buckets is quite high. There is no need to make the hash
|
||||||
|
table resizable, because when the hash table gets filled so much that the
|
||||||
|
lookup becomes slow, it means that the application has memory leaks. */
|
||||||
|
#define HASH_TABLE_SIZE 257
|
||||||
|
static void * mmalloca_results[HASH_TABLE_SIZE];
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void *
|
||||||
|
mmalloca (size_t n)
|
||||||
|
{
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
/* Allocate one more word, that serves as an indicator for malloc()ed
|
||||||
|
memory, so that freea() of an alloca() result is fast. */
|
||||||
|
size_t nplus = n + HEADER_SIZE;
|
||||||
|
|
||||||
|
if (nplus >= n)
|
||||||
|
{
|
||||||
|
void *p = malloc (nplus);
|
||||||
|
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
size_t slot;
|
||||||
|
union header *h = p;
|
||||||
|
|
||||||
|
p = h + 1;
|
||||||
|
|
||||||
|
/* Put a magic number into the indicator word. */
|
||||||
|
h->magic.word = MAGIC_NUMBER;
|
||||||
|
|
||||||
|
/* Enter p into the hash table. */
|
||||||
|
slot = (uintptr_t) p % HASH_TABLE_SIZE;
|
||||||
|
h->next = mmalloca_results[slot];
|
||||||
|
mmalloca_results[slot] = p;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Out of memory. */
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
# if !MALLOC_0_IS_NONNULL
|
||||||
|
if (n == 0)
|
||||||
|
n = 1;
|
||||||
|
# endif
|
||||||
|
return malloc (n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
void NO_SANITIZE_MEMORY
|
||||||
|
freea (void *p)
|
||||||
|
{
|
||||||
|
/* mmalloca() may have returned NULL. */
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
/* Attempt to quickly distinguish the mmalloca() result - which has
|
||||||
|
a magic indicator word - and the alloca() result - which has an
|
||||||
|
uninitialized indicator word. It is for this test that sa_increment
|
||||||
|
additional bytes are allocated in the alloca() case. */
|
||||||
|
if (((int *) p)[-1] == MAGIC_NUMBER)
|
||||||
|
{
|
||||||
|
/* Looks like a mmalloca() result. To see whether it really is one,
|
||||||
|
perform a lookup in the hash table. */
|
||||||
|
size_t slot = (uintptr_t) p % HASH_TABLE_SIZE;
|
||||||
|
void **chain = &mmalloca_results[slot];
|
||||||
|
for (; *chain != NULL;)
|
||||||
|
{
|
||||||
|
union header *h = p;
|
||||||
|
if (*chain == p)
|
||||||
|
{
|
||||||
|
/* Found it. Remove it from the hash table and free it. */
|
||||||
|
union header *p_begin = h - 1;
|
||||||
|
*chain = p_begin->next;
|
||||||
|
free (p_begin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
h = *chain;
|
||||||
|
chain = &h[-1].next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* At this point, we know it was not a mmalloca() result. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
128
lib/malloca.h
Normal file
128
lib/malloca.h
Normal file
|
|
@ -0,0 +1,128 @@
|
||||||
|
/* Safe automatic memory allocation.
|
||||||
|
Copyright (C) 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
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, 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/>. */
|
||||||
|
|
||||||
|
#ifndef _MALLOCA_H
|
||||||
|
#define _MALLOCA_H
|
||||||
|
|
||||||
|
#include <alloca.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "xalloc-oversized.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
|
||||||
|
alloca(N); otherwise it returns NULL. It either returns N bytes of
|
||||||
|
memory allocated on the stack, that lasts until the function returns,
|
||||||
|
or NULL.
|
||||||
|
Use of safe_alloca should be avoided:
|
||||||
|
- inside arguments of function calls - undefined behaviour,
|
||||||
|
- in inline functions - the allocation may actually last until the
|
||||||
|
calling function returns.
|
||||||
|
*/
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
/* The OS usually guarantees only one guard page at the bottom of the stack,
|
||||||
|
and a page size can be as small as 4096 bytes. So we cannot safely
|
||||||
|
allocate anything larger than 4096 bytes. Also care for the possibility
|
||||||
|
of a few compiler-allocated temporary stack slots.
|
||||||
|
This must be a macro, not a function. */
|
||||||
|
# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
|
||||||
|
#else
|
||||||
|
# define safe_alloca(N) ((void) (N), NULL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of
|
||||||
|
memory allocated on the stack, that must be freed using freea() before
|
||||||
|
the function returns. Upon failure, it returns NULL. */
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
# define malloca(N) \
|
||||||
|
((N) < 4032 - sa_increment \
|
||||||
|
? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \
|
||||||
|
: mmalloca (N))
|
||||||
|
#else
|
||||||
|
# define malloca(N) \
|
||||||
|
mmalloca (N)
|
||||||
|
#endif
|
||||||
|
extern void * mmalloca (size_t n);
|
||||||
|
|
||||||
|
/* Free a block of memory allocated through malloca(). */
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
extern void freea (void *p);
|
||||||
|
#else
|
||||||
|
# define freea free
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
|
||||||
|
It allocates an array of N objects, each with S bytes of memory,
|
||||||
|
on the stack. S must be positive and N must be nonnegative.
|
||||||
|
The array must be freed using freea() before the function returns. */
|
||||||
|
#define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s)))
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------- Auxiliary, non-public definitions ------------------- */
|
||||||
|
|
||||||
|
/* Determine the alignment of a type at compile time. */
|
||||||
|
#if defined __GNUC__ || defined __IBM__ALIGNOF__
|
||||||
|
# define sa_alignof __alignof__
|
||||||
|
#elif defined __cplusplus
|
||||||
|
template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
|
||||||
|
# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
|
||||||
|
#elif defined __hpux
|
||||||
|
/* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
|
||||||
|
values. */
|
||||||
|
# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
|
||||||
|
#elif defined _AIX
|
||||||
|
/* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
|
||||||
|
values. */
|
||||||
|
# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
|
||||||
|
#else
|
||||||
|
# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
/* The desired alignment of memory allocations is the maximum alignment
|
||||||
|
among all elementary types. */
|
||||||
|
sa_alignment_long = sa_alignof (long),
|
||||||
|
sa_alignment_double = sa_alignof (double),
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
sa_alignment_longlong = sa_alignof (long long),
|
||||||
|
#endif
|
||||||
|
sa_alignment_longdouble = sa_alignof (long double),
|
||||||
|
sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
| (sa_alignment_longlong - 1)
|
||||||
|
#endif
|
||||||
|
| (sa_alignment_longdouble - 1)
|
||||||
|
) + 1,
|
||||||
|
/* The increment that guarantees room for a magic word must be >= sizeof (int)
|
||||||
|
and a multiple of sa_alignment_max. */
|
||||||
|
sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _MALLOCA_H */
|
||||||
7
lib/malloca.valgrind
Normal file
7
lib/malloca.valgrind
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Suppress a valgrind message about use of uninitialized memory in freea().
|
||||||
|
# This use is OK because it provides only a speedup.
|
||||||
|
{
|
||||||
|
freea
|
||||||
|
Memcheck:Cond
|
||||||
|
fun:freea
|
||||||
|
}
|
||||||
|
|
@ -35,6 +35,13 @@
|
||||||
# include "streq.h"
|
# include "streq.h"
|
||||||
# include "verify.h"
|
# include "verify.h"
|
||||||
|
|
||||||
|
#ifndef FALLTHROUGH
|
||||||
|
# if __GNUC__ < 7
|
||||||
|
# define FALLTHROUGH ((void) 0)
|
||||||
|
# else
|
||||||
|
# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
verify (sizeof (mbstate_t) >= 4);
|
verify (sizeof (mbstate_t) >= 4);
|
||||||
|
|
||||||
|
|
@ -74,10 +81,10 @@ mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
buf[2] = pstate[3];
|
buf[2] = pstate[3];
|
||||||
/*FALLTHROUGH*/
|
FALLTHROUGH;
|
||||||
case 2:
|
case 2:
|
||||||
buf[1] = pstate[2];
|
buf[1] = pstate[2];
|
||||||
/*FALLTHROUGH*/
|
FALLTHROUGH;
|
||||||
case 1:
|
case 1:
|
||||||
buf[0] = pstate[1];
|
buf[0] = pstate[1];
|
||||||
p = buf;
|
p = buf;
|
||||||
|
|
|
||||||
|
|
@ -22,17 +22,7 @@
|
||||||
|
|
||||||
#include "verify.h"
|
#include "verify.h"
|
||||||
|
|
||||||
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
#if GNULIB_defined_mbstate_t
|
||||||
|
|
||||||
/* On native Windows, 'mbstate_t' is defined as 'int'. */
|
|
||||||
|
|
||||||
int
|
|
||||||
mbsinit (const mbstate_t *ps)
|
|
||||||
{
|
|
||||||
return ps == NULL || *ps == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
|
/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
|
||||||
and wcrtomb(), wcsrtombs().
|
and wcrtomb(), wcsrtombs().
|
||||||
|
|
@ -45,6 +35,7 @@ mbsinit (const mbstate_t *ps)
|
||||||
We define the meaning of mbstate_t as follows:
|
We define the meaning of mbstate_t as follows:
|
||||||
- In mb -> wc direction, mbstate_t's first byte contains the number of
|
- In mb -> wc direction, mbstate_t's first byte contains the number of
|
||||||
buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
|
buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
|
||||||
|
See mbrtowc.c.
|
||||||
- In wc -> mb direction, mbstate_t contains no information. In other
|
- In wc -> mb direction, mbstate_t contains no information. In other
|
||||||
words, it is always in the initial state. */
|
words, it is always in the initial state. */
|
||||||
|
|
||||||
|
|
@ -58,4 +49,25 @@ mbsinit (const mbstate_t *ps)
|
||||||
return pstate == NULL || pstate[0] == 0;
|
return pstate == NULL || pstate[0] == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
int
|
||||||
|
mbsinit (const mbstate_t *ps)
|
||||||
|
{
|
||||||
|
# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||||
|
/* Native Windows. */
|
||||||
|
# ifdef __MINGW32__
|
||||||
|
/* On mingw, 'mbstate_t' is defined as 'int'. */
|
||||||
|
return ps == NULL || *ps == 0;
|
||||||
|
# else
|
||||||
|
/* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4-bytes matter. */
|
||||||
|
return ps == NULL || *(const unsigned int *)ps == 0;
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
/* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */
|
||||||
|
/* Maybe this definition works, maybe not... */
|
||||||
|
return ps == NULL || *(const char *)ps == 0;
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,9 @@
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "msvc-inval.h"
|
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
|
||||||
|
# include "msvc-inval.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef _get_osfhandle
|
#undef _get_osfhandle
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,14 @@
|
||||||
|
|
||||||
#define INT_BITS (sizeof (int) * CHAR_BIT)
|
#define INT_BITS (sizeof (int) * CHAR_BIT)
|
||||||
|
|
||||||
|
#ifndef FALLTHROUGH
|
||||||
|
# if __GNUC__ < 7
|
||||||
|
# define FALLTHROUGH ((void) 0)
|
||||||
|
# else
|
||||||
|
# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
struct quoting_options
|
struct quoting_options
|
||||||
{
|
{
|
||||||
/* Basic quoting style. */
|
/* Basic quoting style. */
|
||||||
|
|
@ -310,7 +318,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
case c_maybe_quoting_style:
|
case c_maybe_quoting_style:
|
||||||
quoting_style = c_quoting_style;
|
quoting_style = c_quoting_style;
|
||||||
elide_outer_quotes = true;
|
elide_outer_quotes = true;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case c_quoting_style:
|
case c_quoting_style:
|
||||||
if (!elide_outer_quotes)
|
if (!elide_outer_quotes)
|
||||||
STORE ('"');
|
STORE ('"');
|
||||||
|
|
@ -365,14 +373,14 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
|
|
||||||
case shell_escape_quoting_style:
|
case shell_escape_quoting_style:
|
||||||
backslash_escapes = true;
|
backslash_escapes = true;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case shell_quoting_style:
|
case shell_quoting_style:
|
||||||
elide_outer_quotes = true;
|
elide_outer_quotes = true;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case shell_escape_always_quoting_style:
|
case shell_escape_always_quoting_style:
|
||||||
if (!elide_outer_quotes)
|
if (!elide_outer_quotes)
|
||||||
backslash_escapes = true;
|
backslash_escapes = true;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case shell_always_quoting_style:
|
case shell_always_quoting_style:
|
||||||
quoting_style = shell_always_quoting_style;
|
quoting_style = shell_always_quoting_style;
|
||||||
if (!elide_outer_quotes)
|
if (!elide_outer_quotes)
|
||||||
|
|
@ -505,7 +513,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
if (quoting_style == shell_always_quoting_style
|
if (quoting_style == shell_always_quoting_style
|
||||||
&& elide_outer_quotes)
|
&& elide_outer_quotes)
|
||||||
goto force_outer_quoting_style;
|
goto force_outer_quoting_style;
|
||||||
/* Fall through. */
|
/* fall through */
|
||||||
c_escape:
|
c_escape:
|
||||||
if (backslash_escapes)
|
if (backslash_escapes)
|
||||||
{
|
{
|
||||||
|
|
@ -517,14 +525,14 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
case '{': case '}': /* sometimes special if isolated */
|
case '{': case '}': /* sometimes special if isolated */
|
||||||
if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
|
if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
|
||||||
break;
|
break;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case '#': case '~':
|
case '#': case '~':
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
break;
|
break;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case ' ':
|
case ' ':
|
||||||
c_and_shell_quote_compat = true;
|
c_and_shell_quote_compat = true;
|
||||||
/* Fall through. */
|
FALLTHROUGH;
|
||||||
case '!': /* special in bash */
|
case '!': /* special in bash */
|
||||||
case '"': case '$': case '&':
|
case '"': case '$': case '&':
|
||||||
case '(': case ')': case '*': case ';':
|
case '(': case ')': case '*': case ';':
|
||||||
|
|
|
||||||
421
lib/stat-w32.c
Normal file
421
lib/stat-w32.c
Normal file
|
|
@ -0,0 +1,421 @@
|
||||||
|
/* Core of implementation of fstat and stat for native Windows.
|
||||||
|
Copyright (C) 2017 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 Bruno Haible. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
|
|
||||||
|
/* Ensure that <windows.h> defines FILE_ID_INFO. */
|
||||||
|
#undef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT _WIN32_WINNT_WIN8
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "stat-w32.h"
|
||||||
|
|
||||||
|
#include "pathmax.h"
|
||||||
|
#include "verify.h"
|
||||||
|
|
||||||
|
#if _GL_WINDOWS_STAT_INODES == 2
|
||||||
|
/* GetFileInformationByHandleEx was introduced only in Windows Vista. */
|
||||||
|
typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile,
|
||||||
|
FILE_INFO_BY_HANDLE_CLASS fiClass,
|
||||||
|
LPVOID lpBuffer,
|
||||||
|
DWORD dwBufferSize);
|
||||||
|
static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL;
|
||||||
|
#endif
|
||||||
|
/* GetFinalPathNameByHandle was introduced only in Windows Vista. */
|
||||||
|
typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile,
|
||||||
|
LPTSTR lpFilePath,
|
||||||
|
DWORD lenFilePath,
|
||||||
|
DWORD dwFlags);
|
||||||
|
static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL;
|
||||||
|
static BOOL initialized = FALSE;
|
||||||
|
|
||||||
|
static void
|
||||||
|
initialize (void)
|
||||||
|
{
|
||||||
|
HMODULE kernel32 = LoadLibrary ("kernel32.dll");
|
||||||
|
if (kernel32 != NULL)
|
||||||
|
{
|
||||||
|
#if _GL_WINDOWS_STAT_INODES == 2
|
||||||
|
GetFileInformationByHandleExFunc =
|
||||||
|
(GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx");
|
||||||
|
#endif
|
||||||
|
GetFinalPathNameByHandleFunc =
|
||||||
|
(GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA");
|
||||||
|
}
|
||||||
|
initialized = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */
|
||||||
|
#if _GL_WINDOWS_STAT_TIMESPEC
|
||||||
|
struct timespec
|
||||||
|
_gl_convert_FILETIME_to_timespec (const FILETIME *ft)
|
||||||
|
{
|
||||||
|
struct timespec result;
|
||||||
|
/* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */
|
||||||
|
unsigned long long since_1601 =
|
||||||
|
((unsigned long long) ft->dwHighDateTime << 32)
|
||||||
|
| (unsigned long long) ft->dwLowDateTime;
|
||||||
|
if (since_1601 == 0)
|
||||||
|
{
|
||||||
|
result.tv_sec = 0;
|
||||||
|
result.tv_nsec = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
|
||||||
|
leap years, in total 134774 days. */
|
||||||
|
unsigned long long since_1970 =
|
||||||
|
since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
|
||||||
|
result.tv_sec = since_1970 / (unsigned long long) 10000000;
|
||||||
|
result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
time_t
|
||||||
|
_gl_convert_FILETIME_to_POSIX (const FILETIME *ft)
|
||||||
|
{
|
||||||
|
/* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */
|
||||||
|
unsigned long long since_1601 =
|
||||||
|
((unsigned long long) ft->dwHighDateTime << 32)
|
||||||
|
| (unsigned long long) ft->dwLowDateTime;
|
||||||
|
if (since_1601 == 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
|
||||||
|
leap years, in total 134774 days. */
|
||||||
|
unsigned long long since_1970 =
|
||||||
|
since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
|
||||||
|
return since_1970 / (unsigned long long) 10000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Fill *BUF with information about the file designated by H.
|
||||||
|
PATH is the file name, if known, otherwise NULL.
|
||||||
|
Return 0 if successful, or -1 with errno set upon failure. */
|
||||||
|
int
|
||||||
|
_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf)
|
||||||
|
{
|
||||||
|
/* GetFileType
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364960.aspx> */
|
||||||
|
DWORD type = GetFileType (h);
|
||||||
|
if (type == FILE_TYPE_DISK)
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
initialize ();
|
||||||
|
|
||||||
|
/* st_mode can be determined through
|
||||||
|
GetFileAttributesEx
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364946.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365739.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364952.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363788.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandleEx with argument FileBasicInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364217.aspx>
|
||||||
|
The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
|
||||||
|
BY_HANDLE_FILE_INFORMATION info;
|
||||||
|
if (! GetFileInformationByHandle (h, &info))
|
||||||
|
goto failed;
|
||||||
|
|
||||||
|
/* Test for error conditions before starting to fill *buf. */
|
||||||
|
if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
|
||||||
|
{
|
||||||
|
errno = EOVERFLOW;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if _GL_WINDOWS_STAT_INODES
|
||||||
|
/* st_ino can be determined through
|
||||||
|
GetFileInformationByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364952.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363788.aspx>
|
||||||
|
as 64 bits, or through
|
||||||
|
GetFileInformationByHandleEx with argument FileIdInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/hh802691.aspx>
|
||||||
|
as 128 bits.
|
||||||
|
The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */
|
||||||
|
/* Experiments show that GetFileInformationByHandleEx does not provide
|
||||||
|
much more information than GetFileInformationByHandle:
|
||||||
|
* The dwVolumeSerialNumber from GetFileInformationByHandle is equal
|
||||||
|
to the low 32 bits of the 64-bit VolumeSerialNumber from
|
||||||
|
GetFileInformationByHandleEx, and is apparently sufficient for
|
||||||
|
identifying the device.
|
||||||
|
* The nFileIndex from GetFileInformationByHandle is equal to the low
|
||||||
|
64 bits of the 128-bit FileId from GetFileInformationByHandleEx,
|
||||||
|
and the high 64 bits of this 128-bit FileId are zero.
|
||||||
|
* On a FAT file system, GetFileInformationByHandleEx fails with error
|
||||||
|
ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle
|
||||||
|
succeeds.
|
||||||
|
* On a CIFS/SMB file system, GetFileInformationByHandleEx fails with
|
||||||
|
error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle
|
||||||
|
succeeds. */
|
||||||
|
# if _GL_WINDOWS_STAT_INODES == 2
|
||||||
|
if (GetFileInformationByHandleExFunc != NULL)
|
||||||
|
{
|
||||||
|
FILE_ID_INFO id;
|
||||||
|
if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id)))
|
||||||
|
{
|
||||||
|
buf->st_dev = id.VolumeSerialNumber;
|
||||||
|
verify (sizeof (ino_t) == sizeof (id.FileId));
|
||||||
|
memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t));
|
||||||
|
goto ino_done;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (GetLastError ())
|
||||||
|
{
|
||||||
|
case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */
|
||||||
|
case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */
|
||||||
|
goto fallback;
|
||||||
|
default:
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fallback: ;
|
||||||
|
/* Fallback for older Windows versions. */
|
||||||
|
buf->st_dev = info.dwVolumeSerialNumber;
|
||||||
|
buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
|
||||||
|
buf->st_ino._gl_ino[1] = 0;
|
||||||
|
ino_done: ;
|
||||||
|
# else /* _GL_WINDOWS_STAT_INODES == 1 */
|
||||||
|
buf->st_dev = info.dwVolumeSerialNumber;
|
||||||
|
buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
/* st_ino is not wide enough for identifying a file on a device.
|
||||||
|
Without st_ino, st_dev is pointless. */
|
||||||
|
buf->st_dev = 0;
|
||||||
|
buf->st_ino = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* st_mode. */
|
||||||
|
unsigned int mode =
|
||||||
|
/* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */
|
||||||
|
((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
|
||||||
|
| S_IREAD_UGO
|
||||||
|
| ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
|
||||||
|
if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
/* Determine whether the file is executable by looking at the file
|
||||||
|
name suffix.
|
||||||
|
If the file name is already known, use it. Otherwise, for
|
||||||
|
non-empty files, it can be determined through
|
||||||
|
GetFinalPathNameByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364962.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandleEx with argument FileNameInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364388.aspx>
|
||||||
|
Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
|
||||||
|
if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
|
||||||
|
{
|
||||||
|
char fpath[PATH_MAX];
|
||||||
|
if (path != NULL
|
||||||
|
|| (GetFinalPathNameByHandleFunc != NULL
|
||||||
|
&& GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE)
|
||||||
|
< sizeof (fpath)
|
||||||
|
&& (path = fpath, 1)))
|
||||||
|
{
|
||||||
|
const char *last_dot = NULL;
|
||||||
|
const char *p;
|
||||||
|
for (p = path; *p != '\0'; p++)
|
||||||
|
if (*p == '.')
|
||||||
|
last_dot = p;
|
||||||
|
if (last_dot != NULL)
|
||||||
|
{
|
||||||
|
const char *suffix = last_dot + 1;
|
||||||
|
if (_stricmp (suffix, "exe") == 0
|
||||||
|
|| _stricmp (suffix, "bat") == 0
|
||||||
|
|| _stricmp (suffix, "cmd") == 0
|
||||||
|
|| _stricmp (suffix, "com") == 0)
|
||||||
|
mode |= S_IEXEC_UGO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Cannot determine file name. Pretend that it is executable. */
|
||||||
|
mode |= S_IEXEC_UGO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf->st_mode = mode;
|
||||||
|
|
||||||
|
/* st_nlink can be determined through
|
||||||
|
GetFileInformationByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364952.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363788.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandleEx with argument FileStandardInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364401.aspx>
|
||||||
|
The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
|
||||||
|
buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks);
|
||||||
|
|
||||||
|
/* There's no easy way to map the Windows SID concept to an integer. */
|
||||||
|
buf->st_uid = 0;
|
||||||
|
buf->st_gid = 0;
|
||||||
|
|
||||||
|
/* st_rdev is irrelevant for normal files and directories. */
|
||||||
|
buf->st_rdev = 0;
|
||||||
|
|
||||||
|
/* st_size can be determined through
|
||||||
|
GetFileSizeEx
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364957.aspx>
|
||||||
|
or through
|
||||||
|
GetFileAttributesEx
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364946.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365739.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364952.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363788.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandleEx with argument FileStandardInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364401.aspx>
|
||||||
|
The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
|
||||||
|
if (sizeof (buf->st_size) <= 4)
|
||||||
|
/* Range check already done above. */
|
||||||
|
buf->st_size = info.nFileSizeLow;
|
||||||
|
else
|
||||||
|
buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
|
||||||
|
|
||||||
|
/* st_atime, st_mtime, st_ctime can be determined through
|
||||||
|
GetFileTime
|
||||||
|
<https://msdn.microsoft.com/en-us/library/ms724320.aspx>
|
||||||
|
or through
|
||||||
|
GetFileAttributesEx
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364946.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365739.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandle
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364952.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363788.aspx>
|
||||||
|
or through
|
||||||
|
GetFileInformationByHandleEx with argument FileBasicInfo
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364953.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364217.aspx>
|
||||||
|
The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
|
||||||
|
#if _GL_WINDOWS_STAT_TIMESPEC
|
||||||
|
buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
|
||||||
|
buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
|
||||||
|
buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
|
||||||
|
#else
|
||||||
|
buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
|
||||||
|
buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
|
||||||
|
buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE)
|
||||||
|
{
|
||||||
|
buf->st_dev = 0;
|
||||||
|
#if _GL_WINDOWS_STAT_INODES == 2
|
||||||
|
buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
|
||||||
|
#else
|
||||||
|
buf->st_ino = 0;
|
||||||
|
#endif
|
||||||
|
buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR);
|
||||||
|
buf->st_nlink = 1;
|
||||||
|
buf->st_uid = 0;
|
||||||
|
buf->st_gid = 0;
|
||||||
|
buf->st_rdev = 0;
|
||||||
|
if (type == FILE_TYPE_PIPE)
|
||||||
|
{
|
||||||
|
/* PeekNamedPipe
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365779.aspx> */
|
||||||
|
DWORD bytes_available;
|
||||||
|
if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL))
|
||||||
|
buf->st_size = bytes_available;
|
||||||
|
else
|
||||||
|
buf->st_size = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
buf->st_size = 0;
|
||||||
|
#if _GL_WINDOWS_STAT_TIMESPEC
|
||||||
|
buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0;
|
||||||
|
buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0;
|
||||||
|
buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0;
|
||||||
|
#else
|
||||||
|
buf->st_atime = 0;
|
||||||
|
buf->st_mtime = 0;
|
||||||
|
buf->st_ctime = 0;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = ENOENT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
failed:
|
||||||
|
{
|
||||||
|
DWORD error = GetLastError ();
|
||||||
|
#if 0
|
||||||
|
fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error);
|
||||||
|
#endif
|
||||||
|
switch (error)
|
||||||
|
{
|
||||||
|
case ERROR_ACCESS_DENIED:
|
||||||
|
case ERROR_SHARING_VIOLATION:
|
||||||
|
errno = EACCES;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_OUTOFMEMORY:
|
||||||
|
errno = ENOMEM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_WRITE_FAULT:
|
||||||
|
case ERROR_READ_FAULT:
|
||||||
|
case ERROR_GEN_FAILURE:
|
||||||
|
errno = EIO;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
errno = EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* This declaration is solely to ensure that after preprocessing
|
||||||
|
this file is never empty. */
|
||||||
|
typedef int dummy;
|
||||||
|
|
||||||
|
#endif
|
||||||
37
lib/stat-w32.h
Normal file
37
lib/stat-w32.h
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* Core of implementation of fstat and stat for native Windows.
|
||||||
|
Copyright (C) 2017 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/>. */
|
||||||
|
|
||||||
|
#ifndef _STAT_W32_H
|
||||||
|
#define _STAT_W32_H 1
|
||||||
|
|
||||||
|
/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */
|
||||||
|
#if _GL_WINDOWS_STAT_TIMESPEC
|
||||||
|
extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft);
|
||||||
|
#else
|
||||||
|
extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Fill *BUF with information about the file designated by H.
|
||||||
|
PATH is the file name, if known, otherwise NULL.
|
||||||
|
Return 0 if successful, or -1 with errno set upon failure. */
|
||||||
|
extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf);
|
||||||
|
|
||||||
|
/* Bitmasks for st_mode. */
|
||||||
|
#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6))
|
||||||
|
#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
|
||||||
|
#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6))
|
||||||
|
|
||||||
|
#endif /* _STAT_W32_H */
|
||||||
419
lib/stat.c
419
lib/stat.c
|
|
@ -14,7 +14,7 @@
|
||||||
You should have received a copy of the GNU General Public License
|
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 <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
/* written by Eric Blake */
|
/* Written by Eric Blake and Bruno Haible. */
|
||||||
|
|
||||||
/* If the user's config.h happens to include <sys/stat.h>, let it include only
|
/* 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_stat doesn't recurse to
|
the system's <sys/stat.h> here, so that orig_stat doesn't recurse to
|
||||||
|
|
@ -28,26 +28,19 @@
|
||||||
#undef __need_system_sys_stat_h
|
#undef __need_system_sys_stat_h
|
||||||
|
|
||||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
# if _GL_WINDOWS_64_BIT_ST_SIZE
|
# define WINDOWS_NATIVE
|
||||||
# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
|
|
||||||
# define stat _stati64
|
|
||||||
# define REPLACE_FUNC_STAT_DIR 1
|
|
||||||
# undef REPLACE_FUNC_STAT_FILE
|
|
||||||
# elif REPLACE_FUNC_STAT_FILE
|
|
||||||
/* mingw64 has a broken stat() function, based on _stat(), in libmingwex.a.
|
|
||||||
Bypass it. */
|
|
||||||
# define stat _stat
|
|
||||||
# define REPLACE_FUNC_STAT_DIR 1
|
|
||||||
# undef REPLACE_FUNC_STAT_FILE
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined WINDOWS_NATIVE
|
||||||
|
|
||||||
static int
|
static int
|
||||||
orig_stat (const char *filename, struct stat *buf)
|
orig_stat (const char *filename, struct stat *buf)
|
||||||
{
|
{
|
||||||
return stat (filename, buf);
|
return stat (filename, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Specification. */
|
/* Specification. */
|
||||||
/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
|
/* 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>
|
eliminates this include because of the preliminary #include <sys/stat.h>
|
||||||
|
|
@ -58,16 +51,42 @@ orig_stat (const char *filename, struct stat *buf)
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "dosname.h"
|
#include "filename.h"
|
||||||
|
#include "malloca.h"
|
||||||
#include "verify.h"
|
#include "verify.h"
|
||||||
|
|
||||||
#if REPLACE_FUNC_STAT_DIR
|
#ifdef WINDOWS_NATIVE
|
||||||
# include "pathmax.h"
|
# define WIN32_LEAN_AND_MEAN
|
||||||
/* The only known systems where REPLACE_FUNC_STAT_DIR is needed also
|
# include <windows.h>
|
||||||
have a constant PATH_MAX. */
|
# include "stat-w32.h"
|
||||||
# ifndef PATH_MAX
|
#endif
|
||||||
# error "Please port this replacement to your platform"
|
|
||||||
# endif
|
#ifdef WINDOWS_NATIVE
|
||||||
|
/* Return TRUE if the given file name denotes an UNC root. */
|
||||||
|
static BOOL
|
||||||
|
is_unc_root (const char *rname)
|
||||||
|
{
|
||||||
|
/* Test whether it has the syntax '\\server\share'. */
|
||||||
|
if (ISSLASH (rname[0]) && ISSLASH (rname[1]))
|
||||||
|
{
|
||||||
|
/* It starts with two slashes. Find the next slash. */
|
||||||
|
const char *p = rname + 2;
|
||||||
|
const char *q = p;
|
||||||
|
while (*q != '\0' && !ISSLASH (*q))
|
||||||
|
q++;
|
||||||
|
if (q > p && *q != '\0')
|
||||||
|
{
|
||||||
|
/* Found the next slash at q. */
|
||||||
|
q++;
|
||||||
|
const char *r = q;
|
||||||
|
while (*r != '\0' && !ISSLASH (*r))
|
||||||
|
r++;
|
||||||
|
if (r > q && *r == '\0')
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Store information about NAME into ST. Work around bugs with
|
/* Store information about NAME into ST. Work around bugs with
|
||||||
|
|
@ -77,13 +96,319 @@ orig_stat (const char *filename, struct stat *buf)
|
||||||
correctly. */
|
correctly. */
|
||||||
|
|
||||||
int
|
int
|
||||||
rpl_stat (char const *name, struct stat *st)
|
rpl_stat (char const *name, struct stat *buf)
|
||||||
{
|
{
|
||||||
int result = orig_stat (name, st);
|
#ifdef WINDOWS_NATIVE
|
||||||
#if REPLACE_FUNC_STAT_FILE
|
/* Fill the fields ourselves, because the original stat function returns
|
||||||
|
values for st_atime, st_mtime, st_ctime that depend on the current time
|
||||||
|
zone. See
|
||||||
|
<https://lists.gnu.org/archive/html/bug-gnulib/2017-04/msg00134.html> */
|
||||||
|
/* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work
|
||||||
|
around length limitations
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365247.aspx> ? */
|
||||||
|
|
||||||
|
/* POSIX <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>
|
||||||
|
specifies: "More than two leading <slash> characters shall be treated as
|
||||||
|
a single <slash> character." */
|
||||||
|
if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2]))
|
||||||
|
{
|
||||||
|
name += 2;
|
||||||
|
while (ISSLASH (name[1]))
|
||||||
|
name++;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t len = strlen (name);
|
||||||
|
size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0);
|
||||||
|
|
||||||
|
/* Remove trailing slashes (except the very first one, at position
|
||||||
|
drive_prefix_len), but remember their presence. */
|
||||||
|
size_t rlen;
|
||||||
|
bool check_dir = false;
|
||||||
|
|
||||||
|
rlen = len;
|
||||||
|
while (rlen > drive_prefix_len && ISSLASH (name[rlen-1]))
|
||||||
|
{
|
||||||
|
check_dir = true;
|
||||||
|
if (rlen == drive_prefix_len + 1)
|
||||||
|
break;
|
||||||
|
rlen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle '' and 'C:'. */
|
||||||
|
if (!check_dir && rlen == drive_prefix_len)
|
||||||
|
{
|
||||||
|
errno = ENOENT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle '\\'. */
|
||||||
|
if (rlen == 1 && ISSLASH (name[0]) && len >= 2)
|
||||||
|
{
|
||||||
|
errno = ENOENT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *rname;
|
||||||
|
char *malloca_rname;
|
||||||
|
if (rlen == len)
|
||||||
|
{
|
||||||
|
rname = name;
|
||||||
|
malloca_rname = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
malloca_rname = malloca (rlen + 1);
|
||||||
|
if (malloca_rname == NULL)
|
||||||
|
{
|
||||||
|
errno = ENOMEM;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memcpy (malloca_rname, name, rlen);
|
||||||
|
malloca_rname[rlen] = '\0';
|
||||||
|
rname = malloca_rname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* There are two ways to get at the requested information:
|
||||||
|
- by scanning the parent directory and examining the relevant
|
||||||
|
directory entry,
|
||||||
|
- by opening the file directly.
|
||||||
|
The first approach fails for root directories (e.g. 'C:\') and
|
||||||
|
UNC root directories (e.g. '\\server\share').
|
||||||
|
The second approach fails for some system files (e.g. 'C:\pagefile.sys'
|
||||||
|
and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION.
|
||||||
|
The second approach gives more information (in particular, correct
|
||||||
|
st_dev, st_ino, st_nlink fields).
|
||||||
|
So we use the second approach and, as a fallback except for root and
|
||||||
|
UNC root directories, also the first approach. */
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
{
|
||||||
|
/* Approach based on the file. */
|
||||||
|
|
||||||
|
/* Open a handle to the file.
|
||||||
|
CreateFile
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363858.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa363874.aspx> */
|
||||||
|
HANDLE h =
|
||||||
|
CreateFile (rname,
|
||||||
|
FILE_READ_ATTRIBUTES,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||||
|
NULL,
|
||||||
|
OPEN_EXISTING,
|
||||||
|
/* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only
|
||||||
|
in case as different) makes sense only when applied to *all*
|
||||||
|
filesystem operations. */
|
||||||
|
FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */,
|
||||||
|
NULL);
|
||||||
|
if (h != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
ret = _gl_fstat_by_handle (h, rname, buf);
|
||||||
|
CloseHandle (h);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test for root and UNC root directories. */
|
||||||
|
if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len]))
|
||||||
|
|| is_unc_root (rname))
|
||||||
|
goto failed;
|
||||||
|
|
||||||
|
/* Fallback. */
|
||||||
|
{
|
||||||
|
/* Approach based on the directory entry. */
|
||||||
|
|
||||||
|
if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL)
|
||||||
|
{
|
||||||
|
/* Other Windows API functions would fail with error
|
||||||
|
ERROR_INVALID_NAME. */
|
||||||
|
if (malloca_rname != NULL)
|
||||||
|
freea (malloca_rname);
|
||||||
|
errno = ENOENT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the details about the directory entry. This can be done through
|
||||||
|
FindFirstFile
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364418.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365740.aspx>
|
||||||
|
or through
|
||||||
|
FindFirstFileEx with argument FindExInfoBasic
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364419.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa364415.aspx>
|
||||||
|
<https://msdn.microsoft.com/en-us/library/aa365740.aspx> */
|
||||||
|
WIN32_FIND_DATA info;
|
||||||
|
HANDLE h = FindFirstFile (rname, &info);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
goto failed;
|
||||||
|
|
||||||
|
/* Test for error conditions before starting to fill *buf. */
|
||||||
|
if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
|
||||||
|
{
|
||||||
|
FindClose (h);
|
||||||
|
if (malloca_rname != NULL)
|
||||||
|
freea (malloca_rname);
|
||||||
|
errno = EOVERFLOW;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if _GL_WINDOWS_STAT_INODES
|
||||||
|
buf->st_dev = 0;
|
||||||
|
# if _GL_WINDOWS_STAT_INODES == 2
|
||||||
|
buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
|
||||||
|
# else /* _GL_WINDOWS_STAT_INODES == 1 */
|
||||||
|
buf->st_ino = 0;
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
/* st_ino is not wide enough for identifying a file on a device.
|
||||||
|
Without st_ino, st_dev is pointless. */
|
||||||
|
buf->st_dev = 0;
|
||||||
|
buf->st_ino = 0;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* st_mode. */
|
||||||
|
unsigned int mode =
|
||||||
|
/* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */
|
||||||
|
((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
|
||||||
|
| S_IREAD_UGO
|
||||||
|
| ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
|
||||||
|
if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
/* Determine whether the file is executable by looking at the file
|
||||||
|
name suffix. */
|
||||||
|
if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
|
||||||
|
{
|
||||||
|
const char *last_dot = NULL;
|
||||||
|
const char *p;
|
||||||
|
for (p = info.cFileName; *p != '\0'; p++)
|
||||||
|
if (*p == '.')
|
||||||
|
last_dot = p;
|
||||||
|
if (last_dot != NULL)
|
||||||
|
{
|
||||||
|
const char *suffix = last_dot + 1;
|
||||||
|
if (_stricmp (suffix, "exe") == 0
|
||||||
|
|| _stricmp (suffix, "bat") == 0
|
||||||
|
|| _stricmp (suffix, "cmd") == 0
|
||||||
|
|| _stricmp (suffix, "com") == 0)
|
||||||
|
mode |= S_IEXEC_UGO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf->st_mode = mode;
|
||||||
|
|
||||||
|
/* st_nlink. Ignore hard links here. */
|
||||||
|
buf->st_nlink = 1;
|
||||||
|
|
||||||
|
/* There's no easy way to map the Windows SID concept to an integer. */
|
||||||
|
buf->st_uid = 0;
|
||||||
|
buf->st_gid = 0;
|
||||||
|
|
||||||
|
/* st_rdev is irrelevant for normal files and directories. */
|
||||||
|
buf->st_rdev = 0;
|
||||||
|
|
||||||
|
/* st_size. */
|
||||||
|
if (sizeof (buf->st_size) <= 4)
|
||||||
|
/* Range check already done above. */
|
||||||
|
buf->st_size = info.nFileSizeLow;
|
||||||
|
else
|
||||||
|
buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
|
||||||
|
|
||||||
|
/* st_atime, st_mtime, st_ctime. */
|
||||||
|
# if _GL_WINDOWS_STAT_TIMESPEC
|
||||||
|
buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
|
||||||
|
buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
|
||||||
|
buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
|
||||||
|
# else
|
||||||
|
buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
|
||||||
|
buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
|
||||||
|
buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
FindClose (h);
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode))
|
||||||
|
{
|
||||||
|
errno = ENOTDIR;
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
if (malloca_rname != NULL)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
freea (malloca_rname);
|
||||||
|
errno = saved_errno;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
failed:
|
||||||
|
{
|
||||||
|
DWORD error = GetLastError ();
|
||||||
|
#if 0
|
||||||
|
fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (malloca_rname != NULL)
|
||||||
|
freea (malloca_rname);
|
||||||
|
|
||||||
|
switch (error)
|
||||||
|
{
|
||||||
|
/* Some of these errors probably cannot happen with the specific flags
|
||||||
|
that we pass to CreateFile. But who knows... */
|
||||||
|
case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */
|
||||||
|
case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */
|
||||||
|
case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */
|
||||||
|
case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */
|
||||||
|
case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */
|
||||||
|
case ERROR_DIRECTORY:
|
||||||
|
errno = ENOENT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */
|
||||||
|
case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */
|
||||||
|
/* XXX map to EACCESS or EPERM? */
|
||||||
|
errno = EACCES;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_OUTOFMEMORY:
|
||||||
|
errno = ENOMEM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_WRITE_PROTECT:
|
||||||
|
errno = EROFS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_WRITE_FAULT:
|
||||||
|
case ERROR_READ_FAULT:
|
||||||
|
case ERROR_GEN_FAILURE:
|
||||||
|
errno = EIO;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_BUFFER_OVERFLOW:
|
||||||
|
case ERROR_FILENAME_EXCED_RANGE:
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_DELETE_PENDING: /* XXX map to EACCESS or EPERM? */
|
||||||
|
errno = EPERM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
errno = EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int result = orig_stat (name, buf);
|
||||||
|
# if REPLACE_FUNC_STAT_FILE
|
||||||
/* Solaris 9 mistakenly succeeds when given a non-directory with a
|
/* Solaris 9 mistakenly succeeds when given a non-directory with a
|
||||||
trailing slash. */
|
trailing slash. */
|
||||||
if (result == 0 && !S_ISDIR (st->st_mode))
|
if (result == 0 && !S_ISDIR (buf->st_mode))
|
||||||
{
|
{
|
||||||
size_t len = strlen (name);
|
size_t len = strlen (name);
|
||||||
if (ISSLASH (name[len - 1]))
|
if (ISSLASH (name[len - 1]))
|
||||||
|
|
@ -92,47 +417,7 @@ rpl_stat (char const *name, struct stat *st)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* REPLACE_FUNC_STAT_FILE */
|
# endif /* REPLACE_FUNC_STAT_FILE */
|
||||||
#if REPLACE_FUNC_STAT_DIR
|
|
||||||
|
|
||||||
if (result == -1 && errno == ENOENT)
|
|
||||||
{
|
|
||||||
/* Due to mingw's oddities, there are some directories (like
|
|
||||||
c:\) where stat() only succeeds with a trailing slash, and
|
|
||||||
other directories (like c:\windows) where stat() only
|
|
||||||
succeeds without a trailing slash. But we want the two to be
|
|
||||||
synonymous, since chdir() manages either style. Likewise, Mingw also
|
|
||||||
reports ENOENT for names longer than PATH_MAX, when we want
|
|
||||||
ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR.
|
|
||||||
Fortunately, mingw PATH_MAX is small enough for stack
|
|
||||||
allocation. */
|
|
||||||
char fixed_name[PATH_MAX + 1] = {0};
|
|
||||||
size_t len = strlen (name);
|
|
||||||
bool check_dir = false;
|
|
||||||
verify (PATH_MAX <= 4096);
|
|
||||||
if (PATH_MAX <= len)
|
|
||||||
errno = ENAMETOOLONG;
|
|
||||||
else if (len)
|
|
||||||
{
|
|
||||||
strcpy (fixed_name, name);
|
|
||||||
if (ISSLASH (fixed_name[len - 1]))
|
|
||||||
{
|
|
||||||
check_dir = true;
|
|
||||||
while (len && ISSLASH (fixed_name[len - 1]))
|
|
||||||
fixed_name[--len] = '\0';
|
|
||||||
if (!len)
|
|
||||||
fixed_name[0] = '/';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fixed_name[len++] = '/';
|
|
||||||
result = orig_stat (fixed_name, st);
|
|
||||||
if (result == 0 && check_dir && !S_ISDIR (st->st_mode))
|
|
||||||
{
|
|
||||||
result = -1;
|
|
||||||
errno = ENOTDIR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* REPLACE_FUNC_STAT_DIR */
|
|
||||||
return result;
|
return result;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@
|
||||||
# elif ((defined __APPLE__ && defined __MACH__ \
|
# elif ((defined __APPLE__ && defined __MACH__ \
|
||||||
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
||||||
: __GNUC__) \
|
: __GNUC__) \
|
||||||
|| 061200 <= __HP_cc || 061200 <= __HP_aCC \
|
|| (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
|
||||||
|| __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)
|
|| __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)
|
||||||
# define _Alignas(a) __attribute__ ((__aligned__ (a)))
|
# define _Alignas(a) __attribute__ ((__aligned__ (a)))
|
||||||
# elif 1300 <= _MSC_VER
|
# elif 1300 <= _MSC_VER
|
||||||
|
|
|
||||||
|
|
@ -128,8 +128,13 @@
|
||||||
Return an unspecified value if BITS == 0, adding a check to pacify
|
Return an unspecified value if BITS == 0, adding a check to pacify
|
||||||
picky compilers. */
|
picky compilers. */
|
||||||
|
|
||||||
# define _STDINT_MIN(signed, bits, zero) \
|
/* These are separate macros, because if you try to merge these macros into
|
||||||
((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero))
|
a single one, HP-UX cc rejects the resulting expression in constant
|
||||||
|
expressions. */
|
||||||
|
# define _STDINT_UNSIGNED_MIN(bits, zero) \
|
||||||
|
(zero)
|
||||||
|
# define _STDINT_SIGNED_MIN(bits, zero) \
|
||||||
|
(~ _STDINT_MAX (1, bits, zero))
|
||||||
|
|
||||||
# define _STDINT_MAX(signed, bits, zero) \
|
# define _STDINT_MAX(signed, bits, zero) \
|
||||||
(((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
|
(((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
|
||||||
|
|
@ -512,15 +517,15 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
|
||||||
# undef PTRDIFF_MAX
|
# undef PTRDIFF_MAX
|
||||||
# if @APPLE_UNIVERSAL_BUILD@
|
# if @APPLE_UNIVERSAL_BUILD@
|
||||||
# ifdef _LP64
|
# ifdef _LP64
|
||||||
# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l)
|
# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l)
|
||||||
# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l)
|
# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l)
|
||||||
# else
|
# else
|
||||||
# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0)
|
# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0)
|
||||||
# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0)
|
# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0)
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
# define PTRDIFF_MIN \
|
# define PTRDIFF_MIN \
|
||||||
_STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
_STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
||||||
# define PTRDIFF_MAX \
|
# define PTRDIFF_MAX \
|
||||||
_STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
_STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
||||||
# endif
|
# endif
|
||||||
|
|
@ -528,9 +533,13 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
|
||||||
/* sig_atomic_t limits */
|
/* sig_atomic_t limits */
|
||||||
# undef SIG_ATOMIC_MIN
|
# undef SIG_ATOMIC_MIN
|
||||||
# undef SIG_ATOMIC_MAX
|
# undef SIG_ATOMIC_MAX
|
||||||
# define SIG_ATOMIC_MIN \
|
# if @HAVE_SIGNED_SIG_ATOMIC_T@
|
||||||
_STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
# define SIG_ATOMIC_MIN \
|
||||||
0@SIG_ATOMIC_T_SUFFIX@)
|
_STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
|
||||||
|
# else
|
||||||
|
# define SIG_ATOMIC_MIN \
|
||||||
|
_STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
|
||||||
|
# endif
|
||||||
# define SIG_ATOMIC_MAX \
|
# define SIG_ATOMIC_MAX \
|
||||||
_STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
_STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
||||||
0@SIG_ATOMIC_T_SUFFIX@)
|
0@SIG_ATOMIC_T_SUFFIX@)
|
||||||
|
|
@ -566,16 +575,26 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
|
||||||
# endif
|
# endif
|
||||||
# undef WCHAR_MIN
|
# undef WCHAR_MIN
|
||||||
# undef WCHAR_MAX
|
# undef WCHAR_MAX
|
||||||
# define WCHAR_MIN \
|
# if @HAVE_SIGNED_WCHAR_T@
|
||||||
_STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
# define WCHAR_MIN \
|
||||||
|
_STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||||
|
# else
|
||||||
|
# define WCHAR_MIN \
|
||||||
|
_STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||||
|
# endif
|
||||||
# define WCHAR_MAX \
|
# define WCHAR_MAX \
|
||||||
_STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
_STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||||
|
|
||||||
/* wint_t limits */
|
/* wint_t limits */
|
||||||
# undef WINT_MIN
|
# undef WINT_MIN
|
||||||
# undef WINT_MAX
|
# undef WINT_MAX
|
||||||
# define WINT_MIN \
|
# if @HAVE_SIGNED_WINT_T@
|
||||||
_STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
# define WINT_MIN \
|
||||||
|
_STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||||
|
# else
|
||||||
|
# define WINT_MIN \
|
||||||
|
_STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||||
|
# endif
|
||||||
# define WINT_MAX \
|
# define WINT_MAX \
|
||||||
_STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
_STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,23 @@
|
||||||
/* The definition of _GL_WARN_ON_USE is copied here. */
|
/* The definition of _GL_WARN_ON_USE is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Clear a block of memory. The compiler will not delete a call to
|
||||||
|
this function, even if the block is dead after the call. */
|
||||||
|
#if @GNULIB_EXPLICIT_BZERO@
|
||||||
|
# if ! @HAVE_EXPLICIT_BZERO@
|
||||||
|
_GL_FUNCDECL_SYS (explicit_bzero, void,
|
||||||
|
(void *__dest, size_t __n) _GL_ARG_NONNULL ((1)));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
|
||||||
|
_GL_CXXALIASWARN (explicit_bzero);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef explicit_bzero
|
||||||
|
# if HAVE_RAW_DECL_EXPLICIT_BZERO
|
||||||
|
_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
|
||||||
|
"use gnulib module explicit_bzero for portability");
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Find the index of the least-significant set bit. */
|
/* Find the index of the least-significant set bit. */
|
||||||
#if @GNULIB_FFSL@
|
#if @GNULIB_FFSL@
|
||||||
# if !@HAVE_FFSL@
|
# if !@HAVE_FFSL@
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* Provide a more complete sys/stat header file.
|
/* Provide a more complete sys/stat.h header file.
|
||||||
Copyright (C) 2005-2017 Free Software Foundation, Inc.
|
Copyright (C) 2005-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
|
@ -72,6 +72,75 @@
|
||||||
# define stat _stati64
|
# define stat _stati64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Optionally, override 'struct stat' on native Windows. */
|
||||||
|
#if @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
|
|
||||||
|
# undef stat
|
||||||
|
# if @GNULIB_STAT@
|
||||||
|
# define stat rpl_stat
|
||||||
|
# else
|
||||||
|
/* Provoke a clear link error if stat() is used as a function and
|
||||||
|
module 'stat' is not in use. */
|
||||||
|
# define stat stat_used_without_requesting_gnulib_module_stat
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if !GNULIB_defined_struct_stat
|
||||||
|
struct stat
|
||||||
|
{
|
||||||
|
dev_t st_dev;
|
||||||
|
ino_t st_ino;
|
||||||
|
mode_t st_mode;
|
||||||
|
nlink_t st_nlink;
|
||||||
|
# if 0
|
||||||
|
uid_t st_uid;
|
||||||
|
# else /* uid_t is not defined by default on native Windows. */
|
||||||
|
short st_uid;
|
||||||
|
# endif
|
||||||
|
# if 0
|
||||||
|
gid_t st_gid;
|
||||||
|
# else /* gid_t is not defined by default on native Windows. */
|
||||||
|
short st_gid;
|
||||||
|
# endif
|
||||||
|
dev_t st_rdev;
|
||||||
|
off_t st_size;
|
||||||
|
# if 0
|
||||||
|
blksize_t st_blksize;
|
||||||
|
blkcnt_t st_blocks;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if @WINDOWS_STAT_TIMESPEC@
|
||||||
|
struct timespec st_atim;
|
||||||
|
struct timespec st_mtim;
|
||||||
|
struct timespec st_ctim;
|
||||||
|
# else
|
||||||
|
time_t st_atime;
|
||||||
|
time_t st_mtime;
|
||||||
|
time_t st_ctime;
|
||||||
|
# endif
|
||||||
|
};
|
||||||
|
# if @WINDOWS_STAT_TIMESPEC@
|
||||||
|
# define st_atime st_atim.tv_sec
|
||||||
|
# define st_mtime st_mtim.tv_sec
|
||||||
|
# define st_ctime st_ctim.tv_sec
|
||||||
|
/* Indicator, for gnulib internal purposes. */
|
||||||
|
# define _GL_WINDOWS_STAT_TIMESPEC 1
|
||||||
|
# endif
|
||||||
|
# define GNULIB_defined_struct_stat 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Other possible values of st_mode. */
|
||||||
|
# if 0
|
||||||
|
# define _S_IFBLK 0x6000
|
||||||
|
# endif
|
||||||
|
# if 0
|
||||||
|
# define _S_IFLNK 0xA000
|
||||||
|
# endif
|
||||||
|
# if 0
|
||||||
|
# define _S_IFSOCK 0xC000
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef S_IFIFO
|
#ifndef S_IFIFO
|
||||||
# ifdef _S_IFIFO
|
# ifdef _S_IFIFO
|
||||||
# define S_IFIFO _S_IFIFO
|
# define S_IFIFO _S_IFIFO
|
||||||
|
|
@ -345,6 +414,9 @@ _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
|
||||||
_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
|
_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIASWARN (fstat);
|
_GL_CXXALIASWARN (fstat);
|
||||||
|
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
|
# undef fstat
|
||||||
|
# define fstat fstat_used_without_requesting_gnulib_module_fstat
|
||||||
#elif @WINDOWS_64_BIT_ST_SIZE@
|
#elif @WINDOWS_64_BIT_ST_SIZE@
|
||||||
/* Above, we define stat to _stati64. */
|
/* Above, we define stat to _stati64. */
|
||||||
# define fstat _fstati64
|
# define fstat _fstati64
|
||||||
|
|
@ -378,6 +450,9 @@ _GL_CXXALIAS_SYS (fstatat, int,
|
||||||
(int fd, char const *name, struct stat *st, int flags));
|
(int fd, char const *name, struct stat *st, int flags));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIASWARN (fstatat);
|
_GL_CXXALIASWARN (fstatat);
|
||||||
|
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
|
# undef fstatat
|
||||||
|
# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef fstatat
|
# undef fstatat
|
||||||
# if HAVE_RAW_DECL_FSTATAT
|
# if HAVE_RAW_DECL_FSTATAT
|
||||||
|
|
@ -476,6 +551,9 @@ _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
|
||||||
# if @HAVE_LSTAT@
|
# if @HAVE_LSTAT@
|
||||||
_GL_CXXALIASWARN (lstat);
|
_GL_CXXALIASWARN (lstat);
|
||||||
# endif
|
# endif
|
||||||
|
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
|
# undef lstat
|
||||||
|
# define lstat lstat_used_without_requesting_gnulib_module_lstat
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef lstat
|
# undef lstat
|
||||||
# if HAVE_RAW_DECL_LSTAT
|
# if HAVE_RAW_DECL_LSTAT
|
||||||
|
|
@ -625,63 +703,69 @@ _GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
|
||||||
|
|
||||||
#if @GNULIB_STAT@
|
#if @GNULIB_STAT@
|
||||||
# if @REPLACE_STAT@
|
# if @REPLACE_STAT@
|
||||||
/* We can't use the object-like #define stat rpl_stat, because of
|
# if !@GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
struct stat. This means that rpl_stat will not be used if the user
|
/* We can't use the object-like #define stat rpl_stat, because of
|
||||||
does (stat)(a,b). Oh well. */
|
struct stat. This means that rpl_stat will not be used if the user
|
||||||
# if defined _AIX && defined stat && defined _LARGE_FILES
|
does (stat)(a,b). Oh well. */
|
||||||
/* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
|
# if defined _AIX && defined stat && defined _LARGE_FILES
|
||||||
so we have to replace stat64() instead of stat(). */
|
/* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
|
||||||
# undef stat64
|
so we have to replace stat64() instead of stat(). */
|
||||||
# define stat64(name, st) rpl_stat (name, st)
|
# undef stat64
|
||||||
# elif @WINDOWS_64_BIT_ST_SIZE@
|
# define stat64(name, st) rpl_stat (name, st)
|
||||||
/* Above, we define stat to _stati64. */
|
# elif @WINDOWS_64_BIT_ST_SIZE@
|
||||||
# if defined __MINGW32__ && defined _stati64
|
/* Above, we define stat to _stati64. */
|
||||||
# ifndef _USE_32BIT_TIME_T
|
# if defined __MINGW32__ && defined _stati64
|
||||||
/* The system headers define _stati64 to _stat64. */
|
# ifndef _USE_32BIT_TIME_T
|
||||||
# undef _stat64
|
/* The system headers define _stati64 to _stat64. */
|
||||||
# define _stat64(name, st) rpl_stat (name, st)
|
# undef _stat64
|
||||||
|
# define _stat64(name, st) rpl_stat (name, st)
|
||||||
|
# endif
|
||||||
|
# elif defined _MSC_VER && defined _stati64
|
||||||
|
# ifdef _USE_32BIT_TIME_T
|
||||||
|
/* The system headers define _stati64 to _stat32i64. */
|
||||||
|
# undef _stat32i64
|
||||||
|
# define _stat32i64(name, st) rpl_stat (name, st)
|
||||||
|
# else
|
||||||
|
/* The system headers define _stati64 to _stat64. */
|
||||||
|
# undef _stat64
|
||||||
|
# define _stat64(name, st) rpl_stat (name, st)
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# undef _stati64
|
||||||
|
# define _stati64(name, st) rpl_stat (name, st)
|
||||||
# endif
|
# endif
|
||||||
# elif defined _MSC_VER && defined _stati64
|
# elif defined __MINGW32__ && defined stat
|
||||||
# ifdef _USE_32BIT_TIME_T
|
# ifdef _USE_32BIT_TIME_T
|
||||||
/* The system headers define _stati64 to _stat32i64. */
|
/* The system headers define stat to _stat32i64. */
|
||||||
# undef _stat32i64
|
# undef _stat32i64
|
||||||
# define _stat32i64(name, st) rpl_stat (name, st)
|
# define _stat32i64(name, st) rpl_stat (name, st)
|
||||||
# else
|
# else
|
||||||
/* The system headers define _stati64 to _stat64. */
|
/* The system headers define stat to _stat64. */
|
||||||
# undef _stat64
|
# undef _stat64
|
||||||
# define _stat64(name, st) rpl_stat (name, st)
|
# define _stat64(name, st) rpl_stat (name, st)
|
||||||
# endif
|
# endif
|
||||||
# else
|
# elif defined _MSC_VER && defined stat
|
||||||
# undef _stati64
|
# ifdef _USE_32BIT_TIME_T
|
||||||
# define _stati64(name, st) rpl_stat (name, st)
|
/* The system headers define stat to _stat32. */
|
||||||
# endif
|
# undef _stat32
|
||||||
# elif defined __MINGW32__ && defined stat
|
# define _stat32(name, st) rpl_stat (name, st)
|
||||||
# ifdef _USE_32BIT_TIME_T
|
# else
|
||||||
/* The system headers define stat to _stat32i64. */
|
/* The system headers define stat to _stat64i32. */
|
||||||
# undef _stat32i64
|
# undef _stat64i32
|
||||||
# define _stat32i64(name, st) rpl_stat (name, st)
|
# define _stat64i32(name, st) rpl_stat (name, st)
|
||||||
# else
|
# endif
|
||||||
/* The system headers define stat to _stat64. */
|
# else /* !(_AIX || __MINGW32__ || _MSC_VER) */
|
||||||
# undef _stat64
|
# undef stat
|
||||||
# define _stat64(name, st) rpl_stat (name, st)
|
# define stat(name, st) rpl_stat (name, st)
|
||||||
# endif
|
# endif /* !_LARGE_FILES */
|
||||||
# elif defined _MSC_VER && defined stat
|
# endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */
|
||||||
# ifdef _USE_32BIT_TIME_T
|
|
||||||
/* The system headers define stat to _stat32. */
|
|
||||||
# undef _stat32
|
|
||||||
# define _stat32(name, st) rpl_stat (name, st)
|
|
||||||
# else
|
|
||||||
/* The system headers define stat to _stat64i32. */
|
|
||||||
# undef _stat64i32
|
|
||||||
# define _stat64i32(name, st) rpl_stat (name, st)
|
|
||||||
# endif
|
|
||||||
# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */
|
|
||||||
# undef stat
|
|
||||||
# define stat(name, st) rpl_stat (name, st)
|
|
||||||
# endif /* !_LARGE_FILES */
|
|
||||||
_GL_EXTERN_C int stat (const char *name, struct stat *buf)
|
_GL_EXTERN_C int stat (const char *name, struct stat *buf)
|
||||||
_GL_ARG_NONNULL ((1, 2));
|
_GL_ARG_NONNULL ((1, 2));
|
||||||
# endif
|
# endif
|
||||||
|
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||||
|
/* see above:
|
||||||
|
#define stat stat_used_without_requesting_gnulib_module_stat
|
||||||
|
*/
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef stat
|
# undef stat
|
||||||
# if HAVE_RAW_DECL_STAT
|
# if HAVE_RAW_DECL_STAT
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,48 @@
|
||||||
# define _GL_WINDOWS_64_BIT_OFF_T 1
|
# define _GL_WINDOWS_64_BIT_OFF_T 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Override dev_t and ino_t if distinguishable inodes support is requested
|
||||||
|
on native Windows. */
|
||||||
|
#if @WINDOWS_STAT_INODES@
|
||||||
|
|
||||||
|
# if @WINDOWS_STAT_INODES@ == 2
|
||||||
|
/* Experimental, not useful in Windows 10. */
|
||||||
|
|
||||||
|
/* Define dev_t to a 64-bit type. */
|
||||||
|
# if !defined GNULIB_defined_dev_t
|
||||||
|
typedef unsigned long long int rpl_dev_t;
|
||||||
|
# undef dev_t
|
||||||
|
# define dev_t rpl_dev_t
|
||||||
|
# define GNULIB_defined_dev_t 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Define ino_t to a 128-bit type. */
|
||||||
|
# if !defined GNULIB_defined_ino_t
|
||||||
|
/* MSVC does not have a 128-bit integer type.
|
||||||
|
GCC has a 128-bit integer type __int128, but only on 64-bit targets. */
|
||||||
|
typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t;
|
||||||
|
# undef ino_t
|
||||||
|
# define ino_t rpl_ino_t
|
||||||
|
# define GNULIB_defined_ino_t 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# else /* @WINDOWS_STAT_INODES@ == 1 */
|
||||||
|
|
||||||
|
/* Define ino_t to a 64-bit type. */
|
||||||
|
# if !defined GNULIB_defined_ino_t
|
||||||
|
typedef unsigned long long int rpl_ino_t;
|
||||||
|
# undef ino_t
|
||||||
|
# define ino_t rpl_ino_t
|
||||||
|
# define GNULIB_defined_ino_t 1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Indicator, for gnulib internal purposes. */
|
||||||
|
# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */
|
/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */
|
||||||
/* But avoid namespace pollution on glibc systems. */
|
/* But avoid namespace pollution on glibc systems. */
|
||||||
#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
|
#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,7 @@ try_nocreate (char *tmpl, void *flags _GL_UNUSED)
|
||||||
{
|
{
|
||||||
struct_stat64 st;
|
struct_stat64 st;
|
||||||
|
|
||||||
if (__lxstat64 (_STAT_VER, tmpl, &st) == 0)
|
if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW)
|
||||||
__set_errno (EEXIST);
|
__set_errno (EEXIST);
|
||||||
return errno == ENOENT ? 0 : -1;
|
return errno == ENOENT ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,24 @@ _GL_CXXALIAS_SYS (nanosleep, int,
|
||||||
_GL_CXXALIASWARN (nanosleep);
|
_GL_CXXALIASWARN (nanosleep);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
/* Initialize time conversion information. */
|
||||||
|
# if @GNULIB_TZSET@
|
||||||
|
# if @REPLACE_TZSET@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef tzset
|
||||||
|
# define tzset rpl_tzset
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (tzset, void, (void));
|
||||||
|
_GL_CXXALIAS_RPL (tzset, void, (void));
|
||||||
|
# else
|
||||||
|
# if ! @HAVE_TZSET@
|
||||||
|
_GL_FUNCDECL_SYS (tzset, void, (void));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (tzset, void, (void));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (tzset);
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Return the 'time_t' representation of TP and normalize TP. */
|
/* Return the 'time_t' representation of TP and normalize TP. */
|
||||||
# if @GNULIB_MKTIME@
|
# if @GNULIB_MKTIME@
|
||||||
# if @REPLACE_MKTIME@
|
# if @REPLACE_MKTIME@
|
||||||
|
|
@ -187,7 +205,7 @@ _GL_CXXALIASWARN (gmtime_r);
|
||||||
/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
|
/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
|
||||||
<http://www.opengroup.org/susv3xsh/localtime.html> and
|
<http://www.opengroup.org/susv3xsh/localtime.html> and
|
||||||
<http://www.opengroup.org/susv3xsh/gmtime.html>. */
|
<http://www.opengroup.org/susv3xsh/gmtime.html>. */
|
||||||
# if @GNULIB_GETTIMEOFDAY@
|
# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@
|
||||||
# if @REPLACE_LOCALTIME@
|
# if @REPLACE_LOCALTIME@
|
||||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
# undef localtime
|
# undef localtime
|
||||||
|
|
@ -202,7 +220,7 @@ _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
|
||||||
_GL_CXXALIASWARN (localtime);
|
_GL_CXXALIASWARN (localtime);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if @GNULIB_GETTIMEOFDAY@
|
# if 0 || @REPLACE_GMTIME@
|
||||||
# if @REPLACE_GMTIME@
|
# if @REPLACE_GMTIME@
|
||||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
# undef gmtime
|
# undef gmtime
|
||||||
|
|
@ -233,6 +251,41 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
|
||||||
_GL_CXXALIASWARN (strptime);
|
_GL_CXXALIASWARN (strptime);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
/* Convert *TP to a date and time string. See
|
||||||
|
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */
|
||||||
|
# if @GNULIB_CTIME@
|
||||||
|
# if @REPLACE_CTIME@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# define ctime rpl_ctime
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
|
||||||
|
# else
|
||||||
|
_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (ctime);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Convert *TP to a date and time string. See
|
||||||
|
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */
|
||||||
|
# if @GNULIB_STRFTIME@
|
||||||
|
# if @REPLACE_STRFTIME@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# define strftime rpl_strftime
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (strftime, size_t, (char *__buf, size_t __bufsize,
|
||||||
|
const char *__fmt, const struct tm *__tp)
|
||||||
|
_GL_ARG_NONNULL ((1, 3, 4)));
|
||||||
|
_GL_CXXALIAS_RPL (strftime, size_t, (char *__buf, size_t __bufsize,
|
||||||
|
const char *__fmt, const struct tm *__tp));
|
||||||
|
# else
|
||||||
|
_GL_CXXALIAS_SYS (strftime, size_t, (char *__buf, size_t __bufsize,
|
||||||
|
const char *__fmt, const struct tm *__tp));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (strftime);
|
||||||
|
# endif
|
||||||
|
|
||||||
# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
|
# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
|
||||||
typedef struct tm_zone *timezone_t;
|
typedef struct tm_zone *timezone_t;
|
||||||
_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
|
_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
|
||||||
|
|
|
||||||
|
|
@ -127,11 +127,18 @@
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
||||||
|
|
||||||
|
/* The definition of _GL_ARG_NONNULL is copied here. */
|
||||||
|
|
||||||
|
/* The definition of _GL_WARN_ON_USE is copied here. */
|
||||||
|
|
||||||
|
|
||||||
/* Get getopt(), optarg, optind, opterr, optopt.
|
/* Get getopt(), optarg, optind, opterr, optopt.
|
||||||
But avoid namespace pollution on glibc systems. */
|
But avoid namespace pollution on glibc systems. */
|
||||||
#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
|
#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
|
||||||
# define __need_getopt
|
# include <getopt-cdefs.h>
|
||||||
# include <getopt.h>
|
# include <getopt-pfx-core.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _GL_INLINE_HEADER_BEGIN
|
#ifndef _GL_INLINE_HEADER_BEGIN
|
||||||
|
|
@ -142,13 +149,6 @@ _GL_INLINE_HEADER_BEGIN
|
||||||
# define _GL_UNISTD_INLINE _GL_INLINE
|
# define _GL_UNISTD_INLINE _GL_INLINE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
|
||||||
|
|
||||||
/* The definition of _GL_ARG_NONNULL is copied here. */
|
|
||||||
|
|
||||||
/* The definition of _GL_WARN_ON_USE is copied here. */
|
|
||||||
|
|
||||||
|
|
||||||
/* Hide some function declarations from <winsock2.h>. */
|
/* Hide some function declarations from <winsock2.h>. */
|
||||||
|
|
||||||
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
|
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
|
||||||
|
|
@ -1457,6 +1457,36 @@ _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_TRUNCATE@
|
||||||
|
/* Change the size of the file designated by FILENAME to become equal to LENGTH.
|
||||||
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2008 specification
|
||||||
|
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */
|
||||||
|
# if @REPLACE_TRUNCATE@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef truncate
|
||||||
|
# define truncate rpl_truncate
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length));
|
||||||
|
# else
|
||||||
|
# if !@HAVE_TRUNCATE@
|
||||||
|
_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (truncate);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef truncate
|
||||||
|
# if HAVE_RAW_DECL_TRUNCATE
|
||||||
|
_GL_WARN_ON_USE (truncate, "truncate is unportable - "
|
||||||
|
"use gnulib module truncate for portability");
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_TTYNAME_R@
|
#if @GNULIB_TTYNAME_R@
|
||||||
/* Store at most BUFLEN characters of the pathname of the terminal FD is
|
/* Store at most BUFLEN characters of the pathname of the terminal FD is
|
||||||
open on in BUF. Return 0 on success, otherwise an error number. */
|
open on in BUF. Return 0 on success, otherwise an error number. */
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,14 @@
|
||||||
# include "fpucw.h"
|
# include "fpucw.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef FALLTHROUGH
|
||||||
|
# if __GNUC__ < 7
|
||||||
|
# define FALLTHROUGH ((void) 0)
|
||||||
|
# else
|
||||||
|
# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Default parameters. */
|
/* Default parameters. */
|
||||||
#ifndef VASNPRINTF
|
#ifndef VASNPRINTF
|
||||||
# if WIDE_CHAR_VERSION
|
# if WIDE_CHAR_VERSION
|
||||||
|
|
@ -156,6 +164,7 @@
|
||||||
# define SNPRINTF snwprintf
|
# define SNPRINTF snwprintf
|
||||||
# else
|
# else
|
||||||
# define SNPRINTF _snwprintf
|
# define SNPRINTF _snwprintf
|
||||||
|
# define USE_MSVC__SNPRINTF 1
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
/* Unix. */
|
/* Unix. */
|
||||||
|
|
@ -181,7 +190,9 @@
|
||||||
/* Here we need to call the native snprintf, not rpl_snprintf. */
|
/* Here we need to call the native snprintf, not rpl_snprintf. */
|
||||||
# undef snprintf
|
# undef snprintf
|
||||||
# else
|
# else
|
||||||
|
/* MSVC versions < 14 did not have snprintf, only _snprintf. */
|
||||||
# define SNPRINTF _snprintf
|
# define SNPRINTF _snprintf
|
||||||
|
# define USE_MSVC__SNPRINTF 1
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
/* Unix. */
|
/* Unix. */
|
||||||
|
|
@ -208,7 +219,7 @@
|
||||||
#undef remainder
|
#undef remainder
|
||||||
#define remainder rem
|
#define remainder rem
|
||||||
|
|
||||||
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION
|
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION
|
||||||
# if (HAVE_STRNLEN && !defined _AIX)
|
# if (HAVE_STRNLEN && !defined _AIX)
|
||||||
# define local_strnlen strnlen
|
# define local_strnlen strnlen
|
||||||
# else
|
# else
|
||||||
|
|
@ -224,7 +235,7 @@ local_strnlen (const char *string, size_t maxlen)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
|
#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
|
||||||
# if HAVE_WCSLEN
|
# if HAVE_WCSLEN
|
||||||
# define local_wcslen wcslen
|
# define local_wcslen wcslen
|
||||||
# else
|
# else
|
||||||
|
|
@ -247,7 +258,7 @@ local_wcslen (const wchar_t *s)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
|
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
|
||||||
# if HAVE_WCSNLEN
|
# if HAVE_WCSNLEN
|
||||||
# define local_wcsnlen wcsnlen
|
# define local_wcsnlen wcsnlen
|
||||||
# else
|
# else
|
||||||
|
|
@ -1517,7 +1528,7 @@ is_borderline (const char *digits, size_t precision)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99
|
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
|
||||||
|
|
||||||
/* Use a different function name, to make it possible that the 'wchar_t'
|
/* Use a different function name, to make it possible that the 'wchar_t'
|
||||||
parametrization and the 'char' parametrization get compiled in the same
|
parametrization and the 'char' parametrization get compiled in the same
|
||||||
|
|
@ -2392,7 +2403,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
|
#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
|
||||||
else if (dp->conversion == 's'
|
else if (dp->conversion == 's'
|
||||||
# if WIDE_CHAR_VERSION
|
# if WIDE_CHAR_VERSION
|
||||||
&& a.arg[dp->arg_index].type != TYPE_WIDE_STRING
|
&& a.arg[dp->arg_index].type != TYPE_WIDE_STRING
|
||||||
|
|
@ -4591,10 +4602,10 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
int has_width;
|
int has_width;
|
||||||
#endif
|
#endif
|
||||||
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
size_t width;
|
size_t width;
|
||||||
#endif
|
#endif
|
||||||
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
int has_precision;
|
int has_precision;
|
||||||
size_t precision;
|
size_t precision;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -4623,7 +4634,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
has_width = 0;
|
has_width = 0;
|
||||||
#endif
|
#endif
|
||||||
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
width = 0;
|
width = 0;
|
||||||
if (dp->width_start != dp->width_end)
|
if (dp->width_start != dp->width_end)
|
||||||
{
|
{
|
||||||
|
|
@ -4657,7 +4668,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
|
#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
|
||||||
has_precision = 0;
|
has_precision = 0;
|
||||||
precision = 6;
|
precision = 6;
|
||||||
if (dp->precision_start != dp->precision_end)
|
if (dp->precision_start != dp->precision_end)
|
||||||
|
|
@ -4834,7 +4845,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
*fbp++ = 'l';
|
*fbp++ = 'l';
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
/*FALLTHROUGH*/
|
FALLTHROUGH;
|
||||||
case TYPE_LONGINT:
|
case TYPE_LONGINT:
|
||||||
case TYPE_ULONGINT:
|
case TYPE_ULONGINT:
|
||||||
#if HAVE_WINT_T
|
#if HAVE_WINT_T
|
||||||
|
|
@ -4858,7 +4869,10 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
#endif
|
#endif
|
||||||
*fbp = dp->conversion;
|
*fbp = dp->conversion;
|
||||||
#if USE_SNPRINTF
|
#if USE_SNPRINTF
|
||||||
# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
|
# if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \
|
||||||
|
&& !defined __UCLIBC__) \
|
||||||
|
|| (defined __APPLE__ && defined __MACH__) \
|
||||||
|
|| ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
|
||||||
fbp[1] = '%';
|
fbp[1] = '%';
|
||||||
fbp[2] = 'n';
|
fbp[2] = 'n';
|
||||||
fbp[3] = '\0';
|
fbp[3] = '\0';
|
||||||
|
|
@ -4872,6 +4886,13 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
in format strings in writable memory may crash the program
|
in format strings in writable memory may crash the program
|
||||||
(if compiled with _FORTIFY_SOURCE=2), so we should avoid it
|
(if compiled with _FORTIFY_SOURCE=2), so we should avoid it
|
||||||
in this situation. */
|
in this situation. */
|
||||||
|
/* On Mac OS X 10.3 or newer, we know that snprintf's return
|
||||||
|
value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99
|
||||||
|
and gl_SNPRINTF_TRUNCATION_C99 pass.
|
||||||
|
Therefore we can avoid using %n in this situation.
|
||||||
|
On Mac OS X 10.13 or newer, the use of %n in format strings
|
||||||
|
in writable memory by default crashes the program, so we
|
||||||
|
should avoid it in this situation. */
|
||||||
/* On native Windows systems (such as mingw), we can avoid using
|
/* On native Windows systems (such as mingw), we can avoid using
|
||||||
%n because:
|
%n because:
|
||||||
- Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
|
- Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
|
||||||
|
|
@ -5127,7 +5148,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
||||||
/* Look at the snprintf() return value. */
|
/* Look at the snprintf() return value. */
|
||||||
if (retcount < 0)
|
if (retcount < 0)
|
||||||
{
|
{
|
||||||
# if !HAVE_SNPRINTF_RETVAL_C99
|
# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
|
||||||
/* HP-UX 10.20 snprintf() is doubly deficient:
|
/* HP-UX 10.20 snprintf() is doubly deficient:
|
||||||
It doesn't understand the '%n' directive,
|
It doesn't understand the '%n' directive,
|
||||||
*and* it returns -1 (rather than the length
|
*and* it returns -1 (rather than the length
|
||||||
|
|
|
||||||
|
|
@ -113,12 +113,16 @@
|
||||||
# define WEOF -1
|
# define WEOF -1
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h>.
|
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
|
||||||
This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
|
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
|
||||||
"unchanged by default argument promotions". Override it. */
|
wint_t must be "unchanged by default argument promotions". Override it. */
|
||||||
# if @GNULIB_OVERRIDES_WINT_T@
|
# if @GNULIB_OVERRIDES_WINT_T@
|
||||||
# if !GNULIB_defined_wint_t
|
# if !GNULIB_defined_wint_t
|
||||||
# include <crtdefs.h>
|
# if @HAVE_CRTDEFS_H@
|
||||||
|
# include <crtdefs.h>
|
||||||
|
# else
|
||||||
|
# include <stddef.h>
|
||||||
|
# endif
|
||||||
typedef unsigned int rpl_wint_t;
|
typedef unsigned int rpl_wint_t;
|
||||||
# undef wint_t
|
# undef wint_t
|
||||||
# define wint_t rpl_wint_t
|
# define wint_t rpl_wint_t
|
||||||
|
|
@ -1036,6 +1040,38 @@ _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Convert *TP to a date and time wide string. See
|
||||||
|
<http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */
|
||||||
|
#if @GNULIB_WCSFTIME@
|
||||||
|
# if @REPLACE_WCSFTIME@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef wcsftime
|
||||||
|
# define wcsftime rpl_wcsftime
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
|
||||||
|
const wchar_t *__fmt, const struct tm *__tp)
|
||||||
|
_GL_ARG_NONNULL ((1, 3, 4)));
|
||||||
|
_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
|
||||||
|
const wchar_t *__fmt, const struct tm *__tp));
|
||||||
|
# else
|
||||||
|
# if !@HAVE_WCSFTIME@
|
||||||
|
_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
|
||||||
|
const wchar_t *__fmt, const struct tm *__tp)
|
||||||
|
_GL_ARG_NONNULL ((1, 3, 4)));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
|
||||||
|
const wchar_t *__fmt, const struct tm *__tp));
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (wcsftime);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef wcsftime
|
||||||
|
# if HAVE_RAW_DECL_WCSFTIME
|
||||||
|
_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
|
||||||
|
"use gnulib module wcsftime for portability");
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* _@GUARD_PREFIX@_WCHAR_H */
|
#endif /* _@GUARD_PREFIX@_WCHAR_H */
|
||||||
#endif /* _@GUARD_PREFIX@_WCHAR_H */
|
#endif /* _@GUARD_PREFIX@_WCHAR_H */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -56,11 +56,13 @@
|
||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* mingw has declarations of towupper and towlower in <ctype.h> as
|
/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and
|
||||||
well <wctype.h>. Include <ctype.h> in advance to avoid rpl_ prefix
|
isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include
|
||||||
being added to the declarations. */
|
<ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the
|
||||||
#ifdef __MINGW32__
|
declarations. */
|
||||||
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
# include <ctype.h>
|
# include <ctype.h>
|
||||||
|
# include <wchar.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Include the original <wctype.h> if it exists.
|
/* Include the original <wctype.h> if it exists.
|
||||||
|
|
@ -105,12 +107,16 @@ _GL_INLINE_HEADER_BEGIN
|
||||||
# define WEOF -1
|
# define WEOF -1
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h>.
|
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
|
||||||
This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
|
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
|
||||||
"unchanged by default argument promotions". Override it. */
|
wint_t must be "unchanged by default argument promotions". Override it. */
|
||||||
# if @GNULIB_OVERRIDES_WINT_T@
|
# if @GNULIB_OVERRIDES_WINT_T@
|
||||||
# if !GNULIB_defined_wint_t
|
# if !GNULIB_defined_wint_t
|
||||||
# include <crtdefs.h>
|
# if @HAVE_CRTDEFS_H@
|
||||||
|
# include <crtdefs.h>
|
||||||
|
# else
|
||||||
|
# include <stddef.h>
|
||||||
|
# endif
|
||||||
typedef unsigned int rpl_wint_t;
|
typedef unsigned int rpl_wint_t;
|
||||||
# undef wint_t
|
# undef wint_t
|
||||||
# define wint_t rpl_wint_t
|
# define wint_t rpl_wint_t
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ typedef size_t __xalloc_count_type;
|
||||||
#if 7 <= __GNUC__
|
#if 7 <= __GNUC__
|
||||||
# define xalloc_oversized(n, s) \
|
# define xalloc_oversized(n, s) \
|
||||||
__builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1)
|
__builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1)
|
||||||
#elif 5 <= __GNUC__ && !__STRICT_ANSI__
|
#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__
|
||||||
# define xalloc_oversized(n, s) \
|
# define xalloc_oversized(n, s) \
|
||||||
(__builtin_constant_p (n) && __builtin_constant_p (s) \
|
(__builtin_constant_p (n) && __builtin_constant_p (s) \
|
||||||
? __xalloc_oversized (n, s) \
|
? __xalloc_oversized (n, s) \
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,8 @@ x2nrealloc (void *p, size_t *pn, size_t s)
|
||||||
n = DEFAULT_MXFAST / s;
|
n = DEFAULT_MXFAST / s;
|
||||||
n += !n;
|
n += !n;
|
||||||
}
|
}
|
||||||
|
if (xalloc_oversized (n, s))
|
||||||
|
xalloc_die ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
31
m4/eealloc.m4
Normal file
31
m4/eealloc.m4
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# eealloc.m4 serial 3
|
||||||
|
dnl Copyright (C) 2003, 2009-2017 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_EEALLOC],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_EEMALLOC])
|
||||||
|
AC_REQUIRE([gl_EEREALLOC])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_EEMALLOC],
|
||||||
|
[
|
||||||
|
_AC_FUNC_MALLOC_IF(
|
||||||
|
[gl_cv_func_malloc_0_nonnull=1],
|
||||||
|
[gl_cv_func_malloc_0_nonnull=0])
|
||||||
|
AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull],
|
||||||
|
[If malloc(0) is != NULL, define this to 1. Otherwise define this
|
||||||
|
to 0.])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_EEREALLOC],
|
||||||
|
[
|
||||||
|
_AC_FUNC_REALLOC_IF(
|
||||||
|
[gl_cv_func_realloc_0_nonnull=1],
|
||||||
|
[gl_cv_func_realloc_0_nonnull=0])
|
||||||
|
AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull],
|
||||||
|
[If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this
|
||||||
|
to 0.])
|
||||||
|
])
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# fcntl-o.m4 serial 4
|
# fcntl-o.m4 serial 5
|
||||||
dnl Copyright (C) 2006, 2009-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2006, 2009-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -18,6 +18,7 @@ AC_DEFUN([gl_FCNTL_O_FLAGS],
|
||||||
[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
|
[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
|
||||||
[AC_REQUIRE([AC_GNU_SOURCE])])
|
[AC_REQUIRE([AC_GNU_SOURCE])])
|
||||||
|
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
AC_CHECK_HEADERS_ONCE([unistd.h])
|
AC_CHECK_HEADERS_ONCE([unistd.h])
|
||||||
AC_CHECK_FUNCS_ONCE([symlink])
|
AC_CHECK_FUNCS_ONCE([symlink])
|
||||||
AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
|
AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
|
||||||
|
|
@ -116,7 +117,13 @@ AC_DEFUN([gl_FCNTL_O_FLAGS],
|
||||||
68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
|
68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
|
||||||
*) gl_cv_header_working_fcntl_h='no';;
|
*) gl_cv_header_working_fcntl_h='no';;
|
||||||
esac],
|
esac],
|
||||||
[gl_cv_header_working_fcntl_h=cross-compiling])])
|
[case "$host_os" in
|
||||||
|
# Guess 'no' on native Windows.
|
||||||
|
mingw*) gl_cv_header_working_fcntl_h='no' ;;
|
||||||
|
*) gl_cv_header_working_fcntl_h=cross-compiling ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
case $gl_cv_header_working_fcntl_h in #(
|
case $gl_cv_header_working_fcntl_h in #(
|
||||||
*O_NOATIME* | no | cross-compiling) ac_val=0;; #(
|
*O_NOATIME* | no | cross-compiling) ac_val=0;; #(
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# float_h.m4 serial 9
|
# float_h.m4 serial 11
|
||||||
dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -14,7 +14,7 @@ AC_DEFUN([gl_FLOAT_H],
|
||||||
aix* | beos* | openbsd* | mirbsd* | irix*)
|
aix* | beos* | openbsd* | mirbsd* | irix*)
|
||||||
FLOAT_H=float.h
|
FLOAT_H=float.h
|
||||||
;;
|
;;
|
||||||
freebsd*)
|
freebsd* | dragonfly*)
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
i[34567]86 )
|
i[34567]86 )
|
||||||
|
|
@ -42,7 +42,7 @@ changequote([,])dnl
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
aix* | freebsd* | linux*)
|
aix* | freebsd* | dragonfly* | linux*)
|
||||||
if test -n "$FLOAT_H"; then
|
if test -n "$FLOAT_H"; then
|
||||||
REPLACE_FLOAT_LDBL=1
|
REPLACE_FLOAT_LDBL=1
|
||||||
fi
|
fi
|
||||||
|
|
@ -76,7 +76,9 @@ int main ()
|
||||||
[gl_cv_func_itold_works="guessing no"],
|
[gl_cv_func_itold_works="guessing no"],
|
||||||
[gl_cv_func_itold_works="guessing yes"])
|
[gl_cv_func_itold_works="guessing yes"])
|
||||||
;;
|
;;
|
||||||
*) gl_cv_func_itold_works="guessing yes" ;;
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_itold_works="guessing yes" ;;
|
||||||
|
*) gl_cv_func_itold_works="guessing yes" ;;
|
||||||
esac
|
esac
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
|
||||||
29
m4/getopt.m4
29
m4/getopt.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# getopt.m4 serial 44
|
# getopt.m4 serial 46
|
||||||
dnl Copyright (C) 2002-2006, 2008-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002-2006, 2008-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -32,9 +32,16 @@ AC_DEFUN([gl_FUNC_GETOPT_POSIX],
|
||||||
# getopt_long_only.
|
# getopt_long_only.
|
||||||
AC_DEFUN([gl_FUNC_GETOPT_GNU],
|
AC_DEFUN([gl_FUNC_GETOPT_GNU],
|
||||||
[
|
[
|
||||||
|
dnl Set the variable gl_getopt_required, so that all invocations of
|
||||||
|
dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file
|
||||||
|
dnl will check for getopt with GNU extensions.
|
||||||
|
dnl This means that if one gnulib-tool invocation requests getopt-posix
|
||||||
|
dnl and another gnulib-tool invocation requests getopt-gnu, it is as if
|
||||||
|
dnl both had requested getopt-gnu.
|
||||||
m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
|
m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
|
||||||
|
|
||||||
AC_REQUIRE([gl_FUNC_GETOPT_POSIX])
|
dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically
|
||||||
|
dnl done through the module dependency getopt-gnu -> getopt-posix.
|
||||||
])
|
])
|
||||||
|
|
||||||
# Determine whether to replace the entire getopt facility.
|
# Determine whether to replace the entire getopt facility.
|
||||||
|
|
@ -354,15 +361,19 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
|
|
||||||
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
|
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
|
||||||
[
|
[
|
||||||
GETOPT_H=getopt.h
|
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
|
||||||
|
if test $ac_cv_header_sys_cdefs_h = yes; then
|
||||||
|
HAVE_SYS_CDEFS_H=1
|
||||||
|
else
|
||||||
|
HAVE_SYS_CDEFS_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SYS_CDEFS_H])
|
||||||
|
|
||||||
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
|
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
|
||||||
[Define to rpl_ if the getopt replacement functions and variables
|
[Define to rpl_ if the getopt replacement functions and variables
|
||||||
should be used.])
|
should be used.])
|
||||||
|
GETOPT_H=getopt.h
|
||||||
|
GETOPT_CDEFS_H=getopt-cdefs.h
|
||||||
AC_SUBST([GETOPT_H])
|
AC_SUBST([GETOPT_H])
|
||||||
])
|
AC_SUBST([GETOPT_CDEFS_H])
|
||||||
|
|
||||||
# Prerequisites of lib/getopt*.
|
|
||||||
AC_DEFUN([gl_PREREQ_GETOPT],
|
|
||||||
[
|
|
||||||
AC_CHECK_DECLS_ONCE([getenv])
|
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# serial 21
|
# serial 24
|
||||||
|
|
||||||
# Copyright (C) 2001-2003, 2005, 2007, 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2003, 2005, 2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
|
|
@ -9,9 +9,10 @@ dnl From Jim Meyering.
|
||||||
|
|
||||||
AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
|
AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([AC_C_RESTRICT])
|
|
||||||
AC_REQUIRE([gl_HEADER_SYS_TIME_H])
|
|
||||||
AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
|
AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
|
||||||
|
AC_REQUIRE([AC_C_RESTRICT])
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_TIME_H])
|
||||||
AC_CHECK_FUNCS_ONCE([gettimeofday])
|
AC_CHECK_FUNCS_ONCE([gettimeofday])
|
||||||
|
|
||||||
gl_gettimeofday_timezone=void
|
gl_gettimeofday_timezone=void
|
||||||
|
|
@ -54,19 +55,11 @@ int gettimeofday (struct timeval *restrict, struct timezone *restrict);
|
||||||
if test $REPLACE_STRUCT_TIMEVAL = 1; then
|
if test $REPLACE_STRUCT_TIMEVAL = 1; then
|
||||||
REPLACE_GETTIMEOFDAY=1
|
REPLACE_GETTIMEOFDAY=1
|
||||||
fi
|
fi
|
||||||
m4_ifdef([gl_FUNC_TZSET_CLOBBER], [
|
dnl On mingw, the original gettimeofday has only a precision of 15.6
|
||||||
gl_FUNC_TZSET_CLOBBER
|
dnl milliseconds. So override it.
|
||||||
case "$gl_cv_func_tzset_clobber" in
|
case "$host_os" in
|
||||||
*yes)
|
mingw*) REPLACE_GETTIMEOFDAY=1 ;;
|
||||||
REPLACE_GETTIMEOFDAY=1
|
esac
|
||||||
gl_GETTIMEOFDAY_REPLACE_LOCALTIME
|
|
||||||
AC_DEFINE([tzset], [rpl_tzset],
|
|
||||||
[Define to rpl_tzset if the wrapper function should be used.])
|
|
||||||
AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1],
|
|
||||||
[Define if tzset clobbers localtime's static buffer.])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
fi
|
fi
|
||||||
AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
|
AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
|
||||||
[Define this to 'void' or 'struct timezone' to match the system's
|
[Define this to 'void' or 'struct timezone' to match the system's
|
||||||
|
|
@ -85,6 +78,7 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([gl_HEADER_SYS_TIME_H])
|
AC_REQUIRE([gl_HEADER_SYS_TIME_H])
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
|
AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer],
|
AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer],
|
||||||
[gl_cv_func_gettimeofday_clobber],
|
[gl_cv_func_gettimeofday_clobber],
|
||||||
|
|
@ -111,6 +105,8 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
# Guess all is fine on glibc systems.
|
# Guess all is fine on glibc systems.
|
||||||
*-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
|
*-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_gettimeofday_clobber="guessing yes" ;;
|
*) gl_cv_func_gettimeofday_clobber="guessing yes" ;;
|
||||||
esac
|
esac
|
||||||
|
|
@ -119,20 +115,12 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
||||||
case "$gl_cv_func_gettimeofday_clobber" in
|
case "$gl_cv_func_gettimeofday_clobber" in
|
||||||
*yes)
|
*yes)
|
||||||
REPLACE_GETTIMEOFDAY=1
|
REPLACE_GETTIMEOFDAY=1
|
||||||
gl_GETTIMEOFDAY_REPLACE_LOCALTIME
|
|
||||||
AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1],
|
AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1],
|
||||||
[Define if gettimeofday clobbers the localtime buffer.])
|
[Define if gettimeofday clobbers the localtime buffer.])
|
||||||
|
gl_LOCALTIME_BUFFER_NEEDED
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [
|
|
||||||
REPLACE_GMTIME=1
|
|
||||||
REPLACE_LOCALTIME=1
|
|
||||||
])
|
|
||||||
|
|
||||||
# Prerequisites of lib/gettimeofday.c.
|
# Prerequisites of lib/gettimeofday.c.
|
||||||
AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [
|
AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:])
|
||||||
AC_CHECK_HEADERS([sys/timeb.h])
|
|
||||||
AC_CHECK_FUNCS([_ftime])
|
|
||||||
])
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# gnulib-common.m4 serial 37
|
# gnulib-common.m4 serial 38
|
||||||
dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -256,7 +256,8 @@ AC_DEFUN([gl_PROG_AR_RANLIB],
|
||||||
dnl library formats. In particular, the GNU binutils programs ar and ranlib
|
dnl library formats. In particular, the GNU binutils programs ar and ranlib
|
||||||
dnl produce libraries that work only with gcc, not with cc.
|
dnl produce libraries that work only with gcc, not with cc.
|
||||||
AC_REQUIRE([AC_PROG_CC])
|
AC_REQUIRE([AC_PROG_CC])
|
||||||
AC_BEFORE([$0], [AM_PROG_AR])
|
dnl The '][' hides this use from 'aclocal'.
|
||||||
|
AC_BEFORE([$0], [A][M_PROG_AR])
|
||||||
AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
|
AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
|
||||||
[
|
[
|
||||||
AC_EGREP_CPP([Amsterdam],
|
AC_EGREP_CPP([Amsterdam],
|
||||||
|
|
@ -288,7 +289,9 @@ Amsterdam
|
||||||
dnl __ACK__. It may seem like its easier to avoid calling the macro here,
|
dnl __ACK__. It may seem like its easier to avoid calling the macro here,
|
||||||
dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
|
dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
|
||||||
dnl default value and automake should usually know them).
|
dnl default value and automake should usually know them).
|
||||||
m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:])
|
dnl
|
||||||
|
dnl The '][' hides this use from 'aclocal'.
|
||||||
|
m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl In case the code above has not helped with setting AR/ARFLAGS, use
|
dnl In case the code above has not helped with setting AR/ARFLAGS, use
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ AC_DEFUN([gl_EARLY],
|
||||||
# Code from module extensions:
|
# Code from module extensions:
|
||||||
# Code from module extern-inline:
|
# Code from module extern-inline:
|
||||||
# Code from module fcntl-h:
|
# Code from module fcntl-h:
|
||||||
|
# Code from module filename:
|
||||||
# Code from module float:
|
# Code from module float:
|
||||||
# Code from module getopt-gnu:
|
# Code from module getopt-gnu:
|
||||||
# Code from module getopt-posix:
|
# Code from module getopt-posix:
|
||||||
|
|
@ -74,9 +75,11 @@ AC_DEFUN([gl_EARLY],
|
||||||
AC_REQUIRE([AC_SYS_LARGEFILE])
|
AC_REQUIRE([AC_SYS_LARGEFILE])
|
||||||
# Code from module limits-h:
|
# Code from module limits-h:
|
||||||
# Code from module localcharset:
|
# Code from module localcharset:
|
||||||
|
# Code from module localtime-buffer:
|
||||||
# Code from module lstat:
|
# Code from module lstat:
|
||||||
# Code from module malloc-gnu:
|
# Code from module malloc-gnu:
|
||||||
# Code from module malloc-posix:
|
# Code from module malloc-posix:
|
||||||
|
# Code from module malloca:
|
||||||
# Code from module mbrtowc:
|
# Code from module mbrtowc:
|
||||||
# Code from module mbsinit:
|
# Code from module mbsinit:
|
||||||
# Code from module memchr:
|
# Code from module memchr:
|
||||||
|
|
@ -184,19 +187,13 @@ AC_SUBST([LTALLOCA])
|
||||||
AC_LIBOBJ([itold])
|
AC_LIBOBJ([itold])
|
||||||
fi
|
fi
|
||||||
gl_FUNC_GETOPT_GNU
|
gl_FUNC_GETOPT_GNU
|
||||||
if test $REPLACE_GETOPT = 1; then
|
dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required
|
||||||
AC_LIBOBJ([getopt])
|
dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are
|
||||||
AC_LIBOBJ([getopt1])
|
dnl done in the getopt-posix module.
|
||||||
gl_PREREQ_GETOPT
|
|
||||||
dnl Arrange for unistd.h to include getopt.h.
|
|
||||||
GNULIB_GL_UNISTD_H_GETOPT=1
|
|
||||||
fi
|
|
||||||
AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
|
|
||||||
gl_FUNC_GETOPT_POSIX
|
gl_FUNC_GETOPT_POSIX
|
||||||
if test $REPLACE_GETOPT = 1; then
|
if test $REPLACE_GETOPT = 1; then
|
||||||
AC_LIBOBJ([getopt])
|
AC_LIBOBJ([getopt])
|
||||||
AC_LIBOBJ([getopt1])
|
AC_LIBOBJ([getopt1])
|
||||||
gl_PREREQ_GETOPT
|
|
||||||
dnl Arrange for unistd.h to include getopt.h.
|
dnl Arrange for unistd.h to include getopt.h.
|
||||||
GNULIB_GL_UNISTD_H_GETOPT=1
|
GNULIB_GL_UNISTD_H_GETOPT=1
|
||||||
fi
|
fi
|
||||||
|
|
@ -222,6 +219,8 @@ AC_SUBST([LTALLOCA])
|
||||||
gl_LOCALCHARSET
|
gl_LOCALCHARSET
|
||||||
LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
|
LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
|
||||||
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
|
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
|
||||||
|
AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
|
||||||
|
AC_LIBOBJ([localtime-buffer])
|
||||||
gl_FUNC_LSTAT
|
gl_FUNC_LSTAT
|
||||||
if test $REPLACE_LSTAT = 1; then
|
if test $REPLACE_LSTAT = 1; then
|
||||||
AC_LIBOBJ([lstat])
|
AC_LIBOBJ([lstat])
|
||||||
|
|
@ -238,6 +237,7 @@ AC_SUBST([LTALLOCA])
|
||||||
AC_LIBOBJ([malloc])
|
AC_LIBOBJ([malloc])
|
||||||
fi
|
fi
|
||||||
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
|
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
|
||||||
|
gl_MALLOCA
|
||||||
gl_FUNC_MBRTOWC
|
gl_FUNC_MBRTOWC
|
||||||
if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
|
if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
|
||||||
AC_LIBOBJ([mbrtowc])
|
AC_LIBOBJ([mbrtowc])
|
||||||
|
|
@ -283,6 +283,7 @@ AC_SUBST([LTALLOCA])
|
||||||
if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
|
if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
|
||||||
AC_LIBOBJ([msvc-nothrow])
|
AC_LIBOBJ([msvc-nothrow])
|
||||||
fi
|
fi
|
||||||
|
gl_MODULE_INDICATOR([msvc-nothrow])
|
||||||
gl_MULTIARCH
|
gl_MULTIARCH
|
||||||
gl_PATHMAX
|
gl_PATHMAX
|
||||||
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
|
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
|
||||||
|
|
@ -311,6 +312,11 @@ AC_SUBST([LTALLOCA])
|
||||||
gl_FUNC_STAT
|
gl_FUNC_STAT
|
||||||
if test $REPLACE_STAT = 1; then
|
if test $REPLACE_STAT = 1; then
|
||||||
AC_LIBOBJ([stat])
|
AC_LIBOBJ([stat])
|
||||||
|
case "$host_os" in
|
||||||
|
mingw*)
|
||||||
|
AC_LIBOBJ([stat-w32])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
gl_PREREQ_STAT
|
gl_PREREQ_STAT
|
||||||
fi
|
fi
|
||||||
gl_SYS_STAT_MODULE_INDICATOR([stat])
|
gl_SYS_STAT_MODULE_INDICATOR([stat])
|
||||||
|
|
@ -527,12 +533,10 @@ AC_DEFUN([gltests_LIBSOURCES], [
|
||||||
# This macro records the list of files which have been installed by
|
# This macro records the list of files which have been installed by
|
||||||
# gnulib-tool and may be removed by future gnulib-tool invocations.
|
# gnulib-tool and may be removed by future gnulib-tool invocations.
|
||||||
AC_DEFUN([gl_FILE_LIST], [
|
AC_DEFUN([gl_FILE_LIST], [
|
||||||
build-aux/snippet/_Noreturn.h
|
lib/_Noreturn.h
|
||||||
build-aux/snippet/arg-nonnull.h
|
|
||||||
build-aux/snippet/c++defs.h
|
|
||||||
build-aux/snippet/warn-on-use.h
|
|
||||||
lib/alloca.c
|
lib/alloca.c
|
||||||
lib/alloca.in.h
|
lib/alloca.in.h
|
||||||
|
lib/arg-nonnull.h
|
||||||
lib/argmatch.c
|
lib/argmatch.c
|
||||||
lib/argmatch.h
|
lib/argmatch.h
|
||||||
lib/argp-ba.c
|
lib/argp-ba.c
|
||||||
|
|
@ -550,6 +554,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/argp.h
|
lib/argp.h
|
||||||
lib/asnprintf.c
|
lib/asnprintf.c
|
||||||
lib/basename-lgpl.c
|
lib/basename-lgpl.c
|
||||||
|
lib/c++defs.h
|
||||||
lib/c-ctype.c
|
lib/c-ctype.c
|
||||||
lib/c-ctype.h
|
lib/c-ctype.h
|
||||||
lib/c-strcase.h
|
lib/c-strcase.h
|
||||||
|
|
@ -566,9 +571,15 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/exitfail.c
|
lib/exitfail.c
|
||||||
lib/exitfail.h
|
lib/exitfail.h
|
||||||
lib/fcntl.in.h
|
lib/fcntl.in.h
|
||||||
|
lib/filename.h
|
||||||
lib/float+.h
|
lib/float+.h
|
||||||
lib/float.c
|
lib/float.c
|
||||||
lib/float.in.h
|
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.c
|
||||||
lib/getopt.in.h
|
lib/getopt.in.h
|
||||||
lib/getopt1.c
|
lib/getopt1.c
|
||||||
|
|
@ -585,8 +596,13 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/limits.in.h
|
lib/limits.in.h
|
||||||
lib/localcharset.c
|
lib/localcharset.c
|
||||||
lib/localcharset.h
|
lib/localcharset.h
|
||||||
|
lib/localtime-buffer.c
|
||||||
|
lib/localtime-buffer.h
|
||||||
lib/lstat.c
|
lib/lstat.c
|
||||||
lib/malloc.c
|
lib/malloc.c
|
||||||
|
lib/malloca.c
|
||||||
|
lib/malloca.h
|
||||||
|
lib/malloca.valgrind
|
||||||
lib/mbrtowc.c
|
lib/mbrtowc.c
|
||||||
lib/mbsinit.c
|
lib/mbsinit.c
|
||||||
lib/memchr.c
|
lib/memchr.c
|
||||||
|
|
@ -616,6 +632,8 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/secure_getenv.c
|
lib/secure_getenv.c
|
||||||
lib/size_max.h
|
lib/size_max.h
|
||||||
lib/sleep.c
|
lib/sleep.c
|
||||||
|
lib/stat-w32.c
|
||||||
|
lib/stat-w32.h
|
||||||
lib/stat.c
|
lib/stat.c
|
||||||
lib/stdalign.in.h
|
lib/stdalign.in.h
|
||||||
lib/stdbool.in.h
|
lib/stdbool.in.h
|
||||||
|
|
@ -652,6 +670,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/vasnprintf.h
|
lib/vasnprintf.h
|
||||||
lib/verify.h
|
lib/verify.h
|
||||||
lib/vsnprintf.c
|
lib/vsnprintf.c
|
||||||
|
lib/warn-on-use.h
|
||||||
lib/wchar.in.h
|
lib/wchar.in.h
|
||||||
lib/wctype-h.c
|
lib/wctype-h.c
|
||||||
lib/wctype.in.h
|
lib/wctype.in.h
|
||||||
|
|
@ -669,6 +688,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
m4/configmake.m4
|
m4/configmake.m4
|
||||||
m4/dirname.m4
|
m4/dirname.m4
|
||||||
m4/double-slash-root.m4
|
m4/double-slash-root.m4
|
||||||
|
m4/eealloc.m4
|
||||||
m4/errno_h.m4
|
m4/errno_h.m4
|
||||||
m4/error.m4
|
m4/error.m4
|
||||||
m4/exponentd.m4
|
m4/exponentd.m4
|
||||||
|
|
@ -693,9 +713,11 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
m4/locale-fr.m4
|
m4/locale-fr.m4
|
||||||
m4/locale-ja.m4
|
m4/locale-ja.m4
|
||||||
m4/locale-zh.m4
|
m4/locale-zh.m4
|
||||||
|
m4/localtime-buffer.m4
|
||||||
m4/longlong.m4
|
m4/longlong.m4
|
||||||
m4/lstat.m4
|
m4/lstat.m4
|
||||||
m4/malloc.m4
|
m4/malloc.m4
|
||||||
|
m4/malloca.m4
|
||||||
m4/math_h.m4
|
m4/math_h.m4
|
||||||
m4/mbrtowc.m4
|
m4/mbrtowc.m4
|
||||||
m4/mbsinit.m4
|
m4/mbsinit.m4
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# include_next.m4 serial 23
|
# include_next.m4 serial 24
|
||||||
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -6,7 +6,8 @@ dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
dnl From Paul Eggert and Derek Price.
|
dnl From Paul Eggert and Derek Price.
|
||||||
|
|
||||||
dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
|
dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER,
|
||||||
|
dnl and PRAGMA_COLUMNS.
|
||||||
dnl
|
dnl
|
||||||
dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
|
dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
|
||||||
dnl 'include' otherwise.
|
dnl 'include' otherwise.
|
||||||
|
|
|
||||||
|
|
@ -126,9 +126,24 @@ AC_DEFUN([gl_LARGEFILE],
|
||||||
else
|
else
|
||||||
WINDOWS_64_BIT_OFF_T=0
|
WINDOWS_64_BIT_OFF_T=0
|
||||||
fi
|
fi
|
||||||
dnl But all native Windows platforms (including mingw64) have a 32-bit
|
dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat'
|
||||||
dnl st_size member in 'struct stat'.
|
dnl to 'struct _stat32i64' or 'struct _stat64' (depending on
|
||||||
WINDOWS_64_BIT_ST_SIZE=1
|
dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member.
|
||||||
|
AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64],
|
||||||
|
[AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[#include <sys/types.h>
|
||||||
|
struct stat buf;
|
||||||
|
int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1];
|
||||||
|
]],
|
||||||
|
[[]])],
|
||||||
|
[gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no])
|
||||||
|
])
|
||||||
|
if test $gl_cv_member_st_size_64 = no; then
|
||||||
|
WINDOWS_64_BIT_ST_SIZE=1
|
||||||
|
else
|
||||||
|
WINDOWS_64_BIT_ST_SIZE=0
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
dnl Nothing to do on gnulib's side.
|
dnl Nothing to do on gnulib's side.
|
||||||
|
|
|
||||||
21
m4/localtime-buffer.m4
Normal file
21
m4/localtime-buffer.m4
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# localtime-buffer.m4 serial 1
|
||||||
|
dnl Copyright (C) 2017 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_LOCALTIME_BUFFER_DEFAULTS],
|
||||||
|
[
|
||||||
|
NEED_LOCALTIME_BUFFER=0
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Macro invoked from other modules, to signal that the compilation of
|
||||||
|
dnl module 'localtime-buffer' is needed.
|
||||||
|
AC_DEFUN([gl_LOCALTIME_BUFFER_NEEDED],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
|
||||||
|
AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
|
||||||
|
NEED_LOCALTIME_BUFFER=1
|
||||||
|
REPLACE_GMTIME=1
|
||||||
|
REPLACE_LOCALTIME=1
|
||||||
|
])
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# serial 27
|
# serial 29
|
||||||
|
|
||||||
# Copyright (C) 1997-2001, 2003-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2001, 2003-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
|
|
@ -33,6 +33,7 @@ AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
|
||||||
[
|
[
|
||||||
dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
|
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.
|
dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
|
AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
|
||||||
[gl_cv_func_lstat_dereferences_slashed_symlink],
|
[gl_cv_func_lstat_dereferences_slashed_symlink],
|
||||||
[rm -f conftest.sym conftest.file
|
[rm -f conftest.sym conftest.file
|
||||||
|
|
@ -54,6 +55,9 @@ AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
|
||||||
*-gnu*)
|
*-gnu*)
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
|
gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
|
||||||
|
mingw*)
|
||||||
|
# Guess no on native Windows.
|
||||||
|
gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
|
||||||
*)
|
*)
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
|
gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
|
||||||
|
|
|
||||||
15
m4/malloca.m4
Normal file
15
m4/malloca.m4
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# malloca.m4 serial 1
|
||||||
|
dnl Copyright (C) 2003-2004, 2006-2007, 2009-2017 Free Software Foundation,
|
||||||
|
dnl Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_MALLOCA],
|
||||||
|
[
|
||||||
|
dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables
|
||||||
|
dnl @ALLOCA@ and @LTALLOCA@.
|
||||||
|
dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies.
|
||||||
|
AC_REQUIRE([gl_EEMALLOC])
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
])
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# mbrtowc.m4 serial 27 -*- coding: utf-8 -*-
|
# mbrtowc.m4 serial 29 -*- coding: utf-8 -*-
|
||||||
dnl Copyright (C) 2001-2002, 2004-2005, 2008-2017 Free Software Foundation,
|
dnl Copyright (C) 2001-2002, 2004-2005, 2008-2017 Free Software Foundation,
|
||||||
dnl Inc.
|
dnl Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
|
@ -563,9 +563,11 @@ AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
|
||||||
dnl is present.
|
dnl is present.
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
# Guess no on AIX and glibc systems.
|
# Guess no on AIX and glibc systems.
|
||||||
aix* | *-gnu*)
|
aix* | *-gnu*)
|
||||||
gl_cv_func_mbrtowc_empty_input="guessing no" ;;
|
gl_cv_func_mbrtowc_empty_input="guessing no" ;;
|
||||||
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
|
||||||
*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
|
*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
changequote([,])dnl
|
||||||
|
|
@ -592,6 +594,7 @@ dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932
|
||||||
|
|
||||||
AC_DEFUN([gl_MBRTOWC_C_LOCALE],
|
AC_DEFUN([gl_MBRTOWC_C_LOCALE],
|
||||||
[
|
[
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
AC_CACHE_CHECK([whether the C locale is free of encoding errors],
|
AC_CACHE_CHECK([whether the C locale is free of encoding errors],
|
||||||
[gl_cv_C_locale_sans_EILSEQ],
|
[gl_cv_C_locale_sans_EILSEQ],
|
||||||
[
|
[
|
||||||
|
|
@ -622,7 +625,12 @@ AC_DEFUN([gl_MBRTOWC_C_LOCALE],
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_C_locale_sans_EILSEQ=yes],
|
[gl_cv_C_locale_sans_EILSEQ=yes],
|
||||||
[gl_cv_C_locale_sans_EILSEQ=no],
|
[gl_cv_C_locale_sans_EILSEQ=no],
|
||||||
[:])])
|
[case "$host_os" in
|
||||||
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
# Prerequisites of lib/mbrtowc.c.
|
# Prerequisites of lib/mbrtowc.c.
|
||||||
|
|
@ -639,7 +647,7 @@ AC_DEFUN([AC_FUNC_MBRTOWC],
|
||||||
[
|
[
|
||||||
dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
|
dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
|
||||||
AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
|
AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
|
||||||
gl_cv_func_mbrtowc,
|
[gl_cv_func_mbrtowc],
|
||||||
[AC_LINK_IFELSE(
|
[AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
|
[[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
|
||||||
|
|
@ -655,8 +663,8 @@ AC_DEFUN([AC_FUNC_MBRTOWC],
|
||||||
size_t n = 1;
|
size_t n = 1;
|
||||||
mbstate_t state;
|
mbstate_t state;
|
||||||
return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
|
return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
|
||||||
gl_cv_func_mbrtowc=yes,
|
[gl_cv_func_mbrtowc=yes],
|
||||||
gl_cv_func_mbrtowc=no)])
|
[gl_cv_func_mbrtowc=no])])
|
||||||
if test $gl_cv_func_mbrtowc = yes; then
|
if test $gl_cv_func_mbrtowc = yes; then
|
||||||
AC_DEFINE([HAVE_MBRTOWC], [1],
|
AC_DEFINE([HAVE_MBRTOWC], [1],
|
||||||
[Define to 1 if mbrtowc and mbstate_t are properly declared.])
|
[Define to 1 if mbrtowc and mbstate_t are properly declared.])
|
||||||
|
|
|
||||||
25
m4/memchr.m4
25
m4/memchr.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# memchr.m4 serial 12
|
# memchr.m4 serial 13
|
||||||
dnl Copyright (C) 2002-2004, 2009-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002-2004, 2009-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -6,6 +6,8 @@ dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
|
AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
|
||||||
[
|
[
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
|
|
||||||
dnl Check for prerequisites for memory fence checks.
|
dnl Check for prerequisites for memory fence checks.
|
||||||
gl_FUNC_MMAP_ANON
|
gl_FUNC_MMAP_ANON
|
||||||
AC_CHECK_HEADERS_ONCE([sys/mman.h])
|
AC_CHECK_HEADERS_ONCE([sys/mman.h])
|
||||||
|
|
@ -73,12 +75,21 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
|
||||||
result |= 4;
|
result |= 4;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
|
]])],
|
||||||
[dnl Be pessimistic for now.
|
[gl_cv_func_memchr_works=yes],
|
||||||
gl_cv_func_memchr_works="guessing no"])])
|
[gl_cv_func_memchr_works=no],
|
||||||
if test "$gl_cv_func_memchr_works" != yes; then
|
[case "$host_os" in
|
||||||
REPLACE_MEMCHR=1
|
# Guess yes on native Windows.
|
||||||
fi
|
mingw*) gl_cv_func_memchr_works="guessing yes" ;;
|
||||||
|
# Be pessimistic for now.
|
||||||
|
*) gl_cv_func_memchr_works="guessing no" ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
])
|
||||||
|
case "$gl_cv_func_memchr_works" in
|
||||||
|
*yes) ;;
|
||||||
|
*) REPLACE_MEMCHR=1 ;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#serial 23
|
#serial 24
|
||||||
|
|
||||||
# Copyright (C) 2001, 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001, 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
|
|
@ -59,6 +59,8 @@ AC_DEFUN([gl_FUNC_MKSTEMP],
|
||||||
[case "$host_os" in
|
[case "$host_os" in
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_working_mkstemp="guessing yes" ;;
|
*-gnu*) gl_cv_func_working_mkstemp="guessing yes" ;;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_working_mkstemp="guessing no" ;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_working_mkstemp="guessing no" ;;
|
*) gl_cv_func_working_mkstemp="guessing no" ;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
143
m4/printf.m4
143
m4/printf.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# printf.m4 serial 52
|
# printf.m4 serial 55
|
||||||
dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -58,8 +58,8 @@ int main ()
|
||||||
[gl_cv_func_printf_sizes_c99=yes],
|
[gl_cv_func_printf_sizes_c99=yes],
|
||||||
[gl_cv_func_printf_sizes_c99=no],
|
[gl_cv_func_printf_sizes_c99=no],
|
||||||
[
|
[
|
||||||
changequote(,)dnl
|
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
|
changequote(,)dnl
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
*-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
||||||
# Guess yes on FreeBSD >= 5.
|
# Guess yes on FreeBSD >= 5.
|
||||||
|
|
@ -79,10 +79,19 @@ changequote(,)dnl
|
||||||
netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
||||||
gl_cv_func_printf_sizes_c99="guessing no";;
|
gl_cv_func_printf_sizes_c99="guessing no";;
|
||||||
netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
||||||
|
changequote([,])dnl
|
||||||
|
# Guess yes on MSVC, no on mingw.
|
||||||
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_printf_sizes_c99="guessing yes"],
|
||||||
|
[gl_cv_func_printf_sizes_c99="guessing no"])
|
||||||
|
;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_sizes_c99="guessing no";;
|
*) gl_cv_func_printf_sizes_c99="guessing no";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -122,14 +131,19 @@ int main ()
|
||||||
}]])],
|
}]])],
|
||||||
[gl_cv_func_printf_long_double=yes],
|
[gl_cv_func_printf_long_double=yes],
|
||||||
[gl_cv_func_printf_long_double=no],
|
[gl_cv_func_printf_long_double=no],
|
||||||
[
|
[case "$host_os" in
|
||||||
changequote(,)dnl
|
beos*) gl_cv_func_printf_long_double="guessing no";;
|
||||||
case "$host_os" in
|
# Guess yes on MSVC, no on mingw.
|
||||||
beos*) gl_cv_func_printf_long_double="guessing no";;
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
|
#ifdef _MSC_VER
|
||||||
*) gl_cv_func_printf_long_double="guessing yes";;
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_printf_long_double="guessing yes"],
|
||||||
|
[gl_cv_func_printf_long_double="guessing no"])
|
||||||
|
;;
|
||||||
|
*) gl_cv_func_printf_long_double="guessing yes";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -217,8 +231,8 @@ int main ()
|
||||||
[gl_cv_func_printf_infinite=yes],
|
[gl_cv_func_printf_infinite=yes],
|
||||||
[gl_cv_func_printf_infinite=no],
|
[gl_cv_func_printf_infinite=no],
|
||||||
[
|
[
|
||||||
changequote(,)dnl
|
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
|
changequote(,)dnl
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_printf_infinite="guessing yes";;
|
*-gnu*) gl_cv_func_printf_infinite="guessing yes";;
|
||||||
# Guess yes on FreeBSD >= 6.
|
# Guess yes on FreeBSD >= 6.
|
||||||
|
|
@ -236,10 +250,19 @@ changequote(,)dnl
|
||||||
netbsd*) gl_cv_func_printf_infinite="guessing yes";;
|
netbsd*) gl_cv_func_printf_infinite="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_printf_infinite="guessing yes";;
|
beos*) gl_cv_func_printf_infinite="guessing yes";;
|
||||||
|
changequote([,])dnl
|
||||||
|
# Guess yes on MSVC, no on mingw.
|
||||||
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_printf_infinite="guessing yes"],
|
||||||
|
[gl_cv_func_printf_infinite="guessing no"])
|
||||||
|
;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_infinite="guessing no";;
|
*) gl_cv_func_printf_infinite="guessing no";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -419,13 +442,12 @@ int main ()
|
||||||
}]])],
|
}]])],
|
||||||
[gl_cv_func_printf_infinite_long_double=yes],
|
[gl_cv_func_printf_infinite_long_double=yes],
|
||||||
[gl_cv_func_printf_infinite_long_double=no],
|
[gl_cv_func_printf_infinite_long_double=no],
|
||||||
[
|
[case "$host_cpu" in
|
||||||
changequote(,)dnl
|
|
||||||
case "$host_cpu" in
|
|
||||||
# Guess no on ia64, x86_64, i386.
|
# Guess no on ia64, x86_64, i386.
|
||||||
ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
|
ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||||
*)
|
*)
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
|
changequote(,)dnl
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
*-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
||||||
# Guess yes on FreeBSD >= 6.
|
# Guess yes on FreeBSD >= 6.
|
||||||
|
|
@ -434,12 +456,21 @@ changequote(,)dnl
|
||||||
# Guess yes on HP-UX >= 11.
|
# Guess yes on HP-UX >= 11.
|
||||||
hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||||
hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
||||||
|
changequote([,])dnl
|
||||||
|
# Guess yes on MSVC, no on mingw.
|
||||||
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_printf_infinite_long_double="guessing yes"],
|
||||||
|
[gl_cv_func_printf_infinite_long_double="guessing no"])
|
||||||
|
;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
;;
|
;;
|
||||||
|
|
@ -489,6 +520,13 @@ int main ()
|
||||||
&& strcmp (buf, "0x6.0ap-2 33") != 0
|
&& strcmp (buf, "0x6.0ap-2 33") != 0
|
||||||
&& strcmp (buf, "0xc.14p-3 33") != 0))
|
&& strcmp (buf, "0xc.14p-3 33") != 0))
|
||||||
result |= 4;
|
result |= 4;
|
||||||
|
/* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */
|
||||||
|
if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0
|
||||||
|
|| (strcmp (buf, "0x2p+0 33") != 0
|
||||||
|
&& strcmp (buf, "0x3p-1 33") != 0
|
||||||
|
&& strcmp (buf, "0x6p-2 33") != 0
|
||||||
|
&& strcmp (buf, "0xcp-3 33") != 0))
|
||||||
|
result |= 4;
|
||||||
/* This catches a FreeBSD 6.1 bug. See
|
/* This catches a FreeBSD 6.1 bug. See
|
||||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||||
if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
|
if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
|
||||||
|
|
@ -528,6 +566,8 @@ int main ()
|
||||||
[gl_cv_func_printf_directive_a="guessing yes"],
|
[gl_cv_func_printf_directive_a="guessing yes"],
|
||||||
[gl_cv_func_printf_directive_a="guessing no"])
|
[gl_cv_func_printf_directive_a="guessing no"])
|
||||||
;;
|
;;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_printf_directive_a="guessing no";;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_directive_a="guessing no";;
|
*) gl_cv_func_printf_directive_a="guessing no";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -570,8 +610,8 @@ int main ()
|
||||||
[gl_cv_func_printf_directive_f=yes],
|
[gl_cv_func_printf_directive_f=yes],
|
||||||
[gl_cv_func_printf_directive_f=no],
|
[gl_cv_func_printf_directive_f=no],
|
||||||
[
|
[
|
||||||
changequote(,)dnl
|
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
|
changequote(,)dnl
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
|
*-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||||
# Guess yes on FreeBSD >= 6.
|
# Guess yes on FreeBSD >= 6.
|
||||||
|
|
@ -581,12 +621,21 @@ changequote(,)dnl
|
||||||
darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
|
darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
|
||||||
darwin*) gl_cv_func_printf_directive_f="guessing yes";;
|
darwin*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||||
# Guess yes on Solaris >= 2.10.
|
# Guess yes on Solaris >= 2.10.
|
||||||
solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||||
solaris*) gl_cv_func_printf_sizes_c99="guessing no";;
|
solaris*) gl_cv_func_printf_directive_f="guessing no";;
|
||||||
|
changequote([,])dnl
|
||||||
|
# Guess yes on MSVC, no on mingw.
|
||||||
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_printf_directive_f="guessing yes"],
|
||||||
|
[gl_cv_func_printf_directive_f="guessing no"])
|
||||||
|
;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_directive_f="guessing no";;
|
*) gl_cv_func_printf_directive_f="guessing no";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -638,13 +687,11 @@ int main ()
|
||||||
}]])],
|
}]])],
|
||||||
[gl_cv_func_printf_directive_n=yes],
|
[gl_cv_func_printf_directive_n=yes],
|
||||||
[gl_cv_func_printf_directive_n=no],
|
[gl_cv_func_printf_directive_n=no],
|
||||||
[
|
[case "$host_os" in
|
||||||
changequote(,)dnl
|
# Guess no on native Windows.
|
||||||
case "$host_os" in
|
|
||||||
mingw*) gl_cv_func_printf_directive_n="guessing no";;
|
mingw*) gl_cv_func_printf_directive_n="guessing no";;
|
||||||
*) gl_cv_func_printf_directive_n="guessing yes";;
|
*) gl_cv_func_printf_directive_n="guessing yes";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -719,12 +766,14 @@ int main ()
|
||||||
[
|
[
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
openbsd*) gl_cv_func_printf_directive_ls="guessing no";;
|
openbsd*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
irix*) gl_cv_func_printf_directive_ls="guessing no";;
|
irix*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
solaris*) gl_cv_func_printf_directive_ls="guessing no";;
|
solaris*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
cygwin*) gl_cv_func_printf_directive_ls="guessing no";;
|
cygwin*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
|
beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||||
*) gl_cv_func_printf_directive_ls="guessing yes";;
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_printf_directive_ls="guessing yes";;
|
||||||
|
*) gl_cv_func_printf_directive_ls="guessing yes";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
changequote([,])dnl
|
||||||
])
|
])
|
||||||
|
|
@ -763,6 +812,7 @@ changequote(,)dnl
|
||||||
netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
|
netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
|
||||||
gl_cv_func_printf_positions="guessing no";;
|
gl_cv_func_printf_positions="guessing no";;
|
||||||
beos*) gl_cv_func_printf_positions="guessing no";;
|
beos*) gl_cv_func_printf_positions="guessing no";;
|
||||||
|
# Guess no on native Windows.
|
||||||
mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
|
mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
|
||||||
*) gl_cv_func_printf_positions="guessing yes";;
|
*) gl_cv_func_printf_positions="guessing yes";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -801,6 +851,7 @@ changequote(,)dnl
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
|
cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
|
||||||
netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
|
netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
|
||||||
|
# Guess no on native Windows.
|
||||||
mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
|
mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
|
||||||
*) gl_cv_func_printf_flag_grouping="guessing yes";;
|
*) gl_cv_func_printf_flag_grouping="guessing yes";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -843,6 +894,8 @@ changequote(,)dnl
|
||||||
hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
||||||
# Guess no on HP-UX 10 and older.
|
# Guess no on HP-UX 10 and older.
|
||||||
hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";;
|
hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";;
|
||||||
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
||||||
# Guess yes otherwise.
|
# Guess yes otherwise.
|
||||||
*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -886,6 +939,8 @@ changequote(,)dnl
|
||||||
*-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
|
*-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_printf_flag_zero="guessing yes";;
|
beos*) gl_cv_func_printf_flag_zero="guessing yes";;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_printf_flag_zero="guessing no";;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_printf_flag_zero="guessing no";;
|
*) gl_cv_func_printf_flag_zero="guessing no";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -1153,6 +1208,8 @@ changequote(,)dnl
|
||||||
netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -1216,9 +1273,8 @@ int main ()
|
||||||
}]])],
|
}]])],
|
||||||
[gl_cv_func_snprintf_retval_c99=yes],
|
[gl_cv_func_snprintf_retval_c99=yes],
|
||||||
[gl_cv_func_snprintf_retval_c99=no],
|
[gl_cv_func_snprintf_retval_c99=no],
|
||||||
[
|
[case "$host_os" in
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
case "$host_os" in
|
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
*-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
||||||
# Guess yes on FreeBSD >= 5.
|
# Guess yes on FreeBSD >= 5.
|
||||||
|
|
@ -1243,10 +1299,19 @@ changequote(,)dnl
|
||||||
netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
||||||
|
changequote([,])dnl
|
||||||
|
# Guess yes on MSVC, no on mingw.
|
||||||
|
mingw*) AC_EGREP_CPP([Known], [
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
Known
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[gl_cv_func_snprintf_retval_c99="guessing yes"],
|
||||||
|
[gl_cv_func_snprintf_retval_c99="guessing no"])
|
||||||
|
;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
||||||
esac
|
esac
|
||||||
changequote([,])dnl
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -1326,6 +1391,8 @@ changequote(,)dnl
|
||||||
netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_snprintf_directive_n="guessing no";;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_snprintf_directive_n="guessing no";;
|
*) gl_cv_func_snprintf_directive_n="guessing no";;
|
||||||
esac
|
esac
|
||||||
|
|
@ -1342,6 +1409,7 @@ dnl Result is gl_cv_func_snprintf_size1.
|
||||||
AC_DEFUN([gl_SNPRINTF_SIZE1],
|
AC_DEFUN([gl_SNPRINTF_SIZE1],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([AC_PROG_CC])
|
AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
AC_REQUIRE([gl_SNPRINTF_PRESENCE])
|
AC_REQUIRE([gl_SNPRINTF_PRESENCE])
|
||||||
AC_CACHE_CHECK([whether snprintf respects a size of 1],
|
AC_CACHE_CHECK([whether snprintf respects a size of 1],
|
||||||
[gl_cv_func_snprintf_size1],
|
[gl_cv_func_snprintf_size1],
|
||||||
|
|
@ -1371,7 +1439,12 @@ int main()
|
||||||
}]])],
|
}]])],
|
||||||
[gl_cv_func_snprintf_size1=yes],
|
[gl_cv_func_snprintf_size1=yes],
|
||||||
[gl_cv_func_snprintf_size1=no],
|
[gl_cv_func_snprintf_size1=no],
|
||||||
[gl_cv_func_snprintf_size1="guessing yes"])
|
[case "$host_os" in
|
||||||
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
|
||||||
|
*) gl_cv_func_snprintf_size1="guessing yes" ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
@ -1467,7 +1540,7 @@ changequote(,)dnl
|
||||||
netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
||||||
# Guess yes on BeOS.
|
# Guess yes on BeOS.
|
||||||
beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
||||||
# Guess yes on mingw.
|
# Guess yes on native Windows.
|
||||||
mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# sleep.m4 serial 7
|
# sleep.m4 serial 8
|
||||||
dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -48,6 +48,8 @@ handle_alarm (int sig)
|
||||||
[case "$host_os" in
|
[case "$host_os" in
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_sleep_works="guessing yes" ;;
|
*-gnu*) gl_cv_func_sleep_works="guessing yes" ;;
|
||||||
|
# Guess no on native Windows.
|
||||||
|
mingw*) gl_cv_func_sleep_works="guessing no" ;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_sleep_works="guessing no" ;;
|
*) gl_cv_func_sleep_works="guessing no" ;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
104
m4/stat.m4
104
m4/stat.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# serial 11
|
# serial 12
|
||||||
|
|
||||||
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
|
|
@ -8,64 +8,60 @@
|
||||||
|
|
||||||
AC_DEFUN([gl_FUNC_STAT],
|
AC_DEFUN([gl_FUNC_STAT],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
|
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
|
||||||
AC_CHECK_FUNCS_ONCE([lstat])
|
AC_CHECK_FUNCS_ONCE([lstat])
|
||||||
dnl mingw is the only known platform where stat(".") and stat("./") differ
|
case "$host_os" in
|
||||||
AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
|
mingw*)
|
||||||
[gl_cv_func_stat_dir_slash],
|
dnl On this platform, the original stat() returns st_atime, st_mtime,
|
||||||
[AC_RUN_IFELSE(
|
dnl st_ctime values that are affected by the time zone.
|
||||||
[AC_LANG_PROGRAM(
|
REPLACE_STAT=1
|
||||||
[[#include <sys/stat.h>
|
;;
|
||||||
]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])],
|
*)
|
||||||
[gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no],
|
dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
|
||||||
[case $host_os in
|
dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
|
||||||
mingw*) gl_cv_func_stat_dir_slash="guessing no";;
|
dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
|
||||||
*) gl_cv_func_stat_dir_slash="guessing yes";;
|
AC_CACHE_CHECK([whether stat handles trailing slashes on files],
|
||||||
esac])])
|
[gl_cv_func_stat_file_slash],
|
||||||
dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
|
[touch conftest.tmp
|
||||||
dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
|
# Assume that if we have lstat, we can also check symlinks.
|
||||||
dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
|
if test $ac_cv_func_lstat = yes; then
|
||||||
AC_CACHE_CHECK([whether stat handles trailing slashes on files],
|
ln -s conftest.tmp conftest.lnk
|
||||||
[gl_cv_func_stat_file_slash],
|
fi
|
||||||
[touch conftest.tmp
|
AC_RUN_IFELSE(
|
||||||
# Assume that if we have lstat, we can also check symlinks.
|
[AC_LANG_PROGRAM(
|
||||||
if test $ac_cv_func_lstat = yes; then
|
[[#include <sys/stat.h>
|
||||||
ln -s conftest.tmp conftest.lnk
|
|
||||||
fi
|
|
||||||
AC_RUN_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM(
|
|
||||||
[[#include <sys/stat.h>
|
|
||||||
]], [[int result = 0;
|
]], [[int result = 0;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (!stat ("conftest.tmp/", &st))
|
if (!stat ("conftest.tmp/", &st))
|
||||||
result |= 1;
|
result |= 1;
|
||||||
#if HAVE_LSTAT
|
#if HAVE_LSTAT
|
||||||
if (!stat ("conftest.lnk/", &st))
|
if (!stat ("conftest.lnk/", &st))
|
||||||
result |= 2;
|
result |= 2;
|
||||||
#endif
|
#endif
|
||||||
return result;
|
return result;
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
|
[gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
|
||||||
[case "$host_os" in
|
[case "$host_os" in
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
|
*-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_stat_file_slash="guessing no" ;;
|
*) gl_cv_func_stat_file_slash="guessing no" ;;
|
||||||
esac
|
esac
|
||||||
])
|
])
|
||||||
rm -f conftest.tmp conftest.lnk])
|
rm -f conftest.tmp conftest.lnk])
|
||||||
case $gl_cv_func_stat_dir_slash in
|
case $gl_cv_func_stat_file_slash in
|
||||||
*no) REPLACE_STAT=1
|
*no)
|
||||||
AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
|
REPLACE_STAT=1
|
||||||
help when passed a directory name with a trailing slash]);;
|
AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
|
||||||
esac
|
help when passed a file name with a trailing slash]);;
|
||||||
case $gl_cv_func_stat_file_slash in
|
esac
|
||||||
*no) REPLACE_STAT=1
|
;;
|
||||||
AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
|
|
||||||
help when passed a file name with a trailing slash]);;
|
|
||||||
esac
|
esac
|
||||||
])
|
])
|
||||||
|
|
||||||
# Prerequisites of lib/stat.c.
|
# Prerequisites of lib/stat.c and lib/stat-w32.c.
|
||||||
AC_DEFUN([gl_PREREQ_STAT], [:])
|
AC_DEFUN([gl_PREREQ_STAT], [
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_STAT_H])
|
||||||
|
:
|
||||||
|
])
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ AC_DEFUN([gl_STDALIGN_H],
|
||||||
|| (defined __APPLE__ && defined __MACH__ \
|
|| (defined __APPLE__ && defined __MACH__ \
|
||||||
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
||||||
: __GNUC__) \
|
: __GNUC__) \
|
||||||
|| __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \
|
|| (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
|
||||||
|| __ICC || 0x5110 <= __SUNPRO_C \
|
|| __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \
|
||||||
|| 1300 <= _MSC_VER)
|
|| 1300 <= _MSC_VER)
|
||||||
struct alignas_test { char c; char alignas (8) alignas_8; };
|
struct alignas_test { char c; char alignas (8) alignas_8; };
|
||||||
char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
|
char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
|
||||||
|
|
|
||||||
108
m4/stdint.m4
108
m4/stdint.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# stdint.m4 serial 50
|
# stdint.m4 serial 51
|
||||||
dnl Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -10,6 +10,7 @@ dnl Test whether <stdint.h> is supported or must be substituted.
|
||||||
AC_DEFUN_ONCE([gl_STDINT_H],
|
AC_DEFUN_ONCE([gl_STDINT_H],
|
||||||
[
|
[
|
||||||
AC_PREREQ([2.59])dnl
|
AC_PREREQ([2.59])dnl
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||||
|
|
||||||
AC_REQUIRE([gl_LIMITS_H])
|
AC_REQUIRE([gl_LIMITS_H])
|
||||||
AC_REQUIRE([gt_TYPE_WINT_T])
|
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||||
|
|
@ -288,8 +289,12 @@ static const char *macro_values[] =
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_header_working_stdint_h=yes],
|
[gl_cv_header_working_stdint_h=yes],
|
||||||
[],
|
[],
|
||||||
[dnl When cross-compiling, assume it works.
|
[case "$host_os" in
|
||||||
gl_cv_header_working_stdint_h=yes
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
|
||||||
|
# In general, assume it works.
|
||||||
|
*) gl_cv_header_working_stdint_h="guessing yes" ;;
|
||||||
|
esac
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
@ -299,15 +304,16 @@ static const char *macro_values[] =
|
||||||
HAVE_SYS_BITYPES_H=0
|
HAVE_SYS_BITYPES_H=0
|
||||||
HAVE_SYS_INTTYPES_H=0
|
HAVE_SYS_INTTYPES_H=0
|
||||||
STDINT_H=stdint.h
|
STDINT_H=stdint.h
|
||||||
if test "$gl_cv_header_working_stdint_h" = yes; then
|
case "$gl_cv_header_working_stdint_h" in
|
||||||
HAVE_C99_STDINT_H=1
|
*yes)
|
||||||
dnl Now see whether the system <stdint.h> works without
|
HAVE_C99_STDINT_H=1
|
||||||
dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
|
dnl Now see whether the system <stdint.h> works without
|
||||||
AC_CACHE_CHECK([whether stdint.h predates C++11],
|
dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
|
||||||
[gl_cv_header_stdint_predates_cxx11_h],
|
AC_CACHE_CHECK([whether stdint.h predates C++11],
|
||||||
[gl_cv_header_stdint_predates_cxx11_h=yes
|
[gl_cv_header_stdint_predates_cxx11_h],
|
||||||
AC_COMPILE_IFELSE([
|
[gl_cv_header_stdint_predates_cxx11_h=yes
|
||||||
AC_LANG_PROGRAM([[
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([[
|
||||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
|
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
]
|
]
|
||||||
|
|
@ -315,45 +321,47 @@ gl_STDINT_INCLUDES
|
||||||
[
|
[
|
||||||
intmax_t im = INTMAX_MAX;
|
intmax_t im = INTMAX_MAX;
|
||||||
int32_t i32 = INT32_C (0x7fffffff);
|
int32_t i32 = INT32_C (0x7fffffff);
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_header_stdint_predates_cxx11_h=no])])
|
[gl_cv_header_stdint_predates_cxx11_h=no])])
|
||||||
|
|
||||||
if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
|
if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
|
||||||
AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
|
AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
|
||||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||||
AC_DEFINE([__STDC_LIMIT_MACROS], [1],
|
AC_DEFINE([__STDC_LIMIT_MACROS], [1],
|
||||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||||
fi
|
fi
|
||||||
AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
|
AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
|
||||||
[gl_cv_header_stdint_width],
|
[gl_cv_header_stdint_width],
|
||||||
[gl_cv_header_stdint_width=no
|
[gl_cv_header_stdint_width=no
|
||||||
AC_COMPILE_IFELSE(
|
AC_COMPILE_IFELSE(
|
||||||
[AC_LANG_PROGRAM([[
|
[AC_LANG_PROGRAM([[
|
||||||
/* Work if build is not clean. */
|
/* Work if build is not clean. */
|
||||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
|
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
|
||||||
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
|
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
|
||||||
#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
|
#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
|
||||||
#endif
|
#endif
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
]gl_STDINT_INCLUDES[
|
]gl_STDINT_INCLUDES[
|
||||||
int iw = UINTMAX_WIDTH;
|
int iw = UINTMAX_WIDTH;
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_header_stdint_width=yes])])
|
[gl_cv_header_stdint_width=yes])])
|
||||||
if test "$gl_cv_header_stdint_width" = yes; then
|
if test "$gl_cv_header_stdint_width" = yes; then
|
||||||
STDINT_H=
|
STDINT_H=
|
||||||
fi
|
fi
|
||||||
else
|
;;
|
||||||
dnl Check for <sys/inttypes.h>, and for
|
*)
|
||||||
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
|
dnl Check for <sys/inttypes.h>, and for
|
||||||
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
|
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
|
||||||
if test $ac_cv_header_sys_inttypes_h = yes; then
|
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
|
||||||
HAVE_SYS_INTTYPES_H=1
|
if test $ac_cv_header_sys_inttypes_h = yes; then
|
||||||
fi
|
HAVE_SYS_INTTYPES_H=1
|
||||||
if test $ac_cv_header_sys_bitypes_h = yes; then
|
fi
|
||||||
HAVE_SYS_BITYPES_H=1
|
if test $ac_cv_header_sys_bitypes_h = yes; then
|
||||||
fi
|
HAVE_SYS_BITYPES_H=1
|
||||||
gl_STDINT_TYPE_PROPERTIES
|
fi
|
||||||
fi
|
gl_STDINT_TYPE_PROPERTIES
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
|
dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
|
||||||
LIMITS_H=limits.h
|
LIMITS_H=limits.h
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# strerror.m4 serial 17
|
# strerror.m4 serial 18
|
||||||
dnl Copyright (C) 2002, 2007-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002, 2007-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -80,6 +80,8 @@ AC_DEFUN([gl_FUNC_STRERROR_0],
|
||||||
[case "$host_os" in
|
[case "$host_os" in
|
||||||
# Guess yes on glibc systems.
|
# Guess yes on glibc systems.
|
||||||
*-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
|
*-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
|
||||||
|
# Guess yes on native Windows.
|
||||||
|
mingw*) gl_cv_func_strerror_0_works="guessing yes" ;;
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_strerror_0_works="guessing no" ;;
|
*) gl_cv_func_strerror_0_works="guessing no" ;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
|
||||||
|
|
||||||
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
|
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
|
||||||
[
|
[
|
||||||
|
GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
|
||||||
GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
|
GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
|
||||||
GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
|
GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
|
||||||
GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR])
|
GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR])
|
||||||
|
|
@ -82,6 +83,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
|
||||||
GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
|
GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP])
|
||||||
HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
|
HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
|
||||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO])
|
||||||
HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
|
HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
|
||||||
HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL])
|
HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL])
|
||||||
HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR])
|
HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR])
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# sys_stat_h.m4 serial 28 -*- Autoconf -*-
|
# sys_stat_h.m4 serial 31 -*- Autoconf -*-
|
||||||
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -19,18 +19,21 @@ AC_DEFUN([gl_HEADER_SYS_STAT_H],
|
||||||
dnl Ensure the type mode_t gets defined.
|
dnl Ensure the type mode_t gets defined.
|
||||||
AC_REQUIRE([AC_TYPE_MODE_T])
|
AC_REQUIRE([AC_TYPE_MODE_T])
|
||||||
|
|
||||||
dnl Whether to override 'struct stat'.
|
dnl Whether to enable precise timestamps in 'struct stat'.
|
||||||
|
m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [
|
||||||
|
AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC])
|
||||||
|
], [
|
||||||
|
WINDOWS_STAT_TIMESPEC=0
|
||||||
|
])
|
||||||
|
AC_SUBST([WINDOWS_STAT_TIMESPEC])
|
||||||
|
|
||||||
|
dnl Whether to ensure that struct stat.st_size is 64-bit wide.
|
||||||
m4_ifdef([gl_LARGEFILE], [
|
m4_ifdef([gl_LARGEFILE], [
|
||||||
AC_REQUIRE([gl_LARGEFILE])
|
AC_REQUIRE([gl_LARGEFILE])
|
||||||
], [
|
], [
|
||||||
WINDOWS_64_BIT_ST_SIZE=0
|
WINDOWS_64_BIT_ST_SIZE=0
|
||||||
])
|
])
|
||||||
AC_SUBST([WINDOWS_64_BIT_ST_SIZE])
|
AC_SUBST([WINDOWS_64_BIT_ST_SIZE])
|
||||||
if test $WINDOWS_64_BIT_ST_SIZE = 1; then
|
|
||||||
AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1],
|
|
||||||
[Define to 1 if Gnulib overrides 'struct stat' on Windows so that
|
|
||||||
struct stat.st_size becomes 64-bit.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Define types that are supposed to be defined in <sys/types.h> or
|
dnl Define types that are supposed to be defined in <sys/types.h> or
|
||||||
dnl <sys/stat.h>.
|
dnl <sys/stat.h>.
|
||||||
|
|
@ -72,6 +75,7 @@ AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
|
||||||
GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT])
|
GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT])
|
||||||
GNULIB_STAT=0; AC_SUBST([GNULIB_STAT])
|
GNULIB_STAT=0; AC_SUBST([GNULIB_STAT])
|
||||||
GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT])
|
GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT])
|
||||||
|
GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT])
|
||||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
|
HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
|
||||||
HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
|
HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# Configure a replacement for <sys/time.h>.
|
# Configure a replacement for <sys/time.h>.
|
||||||
# serial 8
|
# serial 9
|
||||||
|
|
||||||
# Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
|
|
@ -105,7 +105,6 @@ AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS],
|
||||||
HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY])
|
HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY])
|
||||||
HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL])
|
HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL])
|
||||||
HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H])
|
HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H])
|
||||||
HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T])
|
|
||||||
REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY])
|
REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY])
|
||||||
REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL])
|
REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL])
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# sys_types_h.m4 serial 6
|
# sys_types_h.m4 serial 8
|
||||||
dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -6,6 +6,9 @@ dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
AC_DEFUN_ONCE([gl_SYS_TYPES_H],
|
AC_DEFUN_ONCE([gl_SYS_TYPES_H],
|
||||||
[
|
[
|
||||||
|
dnl Use sane struct stat types in OpenVMS 8.2 and later.
|
||||||
|
AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
|
||||||
|
|
||||||
AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
|
AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
|
||||||
gl_NEXT_HEADERS([sys/types.h])
|
gl_NEXT_HEADERS([sys/types.h])
|
||||||
|
|
||||||
|
|
@ -17,6 +20,14 @@ AC_DEFUN_ONCE([gl_SYS_TYPES_H],
|
||||||
|
|
||||||
dnl Whether to override the 'off_t' type.
|
dnl Whether to override the 'off_t' type.
|
||||||
AC_REQUIRE([gl_TYPE_OFF_T])
|
AC_REQUIRE([gl_TYPE_OFF_T])
|
||||||
|
|
||||||
|
dnl Whether to override the 'dev_t' and 'ino_t' types.
|
||||||
|
m4_ifdef([gl_WINDOWS_STAT_INODES], [
|
||||||
|
AC_REQUIRE([gl_WINDOWS_STAT_INODES])
|
||||||
|
], [
|
||||||
|
WINDOWS_STAT_INODES=0
|
||||||
|
])
|
||||||
|
AC_SUBST([WINDOWS_STAT_INODES])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
|
AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
|
||||||
|
|
|
||||||
12
m4/time_h.m4
12
m4/time_h.m4
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# Copyright (C) 2000-2001, 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2000-2001, 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# serial 9
|
# serial 11
|
||||||
|
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -104,24 +104,34 @@ AC_DEFUN([gl_TIME_MODULE_INDICATOR],
|
||||||
|
|
||||||
AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
|
AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
|
||||||
[
|
[
|
||||||
|
GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME])
|
||||||
GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME])
|
GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME])
|
||||||
|
GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME])
|
||||||
GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP])
|
GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP])
|
||||||
|
GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME])
|
||||||
GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME])
|
GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME])
|
||||||
GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM])
|
GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM])
|
||||||
GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R])
|
GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R])
|
||||||
GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ])
|
GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ])
|
||||||
|
GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET])
|
||||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
|
HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
|
||||||
HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
|
HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
|
||||||
HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
|
HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
|
||||||
HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM])
|
HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM])
|
||||||
|
HAVE_TZSET=1; AC_SUBST([HAVE_TZSET])
|
||||||
|
dnl Even GNU libc does not have timezone_t yet.
|
||||||
|
HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T])
|
||||||
dnl If another module says to replace or to not replace, do that.
|
dnl If another module says to replace or to not replace, do that.
|
||||||
dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
|
dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
|
||||||
dnl this lets maintainers check for portability.
|
dnl this lets maintainers check for portability.
|
||||||
|
REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME])
|
||||||
REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R])
|
REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R])
|
||||||
REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME])
|
REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME])
|
||||||
REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP])
|
REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP])
|
||||||
|
REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME])
|
||||||
REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM])
|
REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM])
|
||||||
|
REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET])
|
||||||
|
|
||||||
dnl Hack so that the time module doesn't depend on the sys_time module.
|
dnl Hack so that the time module doesn't depend on the sys_time module.
|
||||||
dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent.
|
dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# unistd_h.m4 serial 69
|
# unistd_h.m4 serial 70
|
||||||
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -46,8 +46,8 @@ AC_DEFUN([gl_UNISTD_H],
|
||||||
gethostname getlogin getlogin_r getpagesize
|
gethostname getlogin getlogin_r getpagesize
|
||||||
getusershell setusershell endusershell
|
getusershell setusershell endusershell
|
||||||
group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
|
group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
|
||||||
readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r
|
readlink readlinkat rmdir sethostname sleep symlink symlinkat
|
||||||
unlink unlinkat usleep])
|
truncate ttyname_r unlink unlinkat usleep])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
|
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
|
||||||
|
|
@ -102,6 +102,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
||||||
GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
|
GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
|
||||||
GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK])
|
GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK])
|
||||||
GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT])
|
GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT])
|
||||||
|
GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE])
|
||||||
GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R])
|
GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R])
|
||||||
GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
|
GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
|
||||||
GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
|
GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
|
||||||
|
|
@ -139,6 +140,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
||||||
HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
|
HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
|
||||||
HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
|
HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
|
||||||
HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
|
HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
|
||||||
|
HAVE_TRUNCATE=1; AC_SUBST([HAVE_TRUNCATE])
|
||||||
HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
|
HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
|
||||||
HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
|
HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
|
||||||
HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
|
HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
|
||||||
|
|
@ -179,6 +181,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
||||||
REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
|
REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
|
||||||
REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
|
REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
|
||||||
REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
|
REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
|
||||||
|
REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
|
||||||
REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
|
REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
|
||||||
REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
|
REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
|
||||||
REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
|
REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
dnl Written by Eric Blake.
|
dnl Written by Eric Blake.
|
||||||
|
|
||||||
# wchar_h.m4 serial 40
|
# wchar_h.m4 serial 42
|
||||||
|
|
||||||
AC_DEFUN([gl_WCHAR_H],
|
AC_DEFUN([gl_WCHAR_H],
|
||||||
[
|
[
|
||||||
|
|
@ -35,6 +35,8 @@ AC_DEFUN([gl_WCHAR_H],
|
||||||
fi
|
fi
|
||||||
AC_SUBST([HAVE_WINT_T])
|
AC_SUBST([HAVE_WINT_T])
|
||||||
|
|
||||||
|
AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
|
||||||
|
|
||||||
dnl Check for declarations of anything we want to poison if the
|
dnl Check for declarations of anything we want to poison if the
|
||||||
dnl corresponding gnulib module is not in use.
|
dnl corresponding gnulib module is not in use.
|
||||||
gl_WARN_ON_USE_PREPARE([[
|
gl_WARN_ON_USE_PREPARE([[
|
||||||
|
|
@ -53,7 +55,7 @@ AC_DEFUN([gl_WCHAR_H],
|
||||||
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
|
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
|
||||||
wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
|
wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
|
||||||
wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
|
wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
|
||||||
wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
|
wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
@ -177,6 +179,7 @@ AC_DEFUN([gl_WCHAR_H_DEFAULTS],
|
||||||
GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR])
|
GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR])
|
||||||
GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
|
GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
|
||||||
GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
|
GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
|
||||||
|
GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME])
|
||||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
|
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
|
||||||
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
|
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
|
||||||
|
|
@ -215,6 +218,7 @@ AC_DEFUN([gl_WCHAR_H_DEFAULTS],
|
||||||
HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR])
|
HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR])
|
||||||
HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
|
HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
|
||||||
HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH])
|
HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH])
|
||||||
|
HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME])
|
||||||
HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
|
HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
|
||||||
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
|
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
|
||||||
REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
|
REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
|
||||||
|
|
@ -230,4 +234,5 @@ AC_DEFUN([gl_WCHAR_H_DEFAULTS],
|
||||||
REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
|
REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
|
||||||
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
|
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
|
||||||
REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH])
|
REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH])
|
||||||
|
REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME])
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# wctype_h.m4 serial 18
|
# wctype_h.m4 serial 21
|
||||||
|
|
||||||
dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
|
dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
|
||||||
|
|
||||||
|
|
@ -30,6 +30,8 @@ AC_DEFUN([gl_WCTYPE_H],
|
||||||
fi
|
fi
|
||||||
AC_SUBST([HAVE_WINT_T])
|
AC_SUBST([HAVE_WINT_T])
|
||||||
|
|
||||||
|
AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
|
||||||
|
|
||||||
gl_CHECK_NEXT_HEADERS([wctype.h])
|
gl_CHECK_NEXT_HEADERS([wctype.h])
|
||||||
if test $ac_cv_header_wctype_h = yes; then
|
if test $ac_cv_header_wctype_h = yes; then
|
||||||
if test $ac_cv_func_iswcntrl = yes; then
|
if test $ac_cv_func_iswcntrl = yes; then
|
||||||
|
|
@ -51,7 +53,8 @@ AC_DEFUN([gl_WCTYPE_H],
|
||||||
int main () { return iswprint ('x') == 0; }
|
int main () { return iswprint ('x') == 0; }
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
|
[gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
|
||||||
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
|
[dnl Guess no on Linux libc5, yes otherwise.
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
|
||||||
#if __GNU_LIBRARY__ == 1
|
#if __GNU_LIBRARY__ == 1
|
||||||
Linux libc5 i18n is broken.
|
Linux libc5 i18n is broken.
|
||||||
#endif]], [])],
|
#endif]], [])],
|
||||||
|
|
|
||||||
14
m4/wint_t.m4
14
m4/wint_t.m4
|
|
@ -1,4 +1,4 @@
|
||||||
# wint_t.m4 serial 6
|
# wint_t.m4 serial 7
|
||||||
dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc.
|
dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -60,3 +60,15 @@ AC_DEFUN([gt_TYPE_WINT_T],
|
||||||
fi
|
fi
|
||||||
AC_SUBST([GNULIB_OVERRIDES_WINT_T])
|
AC_SUBST([GNULIB_OVERRIDES_WINT_T])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl Prerequisites of the 'wint_t' override.
|
||||||
|
AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
|
||||||
|
[
|
||||||
|
AC_CHECK_HEADERS_ONCE([crtdefs.h])
|
||||||
|
if test $ac_cv_header_crtdefs_h = yes; then
|
||||||
|
HAVE_CRTDEFS_H=1
|
||||||
|
else
|
||||||
|
HAVE_CRTDEFS_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_CRTDEFS_H])
|
||||||
|
])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue