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
|
||||
arg-nonnull.h
|
||||
c++defs.h
|
||||
configmake.h
|
||||
dummy.c
|
||||
errno.h
|
||||
fcntl.h
|
||||
getopt-cdefs.h
|
||||
getopt.h
|
||||
libgnu.a
|
||||
limits.h
|
||||
stdalign.h
|
||||
stdint.h
|
||||
stdio.h
|
||||
stdlib.h
|
||||
string.h
|
||||
|
|
@ -16,7 +17,6 @@ sys/
|
|||
sysexits.h
|
||||
time.h
|
||||
unistd.h
|
||||
warn-on-use.h
|
||||
wchar.h
|
||||
wctype.h
|
||||
*.sed
|
||||
|
|
|
|||
139
lib/Makefile.am
139
lib/Makefile.am
|
|
@ -37,6 +37,7 @@ MOSTLYCLEANDIRS =
|
|||
CLEANFILES =
|
||||
DISTCLEANFILES =
|
||||
MAINTAINERCLEANFILES =
|
||||
# No GNU Make output.
|
||||
|
||||
AM_CPPFLAGS =
|
||||
AM_CFLAGS =
|
||||
|
|
@ -273,6 +274,13 @@ EXTRA_DIST += fcntl.in.h
|
|||
|
||||
## end gnulib module fcntl-h
|
||||
|
||||
## begin gnulib module filename
|
||||
|
||||
|
||||
EXTRA_DIST += filename.h
|
||||
|
||||
## end gnulib module filename
|
||||
|
||||
## begin gnulib module float
|
||||
|
||||
BUILT_SOURCES += $(FLOAT_H)
|
||||
|
|
@ -306,11 +314,11 @@ EXTRA_libgnu_la_SOURCES += float.c itold.c
|
|||
|
||||
## 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
|
||||
# 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 $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
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; \
|
||||
} > $@-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
|
||||
|
||||
|
|
@ -478,6 +495,15 @@ EXTRA_DIST += config.charset ref-add.sin ref-del.sin
|
|||
|
||||
## 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
|
||||
|
||||
|
||||
|
|
@ -505,6 +531,14 @@ EXTRA_libgnu_la_SOURCES += malloc.c
|
|||
|
||||
## 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
|
||||
|
||||
|
||||
|
|
@ -647,90 +681,57 @@ EXTRA_libgnu_la_SOURCES += sleep.c
|
|||
## begin gnulib module snippet/_Noreturn
|
||||
|
||||
# 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.
|
||||
|
||||
_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
|
||||
|
||||
## begin gnulib module snippet/arg-nonnull
|
||||
|
||||
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
|
||||
# statements but through direct file reference. Therefore this snippet must be
|
||||
# present in all Makefile.am that need it. This is ensured by the applicability
|
||||
# 'all' defined above.
|
||||
# Because this Makefile snippet defines a variable used by other
|
||||
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||
# need it. This is ensured by the applicability 'all' defined above.
|
||||
|
||||
BUILT_SOURCES += 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=$(srcdir)/arg-nonnull.h
|
||||
|
||||
ARG_NONNULL_H=arg-nonnull.h
|
||||
|
||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/arg-nonnull.h
|
||||
EXTRA_DIST += arg-nonnull.h
|
||||
|
||||
## end gnulib module snippet/arg-nonnull
|
||||
|
||||
## begin gnulib module snippet/c++defs
|
||||
|
||||
# The BUILT_SOURCES created by this Makefile snippet are not used via #include
|
||||
# statements but through direct file reference. Therefore this snippet must be
|
||||
# present in all Makefile.am that need it. This is ensured by the applicability
|
||||
# 'all' defined above.
|
||||
# Because this Makefile snippet defines a variable used by other
|
||||
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||
# need it. This is ensured by the applicability 'all' defined above.
|
||||
|
||||
BUILT_SOURCES += 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=$(srcdir)/c++defs.h
|
||||
|
||||
CXXDEFS_H=c++defs.h
|
||||
|
||||
EXTRA_DIST += $(top_srcdir)/tools/snippet/c++defs.h
|
||||
EXTRA_DIST += c++defs.h
|
||||
|
||||
## end gnulib module snippet/c++defs
|
||||
|
||||
## begin gnulib module snippet/warn-on-use
|
||||
|
||||
BUILT_SOURCES += warn-on-use.h
|
||||
# The warn-on-use.h that gets inserted into generated .h files is the same as
|
||||
# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
|
||||
# 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
|
||||
# Because this Makefile snippet defines a variable used by other
|
||||
# gnulib Makefile snippets, it must be present in all makefiles that
|
||||
# need it. This is ensured by the applicability 'all' defined above.
|
||||
|
||||
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
|
||||
|
||||
## 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
|
||||
|
||||
|
|
@ -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_COLUMNS''@|@PRAGMA_COLUMNS@|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_FFSLL''@/$(GNULIB_FFSLL)/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_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
|
||||
< $(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_MBSLEN''@|$(HAVE_MBSLEN)|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|@''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_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
|
||||
-e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
|
||||
-e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/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_STAT''@/$(GNULIB_STAT)/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_FSTATAT''@|$(HAVE_FSTATAT)|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|@''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_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
|
||||
< $(srcdir)/sys_types.in.h; \
|
||||
} > $@-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_COLUMNS''@|@PRAGMA_COLUMNS@|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_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
|
||||
-e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \
|
||||
-e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
|
||||
-e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
|
||||
-e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/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_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
|
||||
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
|
||||
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|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_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
|
||||
-e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
|
||||
-e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|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_TZSET''@|$(REPLACE_TZSET)|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|@''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_SYMLINK''@/$(GNULIB_SYMLINK)/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_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/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_SYMLINK''@|$(HAVE_SYMLINK)|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_USLEEP''@|$(HAVE_USLEEP)|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_SYMLINK''@|$(REPLACE_SYMLINK)|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_UNLINK''@|$(REPLACE_UNLINK)|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|@''NEXT_WCHAR_H''@|$(NEXT_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_BTOWC''@/$(GNULIB_BTOWC)/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_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
|
||||
-e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
|
||||
-e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
|
||||
< $(srcdir)/wchar.in.h | \
|
||||
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|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_WCSTOK''@|$(HAVE_WCSTOK)|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_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_WCWIDTH''@|$(REPLACE_WCWIDTH)|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 '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_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_COLUMNS''@|@PRAGMA_COLUMNS@|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_ISWBLANK''@/$(GNULIB_ISWBLANK)/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. */
|
||||
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
|
||||
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
|
||||
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
|
||||
following the '\v' character (nothing for strings without). Each separate
|
||||
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;
|
||||
putc_unlocked (':', stream);
|
||||
putc_unlocked (' ', stream);
|
||||
# if HAVE_DECL_STRERROR_R
|
||||
# if STRERROR_R_CHAR_P
|
||||
# if GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R
|
||||
# if !GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P
|
||||
s = __strerror_r (errnum, buf, sizeof buf);
|
||||
# else
|
||||
if (__strerror_r (errnum, buf, sizeof buf) == 0)
|
||||
|
|
|
|||
|
|
@ -740,12 +740,15 @@ parser_parse_opt (struct parser *parser, int opt, char *val)
|
|||
}
|
||||
}
|
||||
else
|
||||
/* A long option. We use shifts instead of masking for extracting
|
||||
the user value in order to preserve the sign. */
|
||||
err =
|
||||
group_parse (&parser->groups[group_key - 1], &parser->state,
|
||||
(opt << GROUP_BITS) >> GROUP_BITS,
|
||||
parser->opt_data.optarg);
|
||||
/* A long option. Preserve the sign in the user key, without
|
||||
invoking undefined behavior. Assume two's complement. */
|
||||
{
|
||||
int user_key =
|
||||
((opt & (1 << (USER_BITS - 1))) ? ~USER_MASK : 0) | (opt & USER_MASK);
|
||||
err =
|
||||
group_parse (&parser->groups[group_key - 1], &parser->state,
|
||||
user_key, parser->opt_data.optarg);
|
||||
}
|
||||
|
||||
if (err == EBADKEY)
|
||||
/* 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
|
||||
# include <windows.h>
|
||||
/* Get _get_osfhandle. */
|
||||
# include "msvc-nothrow.h"
|
||||
# if GNULIB_MSVC_NOTHROW
|
||||
# include "msvc-nothrow.h"
|
||||
# else
|
||||
# include <io.h>
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* The gnulib override of fcntl is not needed in this file. */
|
||||
# undef fcntl
|
||||
|
||||
# if !HAVE_DECL_STRERROR_R
|
||||
# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R)
|
||||
# ifndef HAVE_DECL_STRERROR_R
|
||||
"this configure-time declaration test was not run"
|
||||
# endif
|
||||
# if STRERROR_R_CHAR_P
|
||||
char *strerror_r ();
|
||||
char *strerror_r (int errnum, char *buf, size_t buflen);
|
||||
# else
|
||||
int strerror_r ();
|
||||
int strerror_r (int errnum, char *buf, size_t buflen);
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#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
|
||||
# endif /* HAVE_STRERROR_R || defined strerror_r */
|
||||
# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */
|
||||
#endif /* not _LIBC */
|
||||
|
||||
#if !_LIBC
|
||||
|
|
@ -172,9 +176,9 @@ print_errno_message (int errnum)
|
|||
{
|
||||
char const *s;
|
||||
|
||||
#if defined HAVE_STRERROR_R || _LIBC
|
||||
#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R
|
||||
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);
|
||||
# else
|
||||
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
|
||||
#endif
|
||||
vfprintf (stderr, message, args);
|
||||
va_end (args);
|
||||
|
||||
++error_message_count;
|
||||
if (errnum)
|
||||
|
|
@ -318,6 +321,7 @@ error (int status, int errnum, const char *message, ...)
|
|||
|
||||
va_start (args, message);
|
||||
error_tail (status, errnum, message, args);
|
||||
va_end (args);
|
||||
|
||||
#ifdef _LIBC
|
||||
_IO_funlockfile (stderr);
|
||||
|
|
@ -388,6 +392,7 @@ error_at_line (int status, int errnum, const char *file_name,
|
|||
|
||||
va_start (args, message);
|
||||
error_tail (status, errnum, message, args);
|
||||
va_end (args);
|
||||
|
||||
#ifdef _LIBC
|
||||
_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
|
||||
precision in the compiler but 64 bits of precision at runtime. See
|
||||
<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. */
|
||||
# undef LDBL_MANT_DIG
|
||||
# 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.
|
||||
Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2017 Free Software
|
||||
Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
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, which supplies a different version of
|
||||
this file.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
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 this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with gnulib; if not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _@GUARD_PREFIX@_GETOPT_H
|
||||
|
||||
|
|
@ -32,230 +34,28 @@
|
|||
# undef _GL_SYSTEM_GETOPT
|
||||
#endif
|
||||
|
||||
#ifndef _@GUARD_PREFIX@_GETOPT_H
|
||||
|
||||
#ifndef __need_getopt
|
||||
# define _@GUARD_PREFIX@_GETOPT_H 1
|
||||
#endif
|
||||
#define _@GUARD_PREFIX@_GETOPT_H 1
|
||||
|
||||
/* Standalone applications should #define __GETOPT_PREFIX to an
|
||||
identifier that prefixes the external functions and variables
|
||||
defined in this header. When this happens, include the
|
||||
headers that might declare getopt so that they will not cause
|
||||
confusion if included after this file (if the system had <getopt.h>,
|
||||
we have already included it). Then systematically rename
|
||||
identifiers so that they do not collide with the system functions
|
||||
and variables. Renaming avoids problems with some compilers and
|
||||
linkers. */
|
||||
defined in getopt-core.h and getopt-ext.h. When this happens,
|
||||
include the headers that might declare getopt so that they will not
|
||||
cause confusion if included after this file (if the system had
|
||||
<getopt.h>, we have already included it). */
|
||||
#if defined __GETOPT_PREFIX
|
||||
# if !defined __need_getopt
|
||||
# if !@HAVE_GETOPT_H@
|
||||
# define __need_system_stdlib_h
|
||||
# include <stdlib.h>
|
||||
# undef __need_system_stdlib_h
|
||||
# include <stdio.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
|
||||
# if !@HAVE_GETOPT_H@
|
||||
# define __need_system_stdlib_h
|
||||
# include <stdlib.h>
|
||||
# undef __need_system_stdlib_h
|
||||
# include <stdio.h>
|
||||
# include <unistd.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The definition of _GL_ARG_NONNULL is copied here. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
#include <getopt-cdefs.h>
|
||||
#include <getopt-pfx-core.h>
|
||||
#include <getopt-pfx-ext.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.
|
||||
Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2017 Free Software
|
||||
Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Copyright (C) 1987-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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
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/>. */
|
||||
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/>. */
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <getopt.h>
|
||||
#else
|
||||
#ifndef _LIBC
|
||||
# include <config.h>
|
||||
# include "getopt.h"
|
||||
#endif
|
||||
|
||||
#include "getopt.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
|
||||
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,
|
||||
opt_index, 0, 0);
|
||||
opt_index, 0, 0);
|
||||
}
|
||||
|
||||
int
|
||||
_getopt_long_r (int argc, char **argv, const char *options,
|
||||
const struct option *long_options, int *opt_index,
|
||||
struct _getopt_data *d)
|
||||
const struct option *long_options, int *opt_index,
|
||||
struct _getopt_data *d)
|
||||
{
|
||||
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.
|
||||
|
|
@ -60,26 +48,27 @@ _getopt_long_r (int argc, char **argv, const char *options,
|
|||
|
||||
int
|
||||
getopt_long_only (int argc, char *__getopt_argv_const *argv,
|
||||
const char *options,
|
||||
const struct option *long_options, int *opt_index)
|
||||
const char *options,
|
||||
const struct option *long_options, int *opt_index)
|
||||
{
|
||||
return _getopt_internal (argc, (char **) argv, options, long_options,
|
||||
opt_index, 1, 0);
|
||||
opt_index, 1, 0);
|
||||
}
|
||||
|
||||
int
|
||||
_getopt_long_only_r (int argc, char **argv, const char *options,
|
||||
const struct option *long_options, int *opt_index,
|
||||
struct _getopt_data *d)
|
||||
const struct option *long_options, int *opt_index,
|
||||
struct _getopt_data *d)
|
||||
{
|
||||
return _getopt_internal_r (argc, argv, options, long_options, opt_index,
|
||||
1, d, 0);
|
||||
1, d, 0);
|
||||
}
|
||||
|
||||
|
||||
#ifdef TEST
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
|
|
@ -93,74 +82,74 @@ main (int argc, char **argv)
|
|||
int option_index = 0;
|
||||
static const struct option long_options[] =
|
||||
{
|
||||
{"add", 1, 0, 0},
|
||||
{"append", 0, 0, 0},
|
||||
{"delete", 1, 0, 0},
|
||||
{"verbose", 0, 0, 0},
|
||||
{"create", 0, 0, 0},
|
||||
{"file", 1, 0, 0},
|
||||
{0, 0, 0, 0}
|
||||
{"add", 1, 0, 0},
|
||||
{"append", 0, 0, 0},
|
||||
{"delete", 1, 0, 0},
|
||||
{"verbose", 0, 0, 0},
|
||||
{"create", 0, 0, 0},
|
||||
{"file", 1, 0, 0},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
c = getopt_long (argc, argv, "abc:d:0123456789",
|
||||
long_options, &option_index);
|
||||
long_options, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
break;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case 0:
|
||||
printf ("option %s", long_options[option_index].name);
|
||||
if (optarg)
|
||||
printf (" with arg %s", optarg);
|
||||
printf ("\n");
|
||||
break;
|
||||
{
|
||||
case 0:
|
||||
printf ("option %s", long_options[option_index].name);
|
||||
if (optarg)
|
||||
printf (" with arg %s", optarg);
|
||||
printf ("\n");
|
||||
break;
|
||||
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
if (digit_optind != 0 && digit_optind != this_option_optind)
|
||||
printf ("digits occur in two different argv-elements.\n");
|
||||
digit_optind = this_option_optind;
|
||||
printf ("option %c\n", c);
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
if (digit_optind != 0 && digit_optind != this_option_optind)
|
||||
printf ("digits occur in two different argv-elements.\n");
|
||||
digit_optind = this_option_optind;
|
||||
printf ("option %c\n", c);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
printf ("option a\n");
|
||||
break;
|
||||
case 'a':
|
||||
printf ("option a\n");
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
printf ("option b\n");
|
||||
break;
|
||||
case 'b':
|
||||
printf ("option b\n");
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
printf ("option c with value '%s'\n", optarg);
|
||||
break;
|
||||
case 'c':
|
||||
printf ("option c with value '%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
printf ("option d with value '%s'\n", optarg);
|
||||
break;
|
||||
case 'd':
|
||||
printf ("option d with value '%s'\n", optarg);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
break;
|
||||
case '?':
|
||||
break;
|
||||
|
||||
default:
|
||||
printf ("?? getopt returned character code 0%o ??\n", c);
|
||||
}
|
||||
default:
|
||||
printf ("?? getopt returned character code 0%o ??\n", c);
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc)
|
||||
{
|
||||
printf ("non-option ARGV-elements: ");
|
||||
while (optind < argc)
|
||||
printf ("%s ", argv[optind++]);
|
||||
printf ("%s ", argv[optind++]);
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,30 +1,31 @@
|
|||
/* Internal declarations for getopt.
|
||||
Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2017 Free Software
|
||||
Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
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/>. */
|
||||
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_INT_H
|
||||
#define _GETOPT_INT_H 1
|
||||
#define _GETOPT_INT_H 1
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
extern int _getopt_internal (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only, int __posixly_correct);
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only, int __posixly_correct);
|
||||
|
||||
|
||||
/* 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.
|
||||
|
||||
If the caller did not specify anything,
|
||||
the default is REQUIRE_ORDER if the environment variable
|
||||
POSIXLY_CORRECT is defined, PERMUTE otherwise.
|
||||
REQUIRE_ORDER means don't recognize them as options; stop option
|
||||
processing when the first non-option is seen. This is what POSIX
|
||||
specifies should happen.
|
||||
|
||||
REQUIRE_ORDER means don't recognize them as options;
|
||||
stop option processing when the first non-option is seen.
|
||||
This is what Unix does.
|
||||
This mode of operation is selected by either setting the environment
|
||||
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.
|
||||
PERMUTE means 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
|
||||
written to expect options and other ARGV-elements in any order
|
||||
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
|
||||
with character code 1. Using '-' as the first character of the
|
||||
list of option characters selects this mode of operation.
|
||||
with character code 1.
|
||||
|
||||
The special argument '--' forces an end of option-scanning regardless
|
||||
of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
|
||||
|
|
@ -91,11 +84,6 @@ struct _getopt_data
|
|||
/* See __ord above. */
|
||||
enum __ord __ordering;
|
||||
|
||||
/* If the POSIXLY_CORRECT environment variable is set
|
||||
or getopt was called. */
|
||||
int __posixly_correct;
|
||||
|
||||
|
||||
/* Handle permutation of arguments. */
|
||||
|
||||
/* Describe the part of ARGV that contains non-options that have
|
||||
|
|
@ -104,32 +92,27 @@ struct _getopt_data
|
|||
|
||||
int __first_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
|
||||
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,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only, struct _getopt_data *__data,
|
||||
int __posixly_correct);
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only, struct _getopt_data *__data,
|
||||
int __posixly_correct);
|
||||
|
||||
extern int _getopt_long_r (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
struct _getopt_data *__data);
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
struct _getopt_data *__data);
|
||||
|
||||
extern int _getopt_long_only_r (int ___argc, char **___argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts,
|
||||
int *__longind,
|
||||
struct _getopt_data *__data);
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts,
|
||||
int *__longind,
|
||||
struct _getopt_data *__data);
|
||||
|
||||
#endif /* getopt_int.h */
|
||||
|
|
|
|||
|
|
@ -18,8 +18,9 @@
|
|||
#ifndef _LIBGETTEXT_H
|
||||
#define _LIBGETTEXT_H 1
|
||||
|
||||
/* NLS can be disabled through the configure --disable-nls option. */
|
||||
#if ENABLE_NLS
|
||||
/* NLS can be disabled through the configure --disable-nls option
|
||||
or through "#define ENABLE NLS 0" before including this file. */
|
||||
#if defined ENABLE_NLS && ENABLE_NLS
|
||||
|
||||
/* Get declarations of GNU message catalog functions. */
|
||||
# include <libintl.h>
|
||||
|
|
@ -184,7 +185,8 @@ npgettext_aux (const char *domain,
|
|||
#include <string.h>
|
||||
|
||||
#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
|
||||
#else
|
||||
# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
|
||||
|
|
|
|||
|
|
@ -24,93 +24,95 @@
|
|||
|
||||
#include <time.h>
|
||||
|
||||
#if HAVE_SYS_TIMEB_H
|
||||
# include <sys/timeb.h>
|
||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
# define WINDOWS_NATIVE
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
|
||||
#include "localtime-buffer.h"
|
||||
|
||||
/* 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. The tzset replacement is necessary for at least
|
||||
Solaris 2.5, 2.5.1, and 2.6. */
|
||||
#ifdef WINDOWS_NATIVE
|
||||
|
||||
static struct tm tm_zero_buffer;
|
||||
static struct tm *localtime_buffer_addr = &tm_zero_buffer;
|
||||
/* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */
|
||||
typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime);
|
||||
static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL;
|
||||
static BOOL initialized = FALSE;
|
||||
|
||||
# undef localtime
|
||||
extern struct tm *localtime (time_t const *);
|
||||
|
||||
# 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)
|
||||
static void
|
||||
initialize (void)
|
||||
{
|
||||
struct tm *tm = localtime (timep);
|
||||
|
||||
if (localtime_buffer_addr == &tm_zero_buffer)
|
||||
localtime_buffer_addr = tm;
|
||||
|
||||
return tm;
|
||||
HMODULE kernel32 = LoadLibrary ("kernel32.dll");
|
||||
if (kernel32 != NULL)
|
||||
{
|
||||
GetSystemTimePreciseAsFileTimeFunc =
|
||||
(GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime");
|
||||
}
|
||||
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
|
||||
|
||||
/* This is a wrapper for gettimeofday. It is used only on systems
|
||||
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
|
||||
gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
||||
{
|
||||
#undef gettimeofday
|
||||
#if HAVE_GETTIMEOFDAY
|
||||
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
||||
#ifdef WINDOWS_NATIVE
|
||||
|
||||
/* 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
|
||||
result around the call to gettimeofday. */
|
||||
struct tm save = *localtime_buffer_addr;
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if defined timeval /* 'struct timeval' overridden by gnulib? */
|
||||
# undef timeval
|
||||
# if defined timeval /* 'struct timeval' overridden by gnulib? */
|
||||
# undef timeval
|
||||
struct timeval otv;
|
||||
int result = gettimeofday (&otv, (struct timezone *) tz);
|
||||
if (result == 0)
|
||||
|
|
@ -118,25 +120,16 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)
|
|||
tv->tv_sec = otv.tv_sec;
|
||||
tv->tv_usec = otv.tv_usec;
|
||||
}
|
||||
# else
|
||||
# else
|
||||
int result = gettimeofday (tv, (struct timezone *) tz);
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
||||
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
|
||||
*localtime_buffer_addr = save;
|
||||
# endif
|
||||
# endif
|
||||
|
||||
return result;
|
||||
|
||||
#else
|
||||
|
||||
# if HAVE__FTIME
|
||||
|
||||
struct _timeb timebuf;
|
||||
_ftime (&timebuf);
|
||||
tv->tv_sec = timebuf.time;
|
||||
tv->tv_usec = timebuf.millitm * 1000;
|
||||
|
||||
# else
|
||||
|
||||
# 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_usec = 0;
|
||||
|
||||
# endif
|
||||
|
||||
return 0;
|
||||
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
#define _GL_INTPROPS_H
|
||||
|
||||
#include <limits.h>
|
||||
#include <verify.h>
|
||||
|
||||
/* 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))
|
||||
|
|
@ -80,24 +79,7 @@
|
|||
/* This include file assumes that signed types are two's complement without
|
||||
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.
|
||||
As a sanity check, test the assumption for some signed types that
|
||||
<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
|
||||
This assumption is tested by the intprops-tests module. */
|
||||
|
||||
/* Does the __typeof__ keyword work? This could be done by
|
||||
'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))
|
||||
|
||||
/* 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. */
|
||||
#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
|
||||
|
|
@ -389,10 +375,10 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
|||
(_Generic \
|
||||
(*(r), \
|
||||
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), \
|
||||
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), \
|
||||
int: \
|
||||
_GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
|
||||
|
|
@ -406,10 +392,10 @@ verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH);
|
|||
#else
|
||||
# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \
|
||||
(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) \
|
||||
: 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) \
|
||||
: sizeof *(r) == sizeof (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
|
||||
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
|
||||
TMAX. T must be a signed integer type. Return 1 if the result
|
||||
overflows. */
|
||||
overflow problems. *R's type is T, with extrema TMIN and TMAX.
|
||||
T must be a signed integer type. Return 1 if the result overflows. */
|
||||
#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
|
||||
(sizeof ((a) op (b)) < sizeof (t) \
|
||||
? _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) \
|
||||
|| (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \
|
||||
|| (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, tmin, tmax), 0))
|
||||
? (*(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), 0))
|
||||
|
||||
/* Return A <op> B, where the operation is given by OP. Use the
|
||||
unsigned type UT for calculation to avoid overflow problems.
|
||||
Convert the result to type T without overflow by subtracting TMIN
|
||||
from large values before converting, and adding it afterwards.
|
||||
Compilers can optimize all the operations except OP. */
|
||||
#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \
|
||||
(((ut) (a) op (ut) (b)) <= (tmax) \
|
||||
? (t) ((ut) (a) op (ut) (b)) \
|
||||
: ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin)))
|
||||
/* Return the low-order bits of A <op> B, where the operation is given
|
||||
by OP. Use the unsigned type UT for calculation to avoid undefined
|
||||
behavior on signed integer overflow, and convert the result to type T.
|
||||
UT is at least as wide as T and is no narrower than unsigned int,
|
||||
T is two's complement, and there is no padding or trap representations.
|
||||
Assume that converting UT to T yields the low-order bits, as is
|
||||
done in all known two's-complement C compilers. E.g., see:
|
||||
https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
|
||||
|
||||
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 */
|
||||
|
|
|
|||
10
lib/isatty.c
10
lib/isatty.c
|
|
@ -27,10 +27,16 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include "msvc-inval.h"
|
||||
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
|
||||
# include "msvc-inval.h"
|
||||
#endif
|
||||
|
||||
/* 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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,6 +28,17 @@
|
|||
#ifndef _@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
|
||||
with minimum value MIN and maximum value MAX, as an int expression
|
||||
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 */
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 || defined __WIN32__
|
||||
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||
# define WINDOWS_NATIVE
|
||||
# include <locale.h>
|
||||
#endif
|
||||
|
|
@ -75,6 +75,7 @@
|
|||
# include "relocatable.h"
|
||||
#else
|
||||
# define relocate(pathname) (pathname)
|
||||
# define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname))
|
||||
#endif
|
||||
|
||||
/* Get LIBDIR. */
|
||||
|
|
@ -129,6 +130,7 @@ get_charset_aliases (void)
|
|||
if (cp == NULL)
|
||||
{
|
||||
#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2)
|
||||
char *malloc_dir = NULL;
|
||||
const char *dir;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
|
@ -137,7 +139,7 @@ get_charset_aliases (void)
|
|||
necessary for running the testsuite before "make install". */
|
||||
dir = getenv ("CHARSETALIASDIR");
|
||||
if (dir == NULL || dir[0] == '\0')
|
||||
dir = relocate (LIBDIR);
|
||||
dir = relocate2 (LIBDIR, &malloc_dir);
|
||||
|
||||
/* Concatenate dir and base into freshly allocated file_name. */
|
||||
{
|
||||
|
|
@ -154,6 +156,8 @@ get_charset_aliases (void)
|
|||
}
|
||||
}
|
||||
|
||||
free (malloc_dir);
|
||||
|
||||
if (file_name == NULL)
|
||||
/* Out of memory. Treat the file as empty. */
|
||||
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 "verify.h"
|
||||
|
||||
#ifndef FALLTHROUGH
|
||||
# if __GNUC__ < 7
|
||||
# define FALLTHROUGH ((void) 0)
|
||||
# else
|
||||
# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
verify (sizeof (mbstate_t) >= 4);
|
||||
|
||||
|
|
@ -74,10 +81,10 @@ mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
|
|||
break;
|
||||
case 3:
|
||||
buf[2] = pstate[3];
|
||||
/*FALLTHROUGH*/
|
||||
FALLTHROUGH;
|
||||
case 2:
|
||||
buf[1] = pstate[2];
|
||||
/*FALLTHROUGH*/
|
||||
FALLTHROUGH;
|
||||
case 1:
|
||||
buf[0] = pstate[1];
|
||||
p = buf;
|
||||
|
|
|
|||
|
|
@ -22,17 +22,7 @@
|
|||
|
||||
#include "verify.h"
|
||||
|
||||
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
|
||||
|
||||
/* On native Windows, 'mbstate_t' is defined as 'int'. */
|
||||
|
||||
int
|
||||
mbsinit (const mbstate_t *ps)
|
||||
{
|
||||
return ps == NULL || *ps == 0;
|
||||
}
|
||||
|
||||
#else
|
||||
#if GNULIB_defined_mbstate_t
|
||||
|
||||
/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
|
||||
and wcrtomb(), wcsrtombs().
|
||||
|
|
@ -45,6 +35,7 @@ mbsinit (const mbstate_t *ps)
|
|||
We define the meaning of mbstate_t as follows:
|
||||
- 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.
|
||||
See mbrtowc.c.
|
||||
- In wc -> mb direction, mbstate_t contains no information. In other
|
||||
words, it is always in the initial state. */
|
||||
|
||||
|
|
@ -58,4 +49,25 @@ mbsinit (const mbstate_t *ps)
|
|||
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
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include "msvc-inval.h"
|
||||
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
|
||||
# include "msvc-inval.h"
|
||||
#endif
|
||||
|
||||
#undef _get_osfhandle
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,14 @@
|
|||
|
||||
#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
|
||||
{
|
||||
/* Basic quoting style. */
|
||||
|
|
@ -310,7 +318,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
|||
case c_maybe_quoting_style:
|
||||
quoting_style = c_quoting_style;
|
||||
elide_outer_quotes = true;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case c_quoting_style:
|
||||
if (!elide_outer_quotes)
|
||||
STORE ('"');
|
||||
|
|
@ -365,14 +373,14 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
|||
|
||||
case shell_escape_quoting_style:
|
||||
backslash_escapes = true;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case shell_quoting_style:
|
||||
elide_outer_quotes = true;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case shell_escape_always_quoting_style:
|
||||
if (!elide_outer_quotes)
|
||||
backslash_escapes = true;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case shell_always_quoting_style:
|
||||
quoting_style = shell_always_quoting_style;
|
||||
if (!elide_outer_quotes)
|
||||
|
|
@ -505,7 +513,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
|||
if (quoting_style == shell_always_quoting_style
|
||||
&& elide_outer_quotes)
|
||||
goto force_outer_quoting_style;
|
||||
/* Fall through. */
|
||||
/* fall through */
|
||||
c_escape:
|
||||
if (backslash_escapes)
|
||||
{
|
||||
|
|
@ -517,14 +525,14 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
|||
case '{': case '}': /* sometimes special if isolated */
|
||||
if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
|
||||
break;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case '#': case '~':
|
||||
if (i != 0)
|
||||
break;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case ' ':
|
||||
c_and_shell_quote_compat = true;
|
||||
/* Fall through. */
|
||||
FALLTHROUGH;
|
||||
case '!': /* special in bash */
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
# if _GL_WINDOWS_64_BIT_ST_SIZE
|
||||
# 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
|
||||
# define WINDOWS_NATIVE
|
||||
#endif
|
||||
|
||||
#if !defined WINDOWS_NATIVE
|
||||
|
||||
static int
|
||||
orig_stat (const char *filename, struct stat *buf)
|
||||
{
|
||||
return stat (filename, buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Specification. */
|
||||
/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
|
||||
eliminates this include because of the preliminary #include <sys/stat.h>
|
||||
|
|
@ -58,16 +51,42 @@ orig_stat (const char *filename, struct stat *buf)
|
|||
#include <limits.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "dosname.h"
|
||||
#include "filename.h"
|
||||
#include "malloca.h"
|
||||
#include "verify.h"
|
||||
|
||||
#if REPLACE_FUNC_STAT_DIR
|
||||
# include "pathmax.h"
|
||||
/* The only known systems where REPLACE_FUNC_STAT_DIR is needed also
|
||||
have a constant PATH_MAX. */
|
||||
# ifndef PATH_MAX
|
||||
# error "Please port this replacement to your platform"
|
||||
# endif
|
||||
#ifdef WINDOWS_NATIVE
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
# include "stat-w32.h"
|
||||
#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
|
||||
|
||||
/* Store information about NAME into ST. Work around bugs with
|
||||
|
|
@ -77,13 +96,319 @@ orig_stat (const char *filename, struct stat *buf)
|
|||
correctly. */
|
||||
|
||||
int
|
||||
rpl_stat (char const *name, struct stat *st)
|
||||
rpl_stat (char const *name, struct stat *buf)
|
||||
{
|
||||
int result = orig_stat (name, st);
|
||||
#if REPLACE_FUNC_STAT_FILE
|
||||
#ifdef WINDOWS_NATIVE
|
||||
/* 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
|
||||
trailing slash. */
|
||||
if (result == 0 && !S_ISDIR (st->st_mode))
|
||||
if (result == 0 && !S_ISDIR (buf->st_mode))
|
||||
{
|
||||
size_t len = strlen (name);
|
||||
if (ISSLASH (name[len - 1]))
|
||||
|
|
@ -92,47 +417,7 @@ rpl_stat (char const *name, struct stat *st)
|
|||
return -1;
|
||||
}
|
||||
}
|
||||
#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 */
|
||||
# endif /* REPLACE_FUNC_STAT_FILE */
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
# elif ((defined __APPLE__ && defined __MACH__ \
|
||||
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
||||
: __GNUC__) \
|
||||
|| 061200 <= __HP_cc || 061200 <= __HP_aCC \
|
||||
|| (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
|
||||
|| __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)
|
||||
# define _Alignas(a) __attribute__ ((__aligned__ (a)))
|
||||
# elif 1300 <= _MSC_VER
|
||||
|
|
|
|||
|
|
@ -128,8 +128,13 @@
|
|||
Return an unspecified value if BITS == 0, adding a check to pacify
|
||||
picky compilers. */
|
||||
|
||||
# define _STDINT_MIN(signed, bits, zero) \
|
||||
((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero))
|
||||
/* These are separate macros, because if you try to merge these macros into
|
||||
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) \
|
||||
(((((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
|
||||
# if @APPLE_UNIVERSAL_BUILD@
|
||||
# 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)
|
||||
# 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)
|
||||
# endif
|
||||
# else
|
||||
# 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 \
|
||||
_STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
||||
# endif
|
||||
|
|
@ -528,9 +533,13 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
|
|||
/* sig_atomic_t limits */
|
||||
# undef SIG_ATOMIC_MIN
|
||||
# undef SIG_ATOMIC_MAX
|
||||
# define SIG_ATOMIC_MIN \
|
||||
_STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
||||
0@SIG_ATOMIC_T_SUFFIX@)
|
||||
# if @HAVE_SIGNED_SIG_ATOMIC_T@
|
||||
# define SIG_ATOMIC_MIN \
|
||||
_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 \
|
||||
_STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
||||
0@SIG_ATOMIC_T_SUFFIX@)
|
||||
|
|
@ -566,16 +575,26 @@ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
|
|||
# endif
|
||||
# undef WCHAR_MIN
|
||||
# undef WCHAR_MAX
|
||||
# define WCHAR_MIN \
|
||||
_STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||
# if @HAVE_SIGNED_WCHAR_T@
|
||||
# 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 \
|
||||
_STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||
|
||||
/* wint_t limits */
|
||||
# undef WINT_MIN
|
||||
# undef WINT_MAX
|
||||
# define WINT_MIN \
|
||||
_STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||
# if @HAVE_SIGNED_WINT_T@
|
||||
# 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 \
|
||||
_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. */
|
||||
|
||||
|
||||
/* 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. */
|
||||
#if @GNULIB_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.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
|
@ -72,6 +72,75 @@
|
|||
# define stat _stati64
|
||||
#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
|
||||
# ifdef _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));
|
||||
# endif
|
||||
_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@
|
||||
/* Above, we define stat to _stati64. */
|
||||
# define fstat _fstati64
|
||||
|
|
@ -378,6 +450,9 @@ _GL_CXXALIAS_SYS (fstatat, int,
|
|||
(int fd, char const *name, struct stat *st, int flags));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (fstatat);
|
||||
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||
# undef fstatat
|
||||
# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fstatat
|
||||
# if HAVE_RAW_DECL_FSTATAT
|
||||
|
|
@ -476,6 +551,9 @@ _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
|
|||
# if @HAVE_LSTAT@
|
||||
_GL_CXXALIASWARN (lstat);
|
||||
# endif
|
||||
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||
# undef lstat
|
||||
# define lstat lstat_used_without_requesting_gnulib_module_lstat
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef lstat
|
||||
# if HAVE_RAW_DECL_LSTAT
|
||||
|
|
@ -625,63 +703,69 @@ _GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
|
|||
|
||||
#if @GNULIB_STAT@
|
||||
# if @REPLACE_STAT@
|
||||
/* We can't use the object-like #define stat rpl_stat, because of
|
||||
struct stat. This means that rpl_stat will not be used if the user
|
||||
does (stat)(a,b). Oh well. */
|
||||
# if defined _AIX && defined stat && defined _LARGE_FILES
|
||||
/* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
|
||||
so we have to replace stat64() instead of stat(). */
|
||||
# undef stat64
|
||||
# define stat64(name, st) rpl_stat (name, st)
|
||||
# elif @WINDOWS_64_BIT_ST_SIZE@
|
||||
/* Above, we define stat to _stati64. */
|
||||
# if defined __MINGW32__ && defined _stati64
|
||||
# ifndef _USE_32BIT_TIME_T
|
||||
/* The system headers define _stati64 to _stat64. */
|
||||
# undef _stat64
|
||||
# define _stat64(name, st) rpl_stat (name, st)
|
||||
# if !@GNULIB_OVERRIDES_STRUCT_STAT@
|
||||
/* We can't use the object-like #define stat rpl_stat, because of
|
||||
struct stat. This means that rpl_stat will not be used if the user
|
||||
does (stat)(a,b). Oh well. */
|
||||
# if defined _AIX && defined stat && defined _LARGE_FILES
|
||||
/* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
|
||||
so we have to replace stat64() instead of stat(). */
|
||||
# undef stat64
|
||||
# define stat64(name, st) rpl_stat (name, st)
|
||||
# elif @WINDOWS_64_BIT_ST_SIZE@
|
||||
/* Above, we define stat to _stati64. */
|
||||
# if defined __MINGW32__ && defined _stati64
|
||||
# ifndef _USE_32BIT_TIME_T
|
||||
/* The system headers define _stati64 to _stat64. */
|
||||
# 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
|
||||
# elif defined _MSC_VER && defined _stati64
|
||||
# elif defined __MINGW32__ && defined stat
|
||||
# ifdef _USE_32BIT_TIME_T
|
||||
/* The system headers define _stati64 to _stat32i64. */
|
||||
/* The system headers define stat to _stat32i64. */
|
||||
# undef _stat32i64
|
||||
# define _stat32i64(name, st) rpl_stat (name, st)
|
||||
# else
|
||||
/* The system headers define _stati64 to _stat64. */
|
||||
/* The system headers define stat 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
|
||||
# elif defined __MINGW32__ && defined stat
|
||||
# ifdef _USE_32BIT_TIME_T
|
||||
/* The system headers define stat to _stat32i64. */
|
||||
# undef _stat32i64
|
||||
# define _stat32i64(name, st) rpl_stat (name, st)
|
||||
# else
|
||||
/* The system headers define stat to _stat64. */
|
||||
# undef _stat64
|
||||
# define _stat64(name, st) rpl_stat (name, st)
|
||||
# endif
|
||||
# elif defined _MSC_VER && defined 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 */
|
||||
# elif defined _MSC_VER && defined 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 */
|
||||
# endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */
|
||||
_GL_EXTERN_C int stat (const char *name, struct stat *buf)
|
||||
_GL_ARG_NONNULL ((1, 2));
|
||||
# endif
|
||||
#elif @GNULIB_OVERRIDES_STRUCT_STAT@
|
||||
/* see above:
|
||||
#define stat stat_used_without_requesting_gnulib_module_stat
|
||||
*/
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef stat
|
||||
# if HAVE_RAW_DECL_STAT
|
||||
|
|
|
|||
|
|
@ -42,6 +42,48 @@
|
|||
# define _GL_WINDOWS_64_BIT_OFF_T 1
|
||||
#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>. */
|
||||
/* But avoid namespace pollution on glibc systems. */
|
||||
#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ try_nocreate (char *tmpl, void *flags _GL_UNUSED)
|
|||
{
|
||||
struct_stat64 st;
|
||||
|
||||
if (__lxstat64 (_STAT_VER, tmpl, &st) == 0)
|
||||
if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW)
|
||||
__set_errno (EEXIST);
|
||||
return errno == ENOENT ? 0 : -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,6 +120,24 @@ _GL_CXXALIAS_SYS (nanosleep, int,
|
|||
_GL_CXXALIASWARN (nanosleep);
|
||||
# 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. */
|
||||
# if @GNULIB_MKTIME@
|
||||
# if @REPLACE_MKTIME@
|
||||
|
|
@ -187,7 +205,7 @@ _GL_CXXALIASWARN (gmtime_r);
|
|||
/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
|
||||
<http://www.opengroup.org/susv3xsh/localtime.html> and
|
||||
<http://www.opengroup.org/susv3xsh/gmtime.html>. */
|
||||
# if @GNULIB_GETTIMEOFDAY@
|
||||
# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@
|
||||
# if @REPLACE_LOCALTIME@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef localtime
|
||||
|
|
@ -202,7 +220,7 @@ _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
|
|||
_GL_CXXALIASWARN (localtime);
|
||||
# endif
|
||||
|
||||
# if @GNULIB_GETTIMEOFDAY@
|
||||
# if 0 || @REPLACE_GMTIME@
|
||||
# if @REPLACE_GMTIME@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef gmtime
|
||||
|
|
@ -233,6 +251,41 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
|
|||
_GL_CXXALIASWARN (strptime);
|
||||
# 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@
|
||||
typedef struct tm_zone *timezone_t;
|
||||
_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
|
||||
|
|
|
|||
|
|
@ -127,11 +127,18 @@
|
|||
# include <sys/types.h>
|
||||
#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.
|
||||
But avoid namespace pollution on glibc systems. */
|
||||
#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
|
||||
# define __need_getopt
|
||||
# include <getopt.h>
|
||||
# include <getopt-cdefs.h>
|
||||
# include <getopt-pfx-core.h>
|
||||
#endif
|
||||
|
||||
#ifndef _GL_INLINE_HEADER_BEGIN
|
||||
|
|
@ -142,13 +149,6 @@ _GL_INLINE_HEADER_BEGIN
|
|||
# define _GL_UNISTD_INLINE _GL_INLINE
|
||||
#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>. */
|
||||
|
||||
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
|
||||
|
|
@ -1457,6 +1457,36 @@ _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
|
|||
#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@
|
||||
/* 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. */
|
||||
|
|
|
|||
|
|
@ -118,6 +118,14 @@
|
|||
# include "fpucw.h"
|
||||
#endif
|
||||
|
||||
#ifndef FALLTHROUGH
|
||||
# if __GNUC__ < 7
|
||||
# define FALLTHROUGH ((void) 0)
|
||||
# else
|
||||
# define FALLTHROUGH __attribute__ ((__fallthrough__))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Default parameters. */
|
||||
#ifndef VASNPRINTF
|
||||
# if WIDE_CHAR_VERSION
|
||||
|
|
@ -156,6 +164,7 @@
|
|||
# define SNPRINTF snwprintf
|
||||
# else
|
||||
# define SNPRINTF _snwprintf
|
||||
# define USE_MSVC__SNPRINTF 1
|
||||
# endif
|
||||
# else
|
||||
/* Unix. */
|
||||
|
|
@ -181,7 +190,9 @@
|
|||
/* Here we need to call the native snprintf, not rpl_snprintf. */
|
||||
# undef snprintf
|
||||
# else
|
||||
/* MSVC versions < 14 did not have snprintf, only _snprintf. */
|
||||
# define SNPRINTF _snprintf
|
||||
# define USE_MSVC__SNPRINTF 1
|
||||
# endif
|
||||
# else
|
||||
/* Unix. */
|
||||
|
|
@ -208,7 +219,7 @@
|
|||
#undef remainder
|
||||
#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)
|
||||
# define local_strnlen strnlen
|
||||
# else
|
||||
|
|
@ -224,7 +235,7 @@ local_strnlen (const char *string, size_t maxlen)
|
|||
# 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
|
||||
# define local_wcslen wcslen
|
||||
# else
|
||||
|
|
@ -247,7 +258,7 @@ local_wcslen (const wchar_t *s)
|
|||
# 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
|
||||
# define local_wcsnlen wcsnlen
|
||||
# else
|
||||
|
|
@ -1517,7 +1528,7 @@ is_borderline (const char *digits, size_t precision)
|
|||
|
||||
#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'
|
||||
parametrization and the 'char' parametrization get compiled in the same
|
||||
|
|
@ -2392,7 +2403,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
}
|
||||
}
|
||||
#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'
|
||||
# if WIDE_CHAR_VERSION
|
||||
&& 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
|
||||
int has_width;
|
||||
#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;
|
||||
#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;
|
||||
size_t precision;
|
||||
#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
|
||||
has_width = 0;
|
||||
#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;
|
||||
if (dp->width_start != dp->width_end)
|
||||
{
|
||||
|
|
@ -4657,7 +4668,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
}
|
||||
#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;
|
||||
precision = 6;
|
||||
if (dp->precision_start != dp->precision_end)
|
||||
|
|
@ -4834,7 +4845,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
*fbp++ = 'l';
|
||||
# endif
|
||||
#endif
|
||||
/*FALLTHROUGH*/
|
||||
FALLTHROUGH;
|
||||
case TYPE_LONGINT:
|
||||
case TYPE_ULONGINT:
|
||||
#if HAVE_WINT_T
|
||||
|
|
@ -4858,7 +4869,10 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
#endif
|
||||
*fbp = dp->conversion;
|
||||
#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[2] = 'n';
|
||||
fbp[3] = '\0';
|
||||
|
|
@ -4872,6 +4886,13 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
in format strings in writable memory may crash the program
|
||||
(if compiled with _FORTIFY_SOURCE=2), so we should avoid it
|
||||
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
|
||||
%n because:
|
||||
- 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. */
|
||||
if (retcount < 0)
|
||||
{
|
||||
# if !HAVE_SNPRINTF_RETVAL_C99
|
||||
# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
|
||||
/* HP-UX 10.20 snprintf() is doubly deficient:
|
||||
It doesn't understand the '%n' directive,
|
||||
*and* it returns -1 (rather than the length
|
||||
|
|
|
|||
|
|
@ -113,12 +113,16 @@
|
|||
# define WEOF -1
|
||||
# endif
|
||||
#else
|
||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h>.
|
||||
This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
|
||||
"unchanged by default argument promotions". Override it. */
|
||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
|
||||
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
|
||||
wint_t must be "unchanged by default argument promotions". Override it. */
|
||||
# if @GNULIB_OVERRIDES_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;
|
||||
# undef wint_t
|
||||
# define wint_t rpl_wint_t
|
||||
|
|
@ -1036,6 +1040,38 @@ _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
|
|||
#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
|
||||
|
|
|
|||
|
|
@ -56,11 +56,13 @@
|
|||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
/* mingw has declarations of towupper and towlower in <ctype.h> as
|
||||
well <wctype.h>. Include <ctype.h> in advance to avoid rpl_ prefix
|
||||
being added to the declarations. */
|
||||
#ifdef __MINGW32__
|
||||
/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and
|
||||
isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include
|
||||
<ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the
|
||||
declarations. */
|
||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
# include <ctype.h>
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
/* Include the original <wctype.h> if it exists.
|
||||
|
|
@ -105,12 +107,16 @@ _GL_INLINE_HEADER_BEGIN
|
|||
# define WEOF -1
|
||||
# endif
|
||||
#else
|
||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h>.
|
||||
This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
|
||||
"unchanged by default argument promotions". Override it. */
|
||||
/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
|
||||
<stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
|
||||
wint_t must be "unchanged by default argument promotions". Override it. */
|
||||
# if @GNULIB_OVERRIDES_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;
|
||||
# undef wint_t
|
||||
# define wint_t rpl_wint_t
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ typedef size_t __xalloc_count_type;
|
|||
#if 7 <= __GNUC__
|
||||
# define xalloc_oversized(n, s) \
|
||||
__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) \
|
||||
(__builtin_constant_p (n) && __builtin_constant_p (s) \
|
||||
? __xalloc_oversized (n, s) \
|
||||
|
|
|
|||
|
|
@ -194,6 +194,8 @@ x2nrealloc (void *p, size_t *pn, size_t s)
|
|||
n = DEFAULT_MXFAST / s;
|
||||
n += !n;
|
||||
}
|
||||
if (xalloc_oversized (n, s))
|
||||
xalloc_die ();
|
||||
}
|
||||
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 This file is free software; the Free Software Foundation
|
||||
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_GNU_SOURCE])])
|
||||
|
||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
AC_CHECK_HEADERS_ONCE([unistd.h])
|
||||
AC_CHECK_FUNCS_ONCE([symlink])
|
||||
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)';; #(
|
||||
*) gl_cv_header_working_fcntl_h='no';;
|
||||
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 #(
|
||||
*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 This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
|
@ -14,7 +14,7 @@ AC_DEFUN([gl_FLOAT_H],
|
|||
aix* | beos* | openbsd* | mirbsd* | irix*)
|
||||
FLOAT_H=float.h
|
||||
;;
|
||||
freebsd*)
|
||||
freebsd* | dragonfly*)
|
||||
case "$host_cpu" in
|
||||
changequote(,)dnl
|
||||
i[34567]86 )
|
||||
|
|
@ -42,7 +42,7 @@ changequote([,])dnl
|
|||
;;
|
||||
esac
|
||||
case "$host_os" in
|
||||
aix* | freebsd* | linux*)
|
||||
aix* | freebsd* | dragonfly* | linux*)
|
||||
if test -n "$FLOAT_H"; then
|
||||
REPLACE_FLOAT_LDBL=1
|
||||
fi
|
||||
|
|
@ -76,7 +76,9 @@ int main ()
|
|||
[gl_cv_func_itold_works="guessing no"],
|
||||
[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
|
||||
])
|
||||
])
|
||||
|
|
|
|||
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 This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
|
@ -32,9 +32,16 @@ AC_DEFUN([gl_FUNC_GETOPT_POSIX],
|
|||
# getopt_long_only.
|
||||
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])
|
||||
|
||||
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.
|
||||
|
|
@ -354,15 +361,19 @@ dnl is ambiguous with environment values that contain newlines.
|
|||
|
||||
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_]],
|
||||
[Define to rpl_ if the getopt replacement functions and variables
|
||||
should be used.])
|
||||
GETOPT_H=getopt.h
|
||||
GETOPT_CDEFS_H=getopt-cdefs.h
|
||||
AC_SUBST([GETOPT_H])
|
||||
])
|
||||
|
||||
# Prerequisites of lib/getopt*.
|
||||
AC_DEFUN([gl_PREREQ_GETOPT],
|
||||
[
|
||||
AC_CHECK_DECLS_ONCE([getenv])
|
||||
AC_SUBST([GETOPT_CDEFS_H])
|
||||
])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# serial 21
|
||||
# serial 24
|
||||
|
||||
# Copyright (C) 2001-2003, 2005, 2007, 2009-2017 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
|
|
@ -9,9 +9,10 @@ dnl From Jim Meyering.
|
|||
|
||||
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([AC_C_RESTRICT])
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_REQUIRE([gl_HEADER_SYS_TIME_H])
|
||||
AC_CHECK_FUNCS_ONCE([gettimeofday])
|
||||
|
||||
gl_gettimeofday_timezone=void
|
||||
|
|
@ -54,19 +55,11 @@ int gettimeofday (struct timeval *restrict, struct timezone *restrict);
|
|||
if test $REPLACE_STRUCT_TIMEVAL = 1; then
|
||||
REPLACE_GETTIMEOFDAY=1
|
||||
fi
|
||||
m4_ifdef([gl_FUNC_TZSET_CLOBBER], [
|
||||
gl_FUNC_TZSET_CLOBBER
|
||||
case "$gl_cv_func_tzset_clobber" in
|
||||
*yes)
|
||||
REPLACE_GETTIMEOFDAY=1
|
||||
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
|
||||
])
|
||||
dnl On mingw, the original gettimeofday has only a precision of 15.6
|
||||
dnl milliseconds. So override it.
|
||||
case "$host_os" in
|
||||
mingw*) REPLACE_GETTIMEOFDAY=1 ;;
|
||||
esac
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
|
||||
[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([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
|
||||
|
||||
AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer],
|
||||
[gl_cv_func_gettimeofday_clobber],
|
||||
|
|
@ -111,6 +105,8 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
|||
case "$host_os" in
|
||||
# Guess all is fine on glibc systems.
|
||||
*-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.
|
||||
*) gl_cv_func_gettimeofday_clobber="guessing yes" ;;
|
||||
esac
|
||||
|
|
@ -119,20 +115,12 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
|||
case "$gl_cv_func_gettimeofday_clobber" in
|
||||
*yes)
|
||||
REPLACE_GETTIMEOFDAY=1
|
||||
gl_GETTIMEOFDAY_REPLACE_LOCALTIME
|
||||
AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1],
|
||||
[Define if gettimeofday clobbers the localtime buffer.])
|
||||
gl_LOCALTIME_BUFFER_NEEDED
|
||||
;;
|
||||
esac
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [
|
||||
REPLACE_GMTIME=1
|
||||
REPLACE_LOCALTIME=1
|
||||
])
|
||||
|
||||
# Prerequisites of lib/gettimeofday.c.
|
||||
AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [
|
||||
AC_CHECK_HEADERS([sys/timeb.h])
|
||||
AC_CHECK_FUNCS([_ftime])
|
||||
])
|
||||
AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# gnulib-common.m4 serial 37
|
||||
# gnulib-common.m4 serial 38
|
||||
dnl Copyright (C) 2007-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,
|
||||
|
|
@ -256,7 +256,8 @@ AC_DEFUN([gl_PROG_AR_RANLIB],
|
|||
dnl library formats. In particular, the GNU binutils programs ar and ranlib
|
||||
dnl produce libraries that work only with gcc, not with 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_EGREP_CPP([Amsterdam],
|
||||
|
|
@ -288,7 +289,9 @@ Amsterdam
|
|||
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 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
|
||||
|
||||
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 extern-inline:
|
||||
# Code from module fcntl-h:
|
||||
# Code from module filename:
|
||||
# Code from module float:
|
||||
# Code from module getopt-gnu:
|
||||
# Code from module getopt-posix:
|
||||
|
|
@ -74,9 +75,11 @@ AC_DEFUN([gl_EARLY],
|
|||
AC_REQUIRE([AC_SYS_LARGEFILE])
|
||||
# Code from module limits-h:
|
||||
# Code from module localcharset:
|
||||
# Code from module localtime-buffer:
|
||||
# Code from module lstat:
|
||||
# Code from module malloc-gnu:
|
||||
# Code from module malloc-posix:
|
||||
# Code from module malloca:
|
||||
# Code from module mbrtowc:
|
||||
# Code from module mbsinit:
|
||||
# Code from module memchr:
|
||||
|
|
@ -184,19 +187,13 @@ AC_SUBST([LTALLOCA])
|
|||
AC_LIBOBJ([itold])
|
||||
fi
|
||||
gl_FUNC_GETOPT_GNU
|
||||
if test $REPLACE_GETOPT = 1; then
|
||||
AC_LIBOBJ([getopt])
|
||||
AC_LIBOBJ([getopt1])
|
||||
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])
|
||||
dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required
|
||||
dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are
|
||||
dnl done in the getopt-posix module.
|
||||
gl_FUNC_GETOPT_POSIX
|
||||
if test $REPLACE_GETOPT = 1; then
|
||||
AC_LIBOBJ([getopt])
|
||||
AC_LIBOBJ([getopt1])
|
||||
gl_PREREQ_GETOPT
|
||||
dnl Arrange for unistd.h to include getopt.h.
|
||||
GNULIB_GL_UNISTD_H_GETOPT=1
|
||||
fi
|
||||
|
|
@ -222,6 +219,8 @@ AC_SUBST([LTALLOCA])
|
|||
gl_LOCALCHARSET
|
||||
LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
|
||||
AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
|
||||
AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
|
||||
AC_LIBOBJ([localtime-buffer])
|
||||
gl_FUNC_LSTAT
|
||||
if test $REPLACE_LSTAT = 1; then
|
||||
AC_LIBOBJ([lstat])
|
||||
|
|
@ -238,6 +237,7 @@ AC_SUBST([LTALLOCA])
|
|||
AC_LIBOBJ([malloc])
|
||||
fi
|
||||
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
|
||||
gl_MALLOCA
|
||||
gl_FUNC_MBRTOWC
|
||||
if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
|
||||
AC_LIBOBJ([mbrtowc])
|
||||
|
|
@ -283,6 +283,7 @@ AC_SUBST([LTALLOCA])
|
|||
if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
|
||||
AC_LIBOBJ([msvc-nothrow])
|
||||
fi
|
||||
gl_MODULE_INDICATOR([msvc-nothrow])
|
||||
gl_MULTIARCH
|
||||
gl_PATHMAX
|
||||
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
|
||||
|
|
@ -311,6 +312,11 @@ AC_SUBST([LTALLOCA])
|
|||
gl_FUNC_STAT
|
||||
if test $REPLACE_STAT = 1; then
|
||||
AC_LIBOBJ([stat])
|
||||
case "$host_os" in
|
||||
mingw*)
|
||||
AC_LIBOBJ([stat-w32])
|
||||
;;
|
||||
esac
|
||||
gl_PREREQ_STAT
|
||||
fi
|
||||
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
|
||||
# gnulib-tool and may be removed by future gnulib-tool invocations.
|
||||
AC_DEFUN([gl_FILE_LIST], [
|
||||
build-aux/snippet/_Noreturn.h
|
||||
build-aux/snippet/arg-nonnull.h
|
||||
build-aux/snippet/c++defs.h
|
||||
build-aux/snippet/warn-on-use.h
|
||||
lib/_Noreturn.h
|
||||
lib/alloca.c
|
||||
lib/alloca.in.h
|
||||
lib/arg-nonnull.h
|
||||
lib/argmatch.c
|
||||
lib/argmatch.h
|
||||
lib/argp-ba.c
|
||||
|
|
@ -550,6 +554,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/argp.h
|
||||
lib/asnprintf.c
|
||||
lib/basename-lgpl.c
|
||||
lib/c++defs.h
|
||||
lib/c-ctype.c
|
||||
lib/c-ctype.h
|
||||
lib/c-strcase.h
|
||||
|
|
@ -566,9 +571,15 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/exitfail.c
|
||||
lib/exitfail.h
|
||||
lib/fcntl.in.h
|
||||
lib/filename.h
|
||||
lib/float+.h
|
||||
lib/float.c
|
||||
lib/float.in.h
|
||||
lib/getopt-cdefs.in.h
|
||||
lib/getopt-core.h
|
||||
lib/getopt-ext.h
|
||||
lib/getopt-pfx-core.h
|
||||
lib/getopt-pfx-ext.h
|
||||
lib/getopt.c
|
||||
lib/getopt.in.h
|
||||
lib/getopt1.c
|
||||
|
|
@ -585,8 +596,13 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/limits.in.h
|
||||
lib/localcharset.c
|
||||
lib/localcharset.h
|
||||
lib/localtime-buffer.c
|
||||
lib/localtime-buffer.h
|
||||
lib/lstat.c
|
||||
lib/malloc.c
|
||||
lib/malloca.c
|
||||
lib/malloca.h
|
||||
lib/malloca.valgrind
|
||||
lib/mbrtowc.c
|
||||
lib/mbsinit.c
|
||||
lib/memchr.c
|
||||
|
|
@ -616,6 +632,8 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/secure_getenv.c
|
||||
lib/size_max.h
|
||||
lib/sleep.c
|
||||
lib/stat-w32.c
|
||||
lib/stat-w32.h
|
||||
lib/stat.c
|
||||
lib/stdalign.in.h
|
||||
lib/stdbool.in.h
|
||||
|
|
@ -652,6 +670,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/vasnprintf.h
|
||||
lib/verify.h
|
||||
lib/vsnprintf.c
|
||||
lib/warn-on-use.h
|
||||
lib/wchar.in.h
|
||||
lib/wctype-h.c
|
||||
lib/wctype.in.h
|
||||
|
|
@ -669,6 +688,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/configmake.m4
|
||||
m4/dirname.m4
|
||||
m4/double-slash-root.m4
|
||||
m4/eealloc.m4
|
||||
m4/errno_h.m4
|
||||
m4/error.m4
|
||||
m4/exponentd.m4
|
||||
|
|
@ -693,9 +713,11 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/locale-fr.m4
|
||||
m4/locale-ja.m4
|
||||
m4/locale-zh.m4
|
||||
m4/localtime-buffer.m4
|
||||
m4/longlong.m4
|
||||
m4/lstat.m4
|
||||
m4/malloc.m4
|
||||
m4/malloca.m4
|
||||
m4/math_h.m4
|
||||
m4/mbrtowc.m4
|
||||
m4/mbsinit.m4
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# include_next.m4 serial 23
|
||||
# include_next.m4 serial 24
|
||||
dnl Copyright (C) 2006-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,
|
||||
|
|
@ -6,7 +6,8 @@ dnl with or without modifications, as long as this notice is preserved.
|
|||
|
||||
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 INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
|
||||
dnl 'include' otherwise.
|
||||
|
|
|
|||
|
|
@ -126,9 +126,24 @@ AC_DEFUN([gl_LARGEFILE],
|
|||
else
|
||||
WINDOWS_64_BIT_OFF_T=0
|
||||
fi
|
||||
dnl But all native Windows platforms (including mingw64) have a 32-bit
|
||||
dnl st_size member in 'struct stat'.
|
||||
WINDOWS_64_BIT_ST_SIZE=1
|
||||
dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat'
|
||||
dnl to 'struct _stat32i64' or 'struct _stat64' (depending on
|
||||
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.
|
||||
|
|
|
|||
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.
|
||||
#
|
||||
|
|
@ -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 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],
|
||||
[gl_cv_func_lstat_dereferences_slashed_symlink],
|
||||
[rm -f conftest.sym conftest.file
|
||||
|
|
@ -54,6 +55,9 @@ AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
|
|||
*-gnu*)
|
||||
# Guess yes on glibc systems.
|
||||
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.
|
||||
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 Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
|
|
@ -563,9 +563,11 @@ AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
|
|||
dnl is present.
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
# Guess no on AIX and glibc systems.
|
||||
# Guess no on AIX and glibc systems.
|
||||
aix* | *-gnu*)
|
||||
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" ;;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
|
|
@ -592,6 +594,7 @@ dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932
|
|||
|
||||
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],
|
||||
[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=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.
|
||||
|
|
@ -639,7 +647,7 @@ AC_DEFUN([AC_FUNC_MBRTOWC],
|
|||
[
|
||||
dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
|
||||
AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
|
||||
gl_cv_func_mbrtowc,
|
||||
[gl_cv_func_mbrtowc],
|
||||
[AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[/* 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;
|
||||
mbstate_t state;
|
||||
return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
|
||||
gl_cv_func_mbrtowc=yes,
|
||||
gl_cv_func_mbrtowc=no)])
|
||||
[gl_cv_func_mbrtowc=yes],
|
||||
[gl_cv_func_mbrtowc=no])])
|
||||
if test $gl_cv_func_mbrtowc = yes; then
|
||||
AC_DEFINE([HAVE_MBRTOWC], [1],
|
||||
[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 This file is free software; the Free Software Foundation
|
||||
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_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
|
||||
dnl Check for prerequisites for memory fence checks.
|
||||
gl_FUNC_MMAP_ANON
|
||||
AC_CHECK_HEADERS_ONCE([sys/mman.h])
|
||||
|
|
@ -73,12 +75,21 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
|
|||
result |= 4;
|
||||
}
|
||||
return result;
|
||||
]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
|
||||
[dnl Be pessimistic for now.
|
||||
gl_cv_func_memchr_works="guessing no"])])
|
||||
if test "$gl_cv_func_memchr_works" != yes; then
|
||||
REPLACE_MEMCHR=1
|
||||
fi
|
||||
]])],
|
||||
[gl_cv_func_memchr_works=yes],
|
||||
[gl_cv_func_memchr_works=no],
|
||||
[case "$host_os" in
|
||||
# Guess yes on native Windows.
|
||||
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
|
||||
])
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#serial 23
|
||||
#serial 24
|
||||
|
||||
# Copyright (C) 2001, 2003-2007, 2009-2017 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
|
|
@ -59,6 +59,8 @@ AC_DEFUN([gl_FUNC_MKSTEMP],
|
|||
[case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-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.
|
||||
*) gl_cv_func_working_mkstemp="guessing no" ;;
|
||||
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 This file is free software; the Free Software Foundation
|
||||
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=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
changequote(,)dnl
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
||||
# Guess yes on FreeBSD >= 5.
|
||||
|
|
@ -79,10 +79,19 @@ changequote(,)dnl
|
|||
netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
||||
gl_cv_func_printf_sizes_c99="guessing no";;
|
||||
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.
|
||||
*) gl_cv_func_printf_sizes_c99="guessing no";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -122,14 +131,19 @@ int main ()
|
|||
}]])],
|
||||
[gl_cv_func_printf_long_double=yes],
|
||||
[gl_cv_func_printf_long_double=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
beos*) gl_cv_func_printf_long_double="guessing no";;
|
||||
mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
|
||||
*) gl_cv_func_printf_long_double="guessing yes";;
|
||||
[case "$host_os" in
|
||||
beos*) gl_cv_func_printf_long_double="guessing no";;
|
||||
# Guess yes on MSVC, no on mingw.
|
||||
mingw*) AC_EGREP_CPP([Known], [
|
||||
#ifdef _MSC_VER
|
||||
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
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -217,8 +231,8 @@ int main ()
|
|||
[gl_cv_func_printf_infinite=yes],
|
||||
[gl_cv_func_printf_infinite=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
changequote(,)dnl
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_printf_infinite="guessing yes";;
|
||||
# Guess yes on FreeBSD >= 6.
|
||||
|
|
@ -236,10 +250,19 @@ changequote(,)dnl
|
|||
netbsd*) gl_cv_func_printf_infinite="guessing yes";;
|
||||
# Guess yes on BeOS.
|
||||
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.
|
||||
*) gl_cv_func_printf_infinite="guessing no";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -419,13 +442,12 @@ int main ()
|
|||
}]])],
|
||||
[gl_cv_func_printf_infinite_long_double=yes],
|
||||
[gl_cv_func_printf_infinite_long_double=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_cpu" in
|
||||
[case "$host_cpu" in
|
||||
# Guess no on ia64, x86_64, i386.
|
||||
ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||
*)
|
||||
case "$host_os" in
|
||||
changequote(,)dnl
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
||||
# Guess yes on FreeBSD >= 6.
|
||||
|
|
@ -434,12 +456,21 @@ changequote(,)dnl
|
|||
# Guess yes on HP-UX >= 11.
|
||||
hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||
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.
|
||||
*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
;;
|
||||
|
|
@ -489,6 +520,13 @@ int main ()
|
|||
&& strcmp (buf, "0x6.0ap-2 33") != 0
|
||||
&& strcmp (buf, "0xc.14p-3 33") != 0))
|
||||
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
|
||||
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
||||
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 no"])
|
||||
;;
|
||||
# Guess no on native Windows.
|
||||
mingw*) gl_cv_func_printf_directive_a="guessing no";;
|
||||
# If we don't know, assume the worst.
|
||||
*) gl_cv_func_printf_directive_a="guessing no";;
|
||||
esac
|
||||
|
|
@ -570,8 +610,8 @@ int main ()
|
|||
[gl_cv_func_printf_directive_f=yes],
|
||||
[gl_cv_func_printf_directive_f=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
changequote(,)dnl
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||
# Guess yes on FreeBSD >= 6.
|
||||
|
|
@ -581,12 +621,21 @@ changequote(,)dnl
|
|||
darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
|
||||
darwin*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||
# Guess yes on Solaris >= 2.10.
|
||||
solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
||||
solaris*) gl_cv_func_printf_sizes_c99="guessing no";;
|
||||
solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
|
||||
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.
|
||||
*) gl_cv_func_printf_directive_f="guessing no";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -638,13 +687,11 @@ int main ()
|
|||
}]])],
|
||||
[gl_cv_func_printf_directive_n=yes],
|
||||
[gl_cv_func_printf_directive_n=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
[case "$host_os" in
|
||||
# Guess no on native Windows.
|
||||
mingw*) gl_cv_func_printf_directive_n="guessing no";;
|
||||
*) gl_cv_func_printf_directive_n="guessing yes";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -719,12 +766,14 @@ int main ()
|
|||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
openbsd*) 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";;
|
||||
cygwin*) 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";;
|
||||
openbsd*) 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";;
|
||||
cygwin*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||
beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
|
||||
# Guess yes on native Windows.
|
||||
mingw*) gl_cv_func_printf_directive_ls="guessing yes";;
|
||||
*) gl_cv_func_printf_directive_ls="guessing yes";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
|
|
@ -763,6 +812,7 @@ changequote(,)dnl
|
|||
netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
|
||||
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";;
|
||||
*) gl_cv_func_printf_positions="guessing yes";;
|
||||
esac
|
||||
|
|
@ -801,6 +851,7 @@ changequote(,)dnl
|
|||
case "$host_os" in
|
||||
cygwin*) 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";;
|
||||
*) gl_cv_func_printf_flag_grouping="guessing yes";;
|
||||
esac
|
||||
|
|
@ -843,6 +894,8 @@ changequote(,)dnl
|
|||
hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
||||
# Guess no on HP-UX 10 and older.
|
||||
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.
|
||||
*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
||||
esac
|
||||
|
|
@ -886,6 +939,8 @@ changequote(,)dnl
|
|||
*-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
|
||||
# Guess yes on BeOS.
|
||||
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.
|
||||
*) gl_cv_func_printf_flag_zero="guessing no";;
|
||||
esac
|
||||
|
|
@ -1153,6 +1208,8 @@ changequote(,)dnl
|
|||
netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
||||
# Guess yes on BeOS.
|
||||
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.
|
||||
*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
||||
esac
|
||||
|
|
@ -1216,9 +1273,8 @@ int main ()
|
|||
}]])],
|
||||
[gl_cv_func_snprintf_retval_c99=yes],
|
||||
[gl_cv_func_snprintf_retval_c99=no],
|
||||
[
|
||||
[case "$host_os" in
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
||||
# Guess yes on FreeBSD >= 5.
|
||||
|
|
@ -1243,10 +1299,19 @@ changequote(,)dnl
|
|||
netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
||||
# Guess yes on BeOS.
|
||||
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.
|
||||
*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
])
|
||||
])
|
||||
|
|
@ -1326,6 +1391,8 @@ changequote(,)dnl
|
|||
netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
||||
# Guess yes on BeOS.
|
||||
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.
|
||||
*) gl_cv_func_snprintf_directive_n="guessing no";;
|
||||
esac
|
||||
|
|
@ -1342,6 +1409,7 @@ dnl Result is gl_cv_func_snprintf_size1.
|
|||
AC_DEFUN([gl_SNPRINTF_SIZE1],
|
||||
[
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
AC_REQUIRE([gl_SNPRINTF_PRESENCE])
|
||||
AC_CACHE_CHECK([whether snprintf respects a size of 1],
|
||||
[gl_cv_func_snprintf_size1],
|
||||
|
|
@ -1371,7 +1439,12 @@ int main()
|
|||
}]])],
|
||||
[gl_cv_func_snprintf_size1=yes],
|
||||
[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";;
|
||||
# Guess yes on BeOS.
|
||||
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";;
|
||||
# If we don't know, assume the worst.
|
||||
*) 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 This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
|
@ -48,6 +48,8 @@ handle_alarm (int sig)
|
|||
[case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-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.
|
||||
*) gl_cv_func_sleep_works="guessing no" ;;
|
||||
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.
|
||||
#
|
||||
|
|
@ -8,64 +8,60 @@
|
|||
|
||||
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_CHECK_FUNCS_ONCE([lstat])
|
||||
dnl mingw is the only known platform where stat(".") and stat("./") differ
|
||||
AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
|
||||
[gl_cv_func_stat_dir_slash],
|
||||
[AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#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],
|
||||
[case $host_os in
|
||||
mingw*) gl_cv_func_stat_dir_slash="guessing no";;
|
||||
*) gl_cv_func_stat_dir_slash="guessing yes";;
|
||||
esac])])
|
||||
dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
|
||||
dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
|
||||
dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
|
||||
AC_CACHE_CHECK([whether stat handles trailing slashes on files],
|
||||
[gl_cv_func_stat_file_slash],
|
||||
[touch conftest.tmp
|
||||
# Assume that if we have lstat, we can also check symlinks.
|
||||
if test $ac_cv_func_lstat = yes; then
|
||||
ln -s conftest.tmp conftest.lnk
|
||||
fi
|
||||
AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <sys/stat.h>
|
||||
case "$host_os" in
|
||||
mingw*)
|
||||
dnl On this platform, the original stat() returns st_atime, st_mtime,
|
||||
dnl st_ctime values that are affected by the time zone.
|
||||
REPLACE_STAT=1
|
||||
;;
|
||||
*)
|
||||
dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
|
||||
dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
|
||||
dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
|
||||
AC_CACHE_CHECK([whether stat handles trailing slashes on files],
|
||||
[gl_cv_func_stat_file_slash],
|
||||
[touch conftest.tmp
|
||||
# Assume that if we have lstat, we can also check symlinks.
|
||||
if test $ac_cv_func_lstat = yes; then
|
||||
ln -s conftest.tmp conftest.lnk
|
||||
fi
|
||||
AC_RUN_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <sys/stat.h>
|
||||
]], [[int result = 0;
|
||||
struct stat st;
|
||||
if (!stat ("conftest.tmp/", &st))
|
||||
result |= 1;
|
||||
struct stat st;
|
||||
if (!stat ("conftest.tmp/", &st))
|
||||
result |= 1;
|
||||
#if HAVE_LSTAT
|
||||
if (!stat ("conftest.lnk/", &st))
|
||||
result |= 2;
|
||||
if (!stat ("conftest.lnk/", &st))
|
||||
result |= 2;
|
||||
#endif
|
||||
return result;
|
||||
]])],
|
||||
[gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
|
||||
[case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
|
||||
# If we don't know, assume the worst.
|
||||
*) gl_cv_func_stat_file_slash="guessing no" ;;
|
||||
esac
|
||||
])
|
||||
rm -f conftest.tmp conftest.lnk])
|
||||
case $gl_cv_func_stat_dir_slash in
|
||||
*no) REPLACE_STAT=1
|
||||
AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
|
||||
help when passed a directory name with a trailing slash]);;
|
||||
esac
|
||||
case $gl_cv_func_stat_file_slash in
|
||||
*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]);;
|
||||
return result;
|
||||
]])],
|
||||
[gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
|
||||
[case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
|
||||
# If we don't know, assume the worst.
|
||||
*) gl_cv_func_stat_file_slash="guessing no" ;;
|
||||
esac
|
||||
])
|
||||
rm -f conftest.tmp conftest.lnk])
|
||||
case $gl_cv_func_stat_file_slash in
|
||||
*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.
|
||||
AC_DEFUN([gl_PREREQ_STAT], [:])
|
||||
# Prerequisites of lib/stat.c and lib/stat-w32.c.
|
||||
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__ \
|
||||
? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
|
||||
: __GNUC__) \
|
||||
|| __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \
|
||||
|| __ICC || 0x5110 <= __SUNPRO_C \
|
||||
|| (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
|
||||
|| __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \
|
||||
|| 1300 <= _MSC_VER)
|
||||
struct alignas_test { char c; char alignas (8) alignas_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 This file is free software; the Free Software Foundation
|
||||
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_PREREQ([2.59])dnl
|
||||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
||||
|
||||
AC_REQUIRE([gl_LIMITS_H])
|
||||
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||
|
|
@ -288,8 +289,12 @@ static const char *macro_values[] =
|
|||
]])],
|
||||
[gl_cv_header_working_stdint_h=yes],
|
||||
[],
|
||||
[dnl When cross-compiling, assume it works.
|
||||
gl_cv_header_working_stdint_h=yes
|
||||
[case "$host_os" in
|
||||
# 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_INTTYPES_H=0
|
||||
STDINT_H=stdint.h
|
||||
if test "$gl_cv_header_working_stdint_h" = yes; then
|
||||
HAVE_C99_STDINT_H=1
|
||||
dnl Now see whether the system <stdint.h> works without
|
||||
dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
|
||||
AC_CACHE_CHECK([whether stdint.h predates C++11],
|
||||
[gl_cv_header_stdint_predates_cxx11_h],
|
||||
[gl_cv_header_stdint_predates_cxx11_h=yes
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
case "$gl_cv_header_working_stdint_h" in
|
||||
*yes)
|
||||
HAVE_C99_STDINT_H=1
|
||||
dnl Now see whether the system <stdint.h> works without
|
||||
dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
|
||||
AC_CACHE_CHECK([whether stdint.h predates C++11],
|
||||
[gl_cv_header_stdint_predates_cxx11_h],
|
||||
[gl_cv_header_stdint_predates_cxx11_h=yes
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
|
||||
#include <stdint.h>
|
||||
]
|
||||
|
|
@ -315,45 +321,47 @@ gl_STDINT_INCLUDES
|
|||
[
|
||||
intmax_t im = INTMAX_MAX;
|
||||
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
|
||||
AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
|
||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||
AC_DEFINE([__STDC_LIMIT_MACROS], [1],
|
||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||
fi
|
||||
AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
|
||||
[gl_cv_header_stdint_width],
|
||||
[gl_cv_header_stdint_width=no
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
/* Work if build is not clean. */
|
||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
|
||||
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
|
||||
#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
|
||||
#endif
|
||||
#include <stdint.h>
|
||||
]gl_STDINT_INCLUDES[
|
||||
int iw = UINTMAX_WIDTH;
|
||||
]])],
|
||||
[gl_cv_header_stdint_width=yes])])
|
||||
if test "$gl_cv_header_stdint_width" = yes; then
|
||||
STDINT_H=
|
||||
fi
|
||||
else
|
||||
dnl Check for <sys/inttypes.h>, and for
|
||||
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
|
||||
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
|
||||
if test $ac_cv_header_sys_inttypes_h = yes; then
|
||||
HAVE_SYS_INTTYPES_H=1
|
||||
fi
|
||||
if test $ac_cv_header_sys_bitypes_h = yes; then
|
||||
HAVE_SYS_BITYPES_H=1
|
||||
fi
|
||||
gl_STDINT_TYPE_PROPERTIES
|
||||
fi
|
||||
if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
|
||||
AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
|
||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||
AC_DEFINE([__STDC_LIMIT_MACROS], [1],
|
||||
[Define to 1 if the system <stdint.h> predates C++11.])
|
||||
fi
|
||||
AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
|
||||
[gl_cv_header_stdint_width],
|
||||
[gl_cv_header_stdint_width=no
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[
|
||||
/* Work if build is not clean. */
|
||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
|
||||
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
|
||||
#define __STDC_WANT_IEC_60559_BFP_EXT__ 1
|
||||
#endif
|
||||
#include <stdint.h>
|
||||
]gl_STDINT_INCLUDES[
|
||||
int iw = UINTMAX_WIDTH;
|
||||
]])],
|
||||
[gl_cv_header_stdint_width=yes])])
|
||||
if test "$gl_cv_header_stdint_width" = yes; then
|
||||
STDINT_H=
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
dnl Check for <sys/inttypes.h>, and for
|
||||
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
|
||||
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
|
||||
if test $ac_cv_header_sys_inttypes_h = yes; then
|
||||
HAVE_SYS_INTTYPES_H=1
|
||||
fi
|
||||
if test $ac_cv_header_sys_bitypes_h = yes; then
|
||||
HAVE_SYS_BITYPES_H=1
|
||||
fi
|
||||
gl_STDINT_TYPE_PROPERTIES
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
|
||||
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 This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
|
@ -80,6 +80,8 @@ AC_DEFUN([gl_FUNC_STRERROR_0],
|
|||
[case "$host_os" in
|
||||
# Guess yes on glibc systems.
|
||||
*-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.
|
||||
*) gl_cv_func_strerror_0_works="guessing no" ;;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
|
|||
|
||||
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
|
||||
[
|
||||
GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
|
||||
GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL])
|
||||
GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL])
|
||||
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])
|
||||
HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
|
||||
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_FFSLL=1; AC_SUBST([HAVE_FFSLL])
|
||||
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 This file is free software; the Free Software Foundation
|
||||
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.
|
||||
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], [
|
||||
AC_REQUIRE([gl_LARGEFILE])
|
||||
], [
|
||||
WINDOWS_64_BIT_ST_SIZE=0
|
||||
])
|
||||
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 <sys/stat.h>.
|
||||
|
|
@ -72,6 +75,7 @@ AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
|
|||
GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT])
|
||||
GNULIB_STAT=0; AC_SUBST([GNULIB_STAT])
|
||||
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.
|
||||
HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
|
||||
HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Configure a replacement for <sys/time.h>.
|
||||
# serial 8
|
||||
# serial 9
|
||||
|
||||
# Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc.
|
||||
# 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_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL])
|
||||
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_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 This file is free software; the Free Software Foundation
|
||||
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],
|
||||
[
|
||||
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])
|
||||
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.
|
||||
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],
|
||||
|
|
|
|||
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.
|
||||
|
||||
# serial 9
|
||||
# serial 11
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# 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],
|
||||
[
|
||||
GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME])
|
||||
GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME])
|
||||
GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME])
|
||||
GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP])
|
||||
GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME])
|
||||
GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME])
|
||||
GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM])
|
||||
GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R])
|
||||
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.
|
||||
HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
|
||||
HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
|
||||
HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
|
||||
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 Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
|
||||
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_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME])
|
||||
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_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET])
|
||||
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# unistd_h.m4 serial 69
|
||||
# unistd_h.m4 serial 70
|
||||
dnl Copyright (C) 2006-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,
|
||||
|
|
@ -46,8 +46,8 @@ AC_DEFUN([gl_UNISTD_H],
|
|||
gethostname getlogin getlogin_r getpagesize
|
||||
getusershell setusershell endusershell
|
||||
group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
|
||||
readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r
|
||||
unlink unlinkat usleep])
|
||||
readlink readlinkat rmdir sethostname sleep symlink symlinkat
|
||||
truncate ttyname_r unlink unlinkat usleep])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
|
||||
|
|
@ -102,6 +102,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
|||
GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
|
||||
GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK])
|
||||
GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT])
|
||||
GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE])
|
||||
GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R])
|
||||
GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING])
|
||||
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_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
|
||||
HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
|
||||
HAVE_TRUNCATE=1; AC_SUBST([HAVE_TRUNCATE])
|
||||
HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
|
||||
HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
|
||||
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_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
|
||||
REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
|
||||
REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
|
||||
REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
|
||||
REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
|
||||
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.
|
||||
|
||||
# wchar_h.m4 serial 40
|
||||
# wchar_h.m4 serial 42
|
||||
|
||||
AC_DEFUN([gl_WCHAR_H],
|
||||
[
|
||||
|
|
@ -35,6 +35,8 @@ AC_DEFUN([gl_WCHAR_H],
|
|||
fi
|
||||
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 corresponding gnulib module is not in use.
|
||||
gl_WARN_ON_USE_PREPARE([[
|
||||
|
|
@ -53,7 +55,7 @@ AC_DEFUN([gl_WCHAR_H],
|
|||
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
|
||||
wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
|
||||
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_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
|
||||
GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
|
||||
GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME])
|
||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
|
||||
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_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
|
||||
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_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
|
||||
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_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
|
||||
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.
|
||||
|
||||
|
|
@ -30,6 +30,8 @@ AC_DEFUN([gl_WCTYPE_H],
|
|||
fi
|
||||
AC_SUBST([HAVE_WINT_T])
|
||||
|
||||
AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
|
||||
|
||||
gl_CHECK_NEXT_HEADERS([wctype.h])
|
||||
if test $ac_cv_header_wctype_h = 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; }
|
||||
]])],
|
||||
[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
|
||||
Linux libc5 i18n is broken.
|
||||
#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 This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
|
|
@ -60,3 +60,15 @@ AC_DEFUN([gt_TYPE_WINT_T],
|
|||
fi
|
||||
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