Use Gnulib's inet_ntop' and inet_pton' modules.
* m4/gnulib-cache.m4: Add `inet_ntop' and `inet_pton'. * configure.ac: Don't check for `inet_ntop' and `inet_pton'. * libguile/socket.c (scm_inet_pton, scm_inet_ntop): Compile regardless of `HAVE_INET_PTON' and `HAVE_INET_NTOP' respectively. * libguile/filesys.c: Use <stdlib.h> instead of <canonicalize.h>.
This commit is contained in:
parent
3fe87cf7af
commit
8912421cf3
60 changed files with 4550 additions and 1006 deletions
472
lib/Makefile.am
472
lib/Makefile.am
|
|
@ -9,7 +9,7 @@
|
|||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl --libtool --macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap canonicalize-lgpl environ extensions flock fpieee full-read full-write havelib iconv_open-utf lib-symbol-versions lib-symbol-visibility libunistring putenv stdlib strcase strftime striconveh string verify vsnprintf
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl --libtool --macro-prefix=gl --no-vc-files alloca-opt autobuild byteswap canonicalize-lgpl environ extensions flock fpieee full-read full-write havelib iconv_open-utf inet_ntop inet_pton lib-symbol-versions lib-symbol-visibility libunistring putenv stdlib strcase strftime striconveh string verify vsnprintf
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
|
||||
|
||||
|
|
@ -37,6 +37,13 @@ libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
|
|||
EXTRA_libgnu_la_SOURCES =
|
||||
libgnu_la_LDFLAGS = $(AM_LDFLAGS)
|
||||
|
||||
## begin gnulib module alignof
|
||||
|
||||
|
||||
EXTRA_DIST += alignof.h
|
||||
|
||||
## end gnulib module alignof
|
||||
|
||||
## begin gnulib module alloca-opt
|
||||
|
||||
BUILT_SOURCES += $(ALLOCA_H)
|
||||
|
|
@ -44,9 +51,10 @@ BUILT_SOURCES += $(ALLOCA_H)
|
|||
# We need the following in order to create <alloca.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
alloca.h: alloca.in.h
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
cat $(srcdir)/alloca.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv -f $@-t $@
|
||||
MOSTLYCLEANFILES += alloca.h alloca.h-t
|
||||
|
||||
|
|
@ -54,6 +62,35 @@ EXTRA_DIST += alloca.in.h
|
|||
|
||||
## end gnulib module alloca-opt
|
||||
|
||||
## begin gnulib module arpa_inet
|
||||
|
||||
BUILT_SOURCES += $(ARPA_INET_H)
|
||||
|
||||
# We need the following in order to create <arpa/inet.h> when the system
|
||||
# doesn't have one.
|
||||
arpa/inet.h: arpa_inet.in.h
|
||||
$(AM_V_at)$(MKDIR_P) arpa
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \
|
||||
-e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \
|
||||
-e 's|@''GNULIB_INET_NTOP''@|$(GNULIB_INET_NTOP)|g' \
|
||||
-e 's|@''GNULIB_INET_PTON''@|$(GNULIB_INET_PTON)|g' \
|
||||
-e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \
|
||||
-e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/arpa_inet.in.h; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
|
||||
MOSTLYCLEANDIRS += arpa
|
||||
|
||||
EXTRA_DIST += arpa_inet.in.h
|
||||
|
||||
## end gnulib module arpa_inet
|
||||
|
||||
## begin gnulib module byteswap
|
||||
|
||||
BUILT_SOURCES += $(BYTESWAP_H)
|
||||
|
|
@ -61,9 +98,10 @@ BUILT_SOURCES += $(BYTESWAP_H)
|
|||
# We need the following in order to create <byteswap.h> when the system
|
||||
# doesn't have one.
|
||||
byteswap.h: byteswap.in.h
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
cat $(srcdir)/byteswap.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv -f $@-t $@
|
||||
MOSTLYCLEANFILES += byteswap.h byteswap.h-t
|
||||
|
||||
|
|
@ -93,7 +131,7 @@ EXTRA_DIST += c-strcaseeq.h
|
|||
## begin gnulib module canonicalize-lgpl
|
||||
|
||||
|
||||
EXTRA_DIST += canonicalize-lgpl.c canonicalize.h
|
||||
EXTRA_DIST += canonicalize-lgpl.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += canonicalize-lgpl.c
|
||||
|
||||
|
|
@ -119,7 +157,7 @@ EXTRA_libgnu_la_SOURCES += canonicalize-lgpl.c
|
|||
# The Automake-defined pkg* macros are appended, in the order
|
||||
# listed in the Automake 1.10a+ documentation.
|
||||
configmake.h: Makefile
|
||||
rm -f $@-t
|
||||
$(AM_V_GEN)rm -f $@-t && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
echo '#define PREFIX "$(prefix)"'; \
|
||||
echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
|
||||
|
|
@ -148,7 +186,7 @@ configmake.h: Makefile
|
|||
echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
|
||||
echo '#define PKGLIBDIR "$(pkglibdir)"'; \
|
||||
echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
|
||||
} | sed '/""/d' > $@-t
|
||||
} | sed '/""/d' > $@-t && \
|
||||
if test -f $@ && cmp $@-t $@ > /dev/null; then \
|
||||
rm -f $@-t; \
|
||||
else \
|
||||
|
|
@ -167,7 +205,7 @@ BUILT_SOURCES += $(ERRNO_H)
|
|||
# We need the following in order to create <errno.h> when the system
|
||||
# doesn't have one that is POSIX compliant.
|
||||
errno.h: errno.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -179,7 +217,7 @@ errno.h: errno.in.h
|
|||
-e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
|
||||
-e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
|
||||
< $(srcdir)/errno.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += errno.h errno.h-t
|
||||
|
||||
|
|
@ -194,13 +232,13 @@ BUILT_SOURCES += $(FLOAT_H)
|
|||
# We need the following in order to create <float.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
float.h: float.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
|
||||
< $(srcdir)/float.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += float.h float.h-t
|
||||
|
||||
|
|
@ -258,7 +296,7 @@ BUILT_SOURCES += $(ICONV_H)
|
|||
# We need the following in order to create <iconv.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
iconv.h: iconv.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -268,7 +306,7 @@ iconv.h: iconv.in.h
|
|||
-e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \
|
||||
-e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \
|
||||
< $(srcdir)/iconv.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += iconv.h iconv.h-t
|
||||
|
||||
|
|
@ -284,12 +322,15 @@ iconv_open-irix.h: iconv_open-irix.gperf
|
|||
iconv_open-osf.h: iconv_open-osf.gperf
|
||||
$(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t
|
||||
mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h
|
||||
BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
||||
MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t
|
||||
MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
||||
EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
||||
iconv_open-solaris.h: iconv_open-solaris.gperf
|
||||
$(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t
|
||||
mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.h
|
||||
BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||
MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t
|
||||
MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||
EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||
|
||||
EXTRA_DIST += iconv.in.h iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open.c
|
||||
EXTRA_DIST += iconv.in.h iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open-solaris.gperf iconv_open.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += iconv_open.c
|
||||
|
||||
|
|
@ -304,6 +345,24 @@ EXTRA_libgnu_la_SOURCES += iconv.c iconv_close.c
|
|||
|
||||
## end gnulib module iconv_open-utf
|
||||
|
||||
## begin gnulib module inet_ntop
|
||||
|
||||
|
||||
EXTRA_DIST += inet_ntop.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += inet_ntop.c
|
||||
|
||||
## end gnulib module inet_ntop
|
||||
|
||||
## begin gnulib module inet_pton
|
||||
|
||||
|
||||
EXTRA_DIST += inet_pton.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += inet_pton.c
|
||||
|
||||
## end gnulib module inet_pton
|
||||
|
||||
## begin gnulib module lib-symbol-visibility
|
||||
|
||||
# The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the
|
||||
|
|
@ -380,14 +439,14 @@ uninstall-localcharset: all-local
|
|||
fi
|
||||
|
||||
charset.alias: config.charset
|
||||
rm -f t-$@ $@
|
||||
$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
|
||||
$(AM_V_GEN)rm -f t-$@ $@ && \
|
||||
$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
|
||||
mv t-$@ $@
|
||||
|
||||
SUFFIXES += .sed .sin
|
||||
.sin.sed:
|
||||
rm -f t-$@ $@
|
||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
|
||||
$(AM_V_GEN)rm -f t-$@ $@ && \
|
||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
|
||||
mv t-$@ $@
|
||||
|
||||
CLEANFILES += charset.alias ref-add.sed ref-del.sed
|
||||
|
|
@ -396,6 +455,15 @@ EXTRA_DIST += config.charset ref-add.sin ref-del.sin
|
|||
|
||||
## end gnulib module localcharset
|
||||
|
||||
## begin gnulib module lstat
|
||||
|
||||
|
||||
EXTRA_DIST += lstat.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += lstat.c
|
||||
|
||||
## end gnulib module lstat
|
||||
|
||||
## begin gnulib module malloc-posix
|
||||
|
||||
|
||||
|
|
@ -449,6 +517,30 @@ EXTRA_libgnu_la_SOURCES += memchr.c
|
|||
|
||||
## end gnulib module memchr
|
||||
|
||||
## begin gnulib module netinet_in
|
||||
|
||||
BUILT_SOURCES += $(NETINET_IN_H)
|
||||
|
||||
# We need the following in order to create <netinet/in.h> when the system
|
||||
# doesn't have one.
|
||||
netinet/in.h: netinet_in.in.h
|
||||
$(AM_V_at)$(MKDIR_P) netinet
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \
|
||||
-e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \
|
||||
< $(srcdir)/netinet_in.in.h; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t
|
||||
MOSTLYCLEANDIRS += netinet
|
||||
|
||||
EXTRA_DIST += netinet_in.in.h
|
||||
|
||||
## end gnulib module netinet_in
|
||||
|
||||
## begin gnulib module pathmax
|
||||
|
||||
|
||||
|
|
@ -498,6 +590,15 @@ libgnu_la_SOURCES += size_max.h
|
|||
|
||||
## end gnulib module size_max
|
||||
|
||||
## begin gnulib module stat
|
||||
|
||||
|
||||
EXTRA_DIST += stat.c
|
||||
|
||||
EXTRA_libgnu_la_SOURCES += stat.c
|
||||
|
||||
## end gnulib module stat
|
||||
|
||||
## begin gnulib module stdbool
|
||||
|
||||
BUILT_SOURCES += $(STDBOOL_H)
|
||||
|
|
@ -505,10 +606,10 @@ BUILT_SOURCES += $(STDBOOL_H)
|
|||
# We need the following in order to create <stdbool.h> when the system
|
||||
# doesn't have one that works.
|
||||
stdbool.h: stdbool.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
|
||||
|
||||
|
|
@ -516,6 +617,29 @@ EXTRA_DIST += stdbool.in.h
|
|||
|
||||
## end gnulib module stdbool
|
||||
|
||||
## begin gnulib module stddef
|
||||
|
||||
BUILT_SOURCES += $(STDDEF_H)
|
||||
|
||||
# We need the following in order to create <stddef.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
stddef.h: stddef.in.h
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
|
||||
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
|
||||
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
|
||||
< $(srcdir)/stddef.in.h; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += stddef.h stddef.h-t
|
||||
|
||||
EXTRA_DIST += stddef.in.h
|
||||
|
||||
## end gnulib module stddef
|
||||
|
||||
## begin gnulib module stdint
|
||||
|
||||
BUILT_SOURCES += $(STDINT_H)
|
||||
|
|
@ -523,7 +647,7 @@ BUILT_SOURCES += $(STDINT_H)
|
|||
# We need the following in order to create <stdint.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
stdint.h: stdint.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
|
||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
|
|
@ -550,7 +674,7 @@ stdint.h: stdint.in.h
|
|||
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
||||
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
||||
< $(srcdir)/stdint.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += stdint.h stdint.h-t
|
||||
|
||||
|
|
@ -565,83 +689,92 @@ BUILT_SOURCES += stdio.h
|
|||
# We need the following in order to create <stdio.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
stdio.h: stdio.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
|
||||
-e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
|
||||
-e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
|
||||
-e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
|
||||
-e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
|
||||
-e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
|
||||
-e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_FPURGE''@|$(GNULIB_FPURGE)|g' \
|
||||
-e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
|
||||
-e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
|
||||
-e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
|
||||
-e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
|
||||
-e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
|
||||
-e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
|
||||
-e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
|
||||
-e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
|
||||
-e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
|
||||
-e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
|
||||
-e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
|
||||
-e 's|@''GNULIB_POPEN''@|$(GNULIB_POPEN)|g' \
|
||||
-e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
|
||||
-e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
|
||||
-e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
|
||||
-e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
|
||||
-e 's|@''GNULIB_REMOVE''@|$(GNULIB_REMOVE)|g' \
|
||||
-e 's|@''GNULIB_RENAME''@|$(GNULIB_RENAME)|g' \
|
||||
-e 's|@''GNULIB_RENAMEAT''@|$(GNULIB_RENAMEAT)|g' \
|
||||
-e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
|
||||
-e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
|
||||
-e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
|
||||
-e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
|
||||
-e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
|
||||
-e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
|
||||
-e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
|
||||
-e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
|
||||
-e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
|
||||
-e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
|
||||
-e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
|
||||
-e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
|
||||
-e 's|@''GNULIB_FPURGE''@|$(GNULIB_FPURGE)|g' \
|
||||
-e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
|
||||
-e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
|
||||
-e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
|
||||
-e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
|
||||
-e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
|
||||
-e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
|
||||
-e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
|
||||
-e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
|
||||
-e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
|
||||
-e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
|
||||
-e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
|
||||
-e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
|
||||
-e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
|
||||
-e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
|
||||
-e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
|
||||
-e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
|
||||
-e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
|
||||
-e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
|
||||
-e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
|
||||
-e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
|
||||
-e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
|
||||
-e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
|
||||
-e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
|
||||
-e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
|
||||
-e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
|
||||
-e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
|
||||
-e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
|
||||
-e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
|
||||
-e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
|
||||
-e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
|
||||
-e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
|
||||
-e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
|
||||
-e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
|
||||
-e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
|
||||
-e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
|
||||
-e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
|
||||
-e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
|
||||
-e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
|
||||
-e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
|
||||
-e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
|
||||
-e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
|
||||
-e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
|
||||
-e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
|
||||
-e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
|
||||
-e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
|
||||
-e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
|
||||
-e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
|
||||
-e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
|
||||
-e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
|
||||
-e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
|
||||
-e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
|
||||
-e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
|
||||
-e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
|
||||
-e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
|
||||
-e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
|
||||
-e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
|
||||
-e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
|
||||
-e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
|
||||
-e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
|
||||
-e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
|
||||
-e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
|
||||
-e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
|
||||
-e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
|
||||
-e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
|
||||
-e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/stdio.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += stdio.h stdio.h-t
|
||||
|
||||
|
|
@ -658,22 +791,24 @@ BUILT_SOURCES += stdlib.h
|
|||
# We need the following in order to create <stdlib.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
stdlib.h: stdlib.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
|
||||
-e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
|
||||
-e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
|
||||
-e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
|
||||
-e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
|
||||
-e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
|
||||
-e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
|
||||
-e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
|
||||
-e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
|
||||
-e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
|
||||
-e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
|
||||
-e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
|
||||
-e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
|
||||
-e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
|
||||
-e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
|
||||
-e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
|
||||
|
|
@ -682,11 +817,16 @@ stdlib.h: stdlib.in.h
|
|||
-e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
|
||||
-e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
|
||||
-e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
|
||||
-e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
|
||||
-e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
|
||||
-e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
|
||||
-e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
|
||||
-e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
|
||||
-e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
|
||||
-e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
|
||||
-e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
|
||||
-e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
|
||||
-e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
|
||||
-e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
|
||||
-e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
|
||||
-e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
|
||||
-e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
|
||||
|
|
@ -695,14 +835,15 @@ stdlib.h: stdlib.in.h
|
|||
-e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
|
||||
-e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
|
||||
-e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
|
||||
-e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
|
||||
-e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
|
||||
-e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
|
||||
-e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
|
||||
-e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
|
||||
-e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
|
||||
-e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/stdlib.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += stdlib.h stdlib.h-t
|
||||
|
||||
|
|
@ -753,7 +894,7 @@ BUILT_SOURCES += string.h
|
|||
# We need the following in order to create <string.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
string.h: string.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -799,7 +940,6 @@ string.h: string.in.h
|
|||
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
||||
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
|
||||
-e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
|
||||
-e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \
|
||||
-e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
|
||||
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
|
||||
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
|
||||
|
|
@ -815,10 +955,13 @@ string.h: string.in.h
|
|||
-e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
|
||||
-e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
|
||||
-e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
|
||||
-e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
|
||||
-e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
|
||||
-e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
|
||||
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/string.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += string.h string.h-t
|
||||
|
||||
|
|
@ -833,7 +976,7 @@ BUILT_SOURCES += strings.h
|
|||
# We need the following in order to create <strings.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
strings.h: strings.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -842,7 +985,7 @@ strings.h: strings.in.h
|
|||
-e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/strings.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += strings.h strings.h-t
|
||||
|
||||
|
|
@ -857,8 +1000,8 @@ BUILT_SOURCES += $(SYS_FILE_H)
|
|||
# We need the following in order to create <sys/file.h> when the system
|
||||
# has one that is incomplete.
|
||||
sys/file.h: sys_file.in.h
|
||||
@MKDIR_P@ sys
|
||||
rm -f $@-t $@
|
||||
$(AM_V_at)$(MKDIR_P) sys
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \
|
||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
|
|
@ -867,7 +1010,7 @@ sys/file.h: sys_file.in.h
|
|||
-e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \
|
||||
-e 's/@''GNULIB_FLOCK''@/$(GNULIB_FLOCK)/g' \
|
||||
< $(srcdir)/sys_file.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += sys/file.h sys/file.h-t
|
||||
MOSTLYCLEANDIRS += sys
|
||||
|
|
@ -876,6 +1019,102 @@ EXTRA_DIST += sys_file.in.h
|
|||
|
||||
## end gnulib module sys_file
|
||||
|
||||
## begin gnulib module sys_socket
|
||||
|
||||
BUILT_SOURCES += $(SYS_SOCKET_H)
|
||||
|
||||
# We need the following in order to create <sys/socket.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
sys/socket.h: sys_socket.in.h
|
||||
$(AM_V_at)$(MKDIR_P) sys
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \
|
||||
-e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \
|
||||
-e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
|
||||
-e 's|@''GNULIB_SOCKET''@|$(GNULIB_SOCKET)|g' \
|
||||
-e 's|@''GNULIB_CONNECT''@|$(GNULIB_CONNECT)|g' \
|
||||
-e 's|@''GNULIB_ACCEPT''@|$(GNULIB_ACCEPT)|g' \
|
||||
-e 's|@''GNULIB_BIND''@|$(GNULIB_BIND)|g' \
|
||||
-e 's|@''GNULIB_GETPEERNAME''@|$(GNULIB_GETPEERNAME)|g' \
|
||||
-e 's|@''GNULIB_GETSOCKNAME''@|$(GNULIB_GETSOCKNAME)|g' \
|
||||
-e 's|@''GNULIB_GETSOCKOPT''@|$(GNULIB_GETSOCKOPT)|g' \
|
||||
-e 's|@''GNULIB_LISTEN''@|$(GNULIB_LISTEN)|g' \
|
||||
-e 's|@''GNULIB_RECV''@|$(GNULIB_RECV)|g' \
|
||||
-e 's|@''GNULIB_SEND''@|$(GNULIB_SEND)|g' \
|
||||
-e 's|@''GNULIB_RECVFROM''@|$(GNULIB_RECVFROM)|g' \
|
||||
-e 's|@''GNULIB_SENDTO''@|$(GNULIB_SENDTO)|g' \
|
||||
-e 's|@''GNULIB_SETSOCKOPT''@|$(GNULIB_SETSOCKOPT)|g' \
|
||||
-e 's|@''GNULIB_SHUTDOWN''@|$(GNULIB_SHUTDOWN)|g' \
|
||||
-e 's|@''GNULIB_ACCEPT4''@|$(GNULIB_ACCEPT4)|g' \
|
||||
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
|
||||
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
|
||||
-e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
|
||||
-e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
|
||||
-e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/sys_socket.in.h; \
|
||||
} > $@-t && \
|
||||
mv -f $@-t $@
|
||||
MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
|
||||
MOSTLYCLEANDIRS += sys
|
||||
|
||||
EXTRA_DIST += sys_socket.in.h
|
||||
|
||||
## end gnulib module sys_socket
|
||||
|
||||
## begin gnulib module sys_stat
|
||||
|
||||
BUILT_SOURCES += sys/stat.h
|
||||
|
||||
# We need the following in order to create <sys/stat.h> when the system
|
||||
# has one that is incomplete.
|
||||
sys/stat.h: sys_stat.in.h
|
||||
$(AM_V_at)$(MKDIR_P) sys
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
|
||||
-e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|g' \
|
||||
-e 's|@''GNULIB_FSTATAT''@|$(GNULIB_FSTATAT)|g' \
|
||||
-e 's|@''GNULIB_FUTIMENS''@|$(GNULIB_FUTIMENS)|g' \
|
||||
-e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
|
||||
-e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
|
||||
-e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
|
||||
-e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
|
||||
-e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
|
||||
-e 's|@''GNULIB_STAT''@|$(GNULIB_STAT)|g' \
|
||||
-e 's|@''GNULIB_UTIMENSAT''@|$(GNULIB_UTIMENSAT)|g' \
|
||||
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
|
||||
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
|
||||
-e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
|
||||
-e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
|
||||
-e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
|
||||
-e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
|
||||
-e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
|
||||
-e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
|
||||
-e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
|
||||
-e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
|
||||
-e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
|
||||
-e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
|
||||
-e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
|
||||
-e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
|
||||
-e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
|
||||
-e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/sys_stat.in.h; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
|
||||
MOSTLYCLEANDIRS += sys
|
||||
|
||||
EXTRA_DIST += sys_stat.in.h
|
||||
|
||||
## end gnulib module sys_stat
|
||||
|
||||
## begin gnulib module time
|
||||
|
||||
BUILT_SOURCES += time.h
|
||||
|
|
@ -883,7 +1122,7 @@ BUILT_SOURCES += time.h
|
|||
# We need the following in order to create <time.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
time.h: time.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -896,7 +1135,7 @@ time.h: time.in.h
|
|||
-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' \
|
||||
< $(srcdir)/time.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += time.h time.h-t
|
||||
|
||||
|
|
@ -920,7 +1159,7 @@ BUILT_SOURCES += unistd.h
|
|||
# We need the following in order to create an empty placeholder for
|
||||
# <unistd.h> when the system doesn't have one.
|
||||
unistd.h: unistd.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
|
||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
|
|
@ -929,9 +1168,12 @@ unistd.h: unistd.in.h
|
|||
-e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
|
||||
-e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
|
||||
-e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
|
||||
-e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
|
||||
-e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
|
||||
-e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
|
||||
-e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
|
||||
-e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
|
||||
-e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
|
||||
-e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
|
||||
-e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
|
||||
-e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
|
||||
|
|
@ -943,13 +1185,25 @@ unistd.h: unistd.in.h
|
|||
-e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
|
||||
-e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
|
||||
-e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
|
||||
-e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
|
||||
-e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
|
||||
-e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
|
||||
-e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
|
||||
-e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
|
||||
-e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
|
||||
-e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
|
||||
-e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
|
||||
-e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
|
||||
-e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
|
||||
-e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
|
||||
-e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
|
||||
-e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
|
||||
-e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
|
||||
-e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
|
||||
-e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
|
||||
-e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
|
||||
-e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
|
||||
-e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
|
||||
-e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
|
||||
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
|
||||
-e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
|
||||
|
|
@ -958,25 +1212,41 @@ unistd.h: unistd.in.h
|
|||
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
|
||||
-e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
|
||||
-e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
|
||||
-e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
|
||||
-e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
|
||||
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
|
||||
-e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
|
||||
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
|
||||
-e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
|
||||
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
|
||||
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
|
||||
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
|
||||
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
|
||||
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
|
||||
-e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
|
||||
-e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
|
||||
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
|
||||
-e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
|
||||
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
|
||||
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
|
||||
-e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
|
||||
-e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
|
||||
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
|
||||
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
|
||||
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
|
||||
-e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
|
||||
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
|
||||
-e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
|
||||
-e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
|
||||
-e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
|
||||
-e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
|
||||
-e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
|
||||
-e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
|
||||
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
|
||||
-e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/unistd.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += unistd.h unistd.h-t
|
||||
|
||||
|
|
@ -1059,7 +1329,7 @@ BUILT_SOURCES += $(WCHAR_H)
|
|||
# We need the following in order to create <wchar.h> when the system
|
||||
# version does not work standalone.
|
||||
wchar.h: wchar.in.h
|
||||
rm -f $@-t $@
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
|
|
@ -1102,7 +1372,7 @@ wchar.h: wchar.in.h
|
|||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||
< $(srcdir)/wchar.in.h; \
|
||||
} > $@-t
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += wchar.h wchar.h-t
|
||||
|
||||
|
|
|
|||
53
lib/alignof.h
Normal file
53
lib/alignof.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/* Determine alignment of types.
|
||||
Copyright (C) 2003-2004, 2006, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _ALIGNOF_H
|
||||
#define _ALIGNOF_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/* Determine the alignment of a structure slot (field) of a given type,
|
||||
at compile time. Note that the result depends on the ABI.
|
||||
Note: The result cannot be used as a value for an 'enum' constant,
|
||||
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
|
||||
#if defined __cplusplus
|
||||
template <class type> struct alignof_helper { char __slot1; type __slot2; };
|
||||
# define alignof_slot(type) offsetof (alignof_helper<type>, __slot2)
|
||||
#else
|
||||
# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
|
||||
#endif
|
||||
|
||||
/* Determine the good alignment of a object of the given type at compile time.
|
||||
Note that this is not necessarily the same as alignof_slot(type).
|
||||
For example, with GNU C on x86 platforms: alignof_type(double) = 8, but
|
||||
- when -malign-double is not specified: alignof_slot(double) = 4,
|
||||
- when -malign-double is specified: alignof_slot(double) = 8.
|
||||
Note: The result cannot be used as a value for an 'enum' constant,
|
||||
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
|
||||
#if defined __GNUC__
|
||||
# define alignof_type __alignof__
|
||||
#else
|
||||
# define alignof_type alignof_slot
|
||||
#endif
|
||||
|
||||
/* alignof is an alias for alignof_slot semantics, since that's what most
|
||||
callers need.
|
||||
Note: The result cannot be used as a value for an 'enum' constant,
|
||||
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
|
||||
#define alignof alignof_slot
|
||||
|
||||
#endif /* _ALIGNOF_H */
|
||||
90
lib/arpa_inet.in.h
Normal file
90
lib/arpa_inet.in.h
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/* A GNU-like <arpa/inet.h>.
|
||||
|
||||
Copyright (C) 2005-2006, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _GL_ARPA_INET_H
|
||||
|
||||
/* Gnulib's sys/socket.h is responsible for pulling in winsock2.h etc
|
||||
under MinGW. */
|
||||
#include <sys/socket.h>
|
||||
|
||||
#if @HAVE_ARPA_INET_H@
|
||||
|
||||
# if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
# endif
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
# @INCLUDE_NEXT@ @NEXT_ARPA_INET_H@
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _GL_ARPA_INET_H
|
||||
#define _GL_ARPA_INET_H
|
||||
|
||||
/* The definition of GL_LINK_WARNING is copied here. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if @GNULIB_INET_NTOP@
|
||||
# if !@HAVE_DECL_INET_NTOP@
|
||||
/* Converts an internet address from internal format to a printable,
|
||||
presentable format.
|
||||
AF is an internet address family, such as AF_INET or AF_INET6.
|
||||
SRC points to a 'struct in_addr' (for AF_INET) or 'struct in6_addr'
|
||||
(for AF_INET6).
|
||||
DST points to a buffer having room for CNT bytes.
|
||||
The printable representation of the address (in numeric form, not
|
||||
surrounded by [...], no reverse DNS is done) is placed in DST, and
|
||||
DST is returned. If an error occurs, the return value is NULL and
|
||||
errno is set. If CNT bytes are not sufficient to hold the result,
|
||||
the return value is NULL and errno is set to ENOSPC. A good value
|
||||
for CNT is 46.
|
||||
|
||||
For more details, see the POSIX:2001 specification
|
||||
<http://www.opengroup.org/susv3xsh/inet_ntop.html>. */
|
||||
extern const char *inet_ntop (int af, const void *restrict src,
|
||||
char *restrict dst, socklen_t cnt);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef inet_ntop
|
||||
# define inet_ntop(af,src,dst,cnt) \
|
||||
(GL_LINK_WARNING ("inet_ntop is unportable - " \
|
||||
"use gnulib module inet_ntop for portability"), \
|
||||
inet_ntop (af, src, dst, cnt))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_INET_PTON@
|
||||
# if !@HAVE_DECL_INET_PTON@
|
||||
extern int inet_pton (int af, const char *restrict src, void *restrict dst);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef inet_pton
|
||||
# define inet_pton(af,src,dst) \
|
||||
(GL_LINK_WARNING ("inet_pton is unportable - " \
|
||||
"use gnulib module inet_pton for portability"), \
|
||||
inet_pton (af, src, dst))
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GL_ARPA_INET_H */
|
||||
#endif /* _GL_ARPA_INET_H */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* Return the canonical absolute name of a given file.
|
||||
Copyright (C) 1996-2003, 2005-2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996-2009 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -15,45 +15,25 @@
|
|||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Avoid a clash of our rpl_realpath() function with the prototype in
|
||||
<stdlib.h> on Solaris 2.5.1. */
|
||||
#undef realpath
|
||||
|
||||
#if !HAVE_CANONICALIZE_FILE_NAME || defined _LIBC
|
||||
|
||||
#include <alloca.h>
|
||||
|
||||
/* Specification. */
|
||||
#include "canonicalize.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#ifndef _LIBC
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
#if !HAVE_CANONICALIZE_FILE_NAME || !FUNC_REALPATH_WORKS || defined _LIBC
|
||||
|
||||
/* Specification. */
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <alloca.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#if HAVE_SYS_PARAM_H || defined _LIBC
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
#ifndef MAXSYMLINKS
|
||||
# define MAXSYMLINKS 20
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef _LIBC
|
||||
# define __set_errno(e) errno = (e)
|
||||
# ifndef ENAMETOOLONG
|
||||
# define ENAMETOOLONG EINVAL
|
||||
# endif
|
||||
#endif
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <shlib-compat.h>
|
||||
|
|
@ -63,7 +43,7 @@
|
|||
# define compat_symbol(lib, local, symbol, version)
|
||||
# define weak_alias(local, symbol)
|
||||
# define __canonicalize_file_name canonicalize_file_name
|
||||
# define __realpath rpl_realpath
|
||||
# define __realpath realpath
|
||||
# include "pathmax.h"
|
||||
# include "malloca.h"
|
||||
# if HAVE_GETCWD
|
||||
|
|
@ -77,12 +57,21 @@
|
|||
# define __getcwd(buf, max) getwd (buf)
|
||||
# endif
|
||||
# define __readlink readlink
|
||||
/* On systems without symbolic links, call stat() instead of lstat(). */
|
||||
# if !defined S_ISLNK && !HAVE_READLINK
|
||||
# define lstat stat
|
||||
# define __set_errno(e) errno = (e)
|
||||
# ifndef MAXSYMLINKS
|
||||
# ifdef SYMLOOP_MAX
|
||||
# define MAXSYMLINKS SYMLOOP_MAX
|
||||
# else
|
||||
# define MAXSYMLINKS 20
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
|
||||
# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
|
||||
#endif
|
||||
|
||||
#if !FUNC_REALPATH_WORKS || defined _LIBC
|
||||
/* Return the canonical absolute name of file NAME. A canonical name
|
||||
does not contain any `.', `..' components nor any repeated path
|
||||
separators ('/') or symlinks. All path components must exist. If
|
||||
|
|
@ -100,9 +89,7 @@ __realpath (const char *name, char *resolved)
|
|||
char *rpath, *dest, *extra_buf = NULL;
|
||||
const char *start, *end, *rpath_limit;
|
||||
long int path_max;
|
||||
#if HAVE_READLINK
|
||||
int num_links = 0;
|
||||
#endif
|
||||
|
||||
if (name == NULL)
|
||||
{
|
||||
|
|
@ -158,6 +145,8 @@ __realpath (const char *name, char *resolved)
|
|||
{
|
||||
rpath[0] = '/';
|
||||
dest = rpath + 1;
|
||||
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/')
|
||||
*dest++ = '/';
|
||||
}
|
||||
|
||||
for (start = end = name; *start; start = end)
|
||||
|
|
@ -167,6 +156,7 @@ __realpath (const char *name, char *resolved)
|
|||
#else
|
||||
struct stat st;
|
||||
#endif
|
||||
int n;
|
||||
|
||||
/* Skip sequence of multiple path-separators. */
|
||||
while (*start == '/')
|
||||
|
|
@ -185,6 +175,9 @@ __realpath (const char *name, char *resolved)
|
|||
/* Back up to previous component, ignore if at root already. */
|
||||
if (dest > rpath + 1)
|
||||
while ((--dest)[-1] != '/');
|
||||
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
|
||||
&& *dest == '/')
|
||||
dest++;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -240,12 +233,10 @@ __realpath (const char *name, char *resolved)
|
|||
#endif
|
||||
goto error;
|
||||
|
||||
#if HAVE_READLINK
|
||||
if (S_ISLNK (st.st_mode))
|
||||
{
|
||||
char *buf;
|
||||
size_t len;
|
||||
int n;
|
||||
|
||||
if (++num_links > MAXSYMLINKS)
|
||||
{
|
||||
|
|
@ -294,44 +285,58 @@ __realpath (const char *name, char *resolved)
|
|||
name = end = memcpy (extra_buf, buf, n);
|
||||
|
||||
if (buf[0] == '/')
|
||||
dest = rpath + 1; /* It's an absolute symlink */
|
||||
{
|
||||
dest = rpath + 1; /* It's an absolute symlink */
|
||||
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/')
|
||||
*dest++ = '/';
|
||||
}
|
||||
else
|
||||
/* Back up to previous component, ignore if at root already: */
|
||||
if (dest > rpath + 1)
|
||||
while ((--dest)[-1] != '/');
|
||||
{
|
||||
/* Back up to previous component, ignore if at root
|
||||
already: */
|
||||
if (dest > rpath + 1)
|
||||
while ((--dest)[-1] != '/');
|
||||
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
|
||||
&& *dest == '/')
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
else if (!S_ISDIR (st.st_mode) && *end != '\0')
|
||||
{
|
||||
__set_errno (ENOTDIR);
|
||||
goto error;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (dest > rpath + 1 && dest[-1] == '/')
|
||||
--dest;
|
||||
if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && *dest == '/')
|
||||
dest++;
|
||||
*dest = '\0';
|
||||
|
||||
if (extra_buf)
|
||||
freea (extra_buf);
|
||||
|
||||
return resolved ? memcpy (resolved, rpath, dest - rpath + 1) : rpath;
|
||||
return rpath;
|
||||
|
||||
error:
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (extra_buf)
|
||||
freea (extra_buf);
|
||||
if (resolved)
|
||||
strcpy (resolved, rpath);
|
||||
else
|
||||
if (resolved == NULL)
|
||||
free (rpath);
|
||||
errno = saved_errno;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#ifdef _LIBC
|
||||
versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
|
||||
#endif
|
||||
#endif /* !FUNC_REALPATH_WORKS || defined _LIBC */
|
||||
|
||||
|
||||
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
|
||||
char *
|
||||
attribute_compat_text_section
|
||||
__old_realpath (const char *name, char *resolved)
|
||||
{
|
||||
if (resolved == NULL)
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
/* Return the canonical absolute name of a given file.
|
||||
Copyright (C) 1996-2007 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef CANONICALIZE_H_
|
||||
# define CANONICALIZE_H_
|
||||
|
||||
# if GNULIB_CANONICALIZE
|
||||
enum canonicalize_mode_t
|
||||
{
|
||||
/* All components must exist. */
|
||||
CAN_EXISTING = 0,
|
||||
|
||||
/* All components excluding last one must exist. */
|
||||
CAN_ALL_BUT_LAST = 1,
|
||||
|
||||
/* No requirements on components existence. */
|
||||
CAN_MISSING = 2
|
||||
};
|
||||
typedef enum canonicalize_mode_t canonicalize_mode_t;
|
||||
|
||||
/* Return a malloc'd string containing the canonical absolute name of
|
||||
the named file. This acts like canonicalize_file_name, except that
|
||||
whether components must exist depends on the canonicalize_mode_t
|
||||
argument. */
|
||||
char *canonicalize_filename_mode (const char *, canonicalize_mode_t);
|
||||
# endif
|
||||
|
||||
# if HAVE_DECL_CANONICALIZE_FILE_NAME
|
||||
# include <stdlib.h>
|
||||
# else
|
||||
/* Return a malloc'd string containing the canonical absolute name of
|
||||
the named file. If any file name component does not exist or is a
|
||||
symlink to a nonexistent file, return NULL. A canonical name does
|
||||
not contain any `.', `..' components nor any repeated file name
|
||||
separators ('/') or symlinks. */
|
||||
char *canonicalize_file_name (const char *);
|
||||
# endif
|
||||
|
||||
#endif /* !CANONICALIZE_H_ */
|
||||
30
lib/iconv_open-solaris.gperf
Normal file
30
lib/iconv_open-solaris.gperf
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
struct mapping { int standard_name; const char vendor_name[10 + 1]; };
|
||||
%struct-type
|
||||
%language=ANSI-C
|
||||
%define slot-name standard_name
|
||||
%define hash-function-name mapping_hash
|
||||
%define lookup-function-name mapping_lookup
|
||||
%readonly-tables
|
||||
%global-table
|
||||
%define word-array-name mappings
|
||||
%pic
|
||||
%%
|
||||
# On Solaris 10, look in the "iconv -l" output. Some aliases are advertised but
|
||||
# not actually supported by the iconv() function and by the 'iconv' program.
|
||||
# For example:
|
||||
# $ echo abc | iconv -f 646 -t ISO-8859-1
|
||||
# Not supported 646 to ISO-8859-1
|
||||
# $ echo abc | iconv -f 646 -t ISO8859-1
|
||||
$ abc
|
||||
ASCII, "646"
|
||||
ISO-8859-1, "ISO8859-1"
|
||||
ISO-8859-2, "ISO8859-2"
|
||||
ISO-8859-3, "ISO8859-3"
|
||||
ISO-8859-4, "ISO8859-4"
|
||||
ISO-8859-5, "ISO8859-5"
|
||||
ISO-8859-6, "ISO8859-6"
|
||||
ISO-8859-7, "ISO8859-7"
|
||||
ISO-8859-8, "ISO8859-8"
|
||||
ISO-8859-9, "ISO8859-9"
|
||||
ISO-8859-15, "ISO8859-15"
|
||||
CP1251, "ansi-1251"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* Character set conversion.
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2007, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
#define ICONV_FLAVOR_HPUX "iconv_open-hpux.h"
|
||||
#define ICONV_FLAVOR_IRIX "iconv_open-irix.h"
|
||||
#define ICONV_FLAVOR_OSF "iconv_open-osf.h"
|
||||
#define ICONV_FLAVOR_SOLARIS "iconv_open-solaris.h"
|
||||
|
||||
#ifdef ICONV_FLAVOR
|
||||
# include ICONV_FLAVOR
|
||||
|
|
|
|||
37
lib/ignore-value.h
Normal file
37
lib/ignore-value.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/* ignore a function return without a compiler warning
|
||||
|
||||
Copyright (C) 2008-2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Jim Meyering. */
|
||||
|
||||
/* Use these functions to avoid a warning when using a function declared with
|
||||
gcc's warn_unused_result attribute, but for which you really do want to
|
||||
ignore the result. Traditionally, people have used a "(void)" cast to
|
||||
indicate that a function's return value is deliberately unused. However,
|
||||
if the function is declared with __attribute__((warn_unused_result)),
|
||||
gcc issues a warning even with the cast.
|
||||
|
||||
Caution: most of the time, you really should heed gcc's warning, and
|
||||
check the return value. However, in those exceptional cases in which
|
||||
you're sure you know what you're doing, use this function.
|
||||
|
||||
For the record, here's one of the ignorable warnings:
|
||||
"copy.c:233: warning: ignoring return value of 'fchown',
|
||||
declared with attribute warn_unused_result". */
|
||||
|
||||
static inline void ignore_value (int i) { (void) i; }
|
||||
static inline void ignore_ptr (void* p) { (void) p; }
|
||||
/* FIXME: what about aggregate types? */
|
||||
234
lib/inet_ntop.c
Normal file
234
lib/inet_ntop.c
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
|
||||
|
||||
Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996-1999 by Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Specification. */
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define NS_IN6ADDRSZ 16
|
||||
#define NS_INT16SZ 2
|
||||
|
||||
/*
|
||||
* WARNING: Don't even consider trying to compile this on a system where
|
||||
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
|
||||
*/
|
||||
typedef int verify_int_size[2 * sizeof (int) - 7];
|
||||
|
||||
static const char *inet_ntop4 (const unsigned char *src, char *dst, socklen_t size);
|
||||
#if HAVE_IPV6
|
||||
static const char *inet_ntop6 (const unsigned char *src, char *dst, socklen_t size);
|
||||
#endif
|
||||
|
||||
|
||||
/* char *
|
||||
* inet_ntop(af, src, dst, size)
|
||||
* convert a network format address to presentation format.
|
||||
* return:
|
||||
* pointer to presentation format address (`dst'), or NULL (see errno).
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
const char *
|
||||
inet_ntop (int af, const void *restrict src,
|
||||
char *restrict dst, socklen_t cnt)
|
||||
{
|
||||
switch (af)
|
||||
{
|
||||
#if HAVE_IPV4
|
||||
case AF_INET:
|
||||
return (inet_ntop4 (src, dst, cnt));
|
||||
#endif
|
||||
|
||||
#if HAVE_IPV6
|
||||
case AF_INET6:
|
||||
return (inet_ntop6 (src, dst, cnt));
|
||||
#endif
|
||||
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
return (NULL);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* const char *
|
||||
* inet_ntop4(src, dst, size)
|
||||
* format an IPv4 address
|
||||
* return:
|
||||
* `dst' (as a const)
|
||||
* notes:
|
||||
* (1) uses no statics
|
||||
* (2) takes a u_char* not an in_addr as input
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
static const char *
|
||||
inet_ntop4 (const unsigned char *src, char *dst, socklen_t size)
|
||||
{
|
||||
char tmp[sizeof "255.255.255.255"];
|
||||
int len;
|
||||
|
||||
len = sprintf (tmp, "%u.%u.%u.%u", src[0], src[1], src[2], src[3]);
|
||||
if (len < 0)
|
||||
return NULL;
|
||||
|
||||
if (len > size)
|
||||
{
|
||||
errno = ENOSPC;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return strcpy (dst, tmp);
|
||||
}
|
||||
|
||||
#if HAVE_IPV6
|
||||
|
||||
/* const char *
|
||||
* inet_ntop6(src, dst, size)
|
||||
* convert IPv6 binary address into presentation (printable) format
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
static const char *
|
||||
inet_ntop6 (const unsigned char *src, char *dst, socklen_t size)
|
||||
{
|
||||
/*
|
||||
* Note that int32_t and int16_t need only be "at least" large enough
|
||||
* to contain a value of the specified size. On some systems, like
|
||||
* Crays, there is no such thing as an integer variable with 16 bits.
|
||||
* Keep this in mind if you think this function should have been coded
|
||||
* to use pointer overlays. All the world's not a VAX.
|
||||
*/
|
||||
char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
|
||||
struct
|
||||
{
|
||||
int base, len;
|
||||
} best, cur;
|
||||
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Preprocess:
|
||||
* Copy the input (bytewise) array into a wordwise array.
|
||||
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
||||
*/
|
||||
memset (words, '\0', sizeof words);
|
||||
for (i = 0; i < NS_IN6ADDRSZ; i += 2)
|
||||
words[i / 2] = (src[i] << 8) | src[i + 1];
|
||||
best.base = -1;
|
||||
cur.base = -1;
|
||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||
{
|
||||
if (words[i] == 0)
|
||||
{
|
||||
if (cur.base == -1)
|
||||
cur.base = i, cur.len = 1;
|
||||
else
|
||||
cur.len++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cur.base != -1)
|
||||
{
|
||||
if (best.base == -1 || cur.len > best.len)
|
||||
best = cur;
|
||||
cur.base = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cur.base != -1)
|
||||
{
|
||||
if (best.base == -1 || cur.len > best.len)
|
||||
best = cur;
|
||||
}
|
||||
if (best.base != -1 && best.len < 2)
|
||||
best.base = -1;
|
||||
|
||||
/*
|
||||
* Format the result.
|
||||
*/
|
||||
tp = tmp;
|
||||
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
|
||||
{
|
||||
/* Are we inside the best run of 0x00's? */
|
||||
if (best.base != -1 && i >= best.base && i < (best.base + best.len))
|
||||
{
|
||||
if (i == best.base)
|
||||
*tp++ = ':';
|
||||
continue;
|
||||
}
|
||||
/* Are we following an initial run of 0x00s or any real hex? */
|
||||
if (i != 0)
|
||||
*tp++ = ':';
|
||||
/* Is this address an encapsulated IPv4? */
|
||||
if (i == 6 && best.base == 0 &&
|
||||
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
|
||||
{
|
||||
if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp)))
|
||||
return (NULL);
|
||||
tp += strlen (tp);
|
||||
break;
|
||||
}
|
||||
{
|
||||
int len = sprintf (tp, "%x", words[i]);
|
||||
if (len < 0)
|
||||
return NULL;
|
||||
tp += len;
|
||||
}
|
||||
}
|
||||
/* Was it a trailing run of 0x00's? */
|
||||
if (best.base != -1 && (best.base + best.len) ==
|
||||
(NS_IN6ADDRSZ / NS_INT16SZ))
|
||||
*tp++ = ':';
|
||||
*tp++ = '\0';
|
||||
|
||||
/*
|
||||
* Check for overflow, copy, and we're done.
|
||||
*/
|
||||
if ((socklen_t) (tp - tmp) > size)
|
||||
{
|
||||
errno = ENOSPC;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return strcpy (dst, tmp);
|
||||
}
|
||||
|
||||
#endif
|
||||
253
lib/inet_pton.c
Normal file
253
lib/inet_pton.c
Normal file
|
|
@ -0,0 +1,253 @@
|
|||
/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form
|
||||
|
||||
Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Specification. */
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <c-ctype.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define NS_INADDRSZ 4
|
||||
#define NS_IN6ADDRSZ 16
|
||||
#define NS_INT16SZ 2
|
||||
|
||||
/*
|
||||
* WARNING: Don't even consider trying to compile this on a system where
|
||||
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
|
||||
*/
|
||||
|
||||
static int inet_pton4 (const char *src, unsigned char *dst);
|
||||
#if HAVE_IPV6
|
||||
static int inet_pton6 (const char *src, unsigned char *dst);
|
||||
#endif
|
||||
|
||||
/* int
|
||||
* inet_pton(af, src, dst)
|
||||
* convert from presentation format (which usually means ASCII printable)
|
||||
* to network format (which is usually some kind of binary format).
|
||||
* return:
|
||||
* 1 if the address was valid for the specified address family
|
||||
* 0 if the address wasn't valid (`dst' is untouched in this case)
|
||||
* -1 if some other error occurred (`dst' is untouched in this case, too)
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
int
|
||||
inet_pton (int af, const char *restrict src, void *restrict dst)
|
||||
{
|
||||
switch (af)
|
||||
{
|
||||
case AF_INET:
|
||||
return (inet_pton4 (src, dst));
|
||||
|
||||
#if HAVE_IPV6
|
||||
case AF_INET6:
|
||||
return (inet_pton6 (src, dst));
|
||||
#endif
|
||||
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* int
|
||||
* inet_pton4(src, dst)
|
||||
* like inet_aton() but without all the hexadecimal, octal (with the
|
||||
* exception of 0) and shorthand.
|
||||
* return:
|
||||
* 1 if `src' is a valid dotted quad, else 0.
|
||||
* notice:
|
||||
* does not touch `dst' unless it's returning 1.
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
static int
|
||||
inet_pton4 (const char *restrict src, unsigned char *restrict dst)
|
||||
{
|
||||
int saw_digit, octets, ch;
|
||||
unsigned char tmp[NS_INADDRSZ], *tp;
|
||||
|
||||
saw_digit = 0;
|
||||
octets = 0;
|
||||
*(tp = tmp) = 0;
|
||||
while ((ch = *src++) != '\0')
|
||||
{
|
||||
|
||||
if (ch >= '0' && ch <= '9')
|
||||
{
|
||||
unsigned new = *tp * 10 + (ch - '0');
|
||||
|
||||
if (saw_digit && *tp == 0)
|
||||
return (0);
|
||||
if (new > 255)
|
||||
return (0);
|
||||
*tp = new;
|
||||
if (!saw_digit)
|
||||
{
|
||||
if (++octets > 4)
|
||||
return (0);
|
||||
saw_digit = 1;
|
||||
}
|
||||
}
|
||||
else if (ch == '.' && saw_digit)
|
||||
{
|
||||
if (octets == 4)
|
||||
return (0);
|
||||
*++tp = 0;
|
||||
saw_digit = 0;
|
||||
}
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
if (octets < 4)
|
||||
return (0);
|
||||
memcpy (dst, tmp, NS_INADDRSZ);
|
||||
return (1);
|
||||
}
|
||||
|
||||
#if HAVE_IPV6
|
||||
|
||||
/* int
|
||||
* inet_pton6(src, dst)
|
||||
* convert presentation level address to network order binary form.
|
||||
* return:
|
||||
* 1 if `src' is a valid [RFC1884 2.2] address, else 0.
|
||||
* notice:
|
||||
* (1) does not touch `dst' unless it's returning 1.
|
||||
* (2) :: in a full address is silently ignored.
|
||||
* credit:
|
||||
* inspired by Mark Andrews.
|
||||
* author:
|
||||
* Paul Vixie, 1996.
|
||||
*/
|
||||
static int
|
||||
inet_pton6 (const char *restrict src, unsigned char *restrict dst)
|
||||
{
|
||||
static const char xdigits[] = "0123456789abcdef";
|
||||
unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
|
||||
const char *curtok;
|
||||
int ch, saw_xdigit;
|
||||
unsigned val;
|
||||
|
||||
tp = memset (tmp, '\0', NS_IN6ADDRSZ);
|
||||
endp = tp + NS_IN6ADDRSZ;
|
||||
colonp = NULL;
|
||||
/* Leading :: requires some special handling. */
|
||||
if (*src == ':')
|
||||
if (*++src != ':')
|
||||
return (0);
|
||||
curtok = src;
|
||||
saw_xdigit = 0;
|
||||
val = 0;
|
||||
while ((ch = c_tolower (*src++)) != '\0')
|
||||
{
|
||||
const char *pch;
|
||||
|
||||
pch = strchr (xdigits, ch);
|
||||
if (pch != NULL)
|
||||
{
|
||||
val <<= 4;
|
||||
val |= (pch - xdigits);
|
||||
if (val > 0xffff)
|
||||
return (0);
|
||||
saw_xdigit = 1;
|
||||
continue;
|
||||
}
|
||||
if (ch == ':')
|
||||
{
|
||||
curtok = src;
|
||||
if (!saw_xdigit)
|
||||
{
|
||||
if (colonp)
|
||||
return (0);
|
||||
colonp = tp;
|
||||
continue;
|
||||
}
|
||||
else if (*src == '\0')
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
if (tp + NS_INT16SZ > endp)
|
||||
return (0);
|
||||
*tp++ = (u_char) (val >> 8) & 0xff;
|
||||
*tp++ = (u_char) val & 0xff;
|
||||
saw_xdigit = 0;
|
||||
val = 0;
|
||||
continue;
|
||||
}
|
||||
if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
|
||||
inet_pton4 (curtok, tp) > 0)
|
||||
{
|
||||
tp += NS_INADDRSZ;
|
||||
saw_xdigit = 0;
|
||||
break; /* '\0' was seen by inet_pton4(). */
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
if (saw_xdigit)
|
||||
{
|
||||
if (tp + NS_INT16SZ > endp)
|
||||
return (0);
|
||||
*tp++ = (u_char) (val >> 8) & 0xff;
|
||||
*tp++ = (u_char) val & 0xff;
|
||||
}
|
||||
if (colonp != NULL)
|
||||
{
|
||||
/*
|
||||
* Since some memmove()'s erroneously fail to handle
|
||||
* overlapping regions, we'll do the shift by hand.
|
||||
*/
|
||||
const int n = tp - colonp;
|
||||
int i;
|
||||
|
||||
if (tp == endp)
|
||||
return (0);
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
endp[-i] = colonp[n - i];
|
||||
colonp[n - i] = 0;
|
||||
}
|
||||
tp = endp;
|
||||
}
|
||||
if (tp != endp)
|
||||
return (0);
|
||||
memcpy (dst, tmp, NS_IN6ADDRSZ);
|
||||
return (1);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
/* Specification. */
|
||||
#include "localcharset.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
|
@ -44,6 +45,7 @@
|
|||
#endif
|
||||
|
||||
#if !defined WIN32_NATIVE
|
||||
# include <unistd.h>
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
# include <langinfo.h>
|
||||
# else
|
||||
|
|
@ -75,6 +77,11 @@
|
|||
# include "configmake.h"
|
||||
#endif
|
||||
|
||||
/* Define O_NOFOLLOW to 0 on platforms where it does not exist. */
|
||||
#ifndef O_NOFOLLOW
|
||||
# define O_NOFOLLOW 0
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
|
||||
/* Win32, Cygwin, OS/2, DOS */
|
||||
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||
|
|
@ -117,7 +124,6 @@ get_charset_aliases (void)
|
|||
if (cp == NULL)
|
||||
{
|
||||
#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
|
||||
FILE *fp;
|
||||
const char *dir;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
|
@ -143,77 +149,105 @@ get_charset_aliases (void)
|
|||
}
|
||||
}
|
||||
|
||||
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||
/* Out of memory or file not found, treat it as empty. */
|
||||
if (file_name == NULL)
|
||||
/* Out of memory. Treat the file as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
int fd;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
size_t l1, l2;
|
||||
char *old_res_ptr;
|
||||
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
old_res_ptr = res_ptr;
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = (char *) malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = (char *) realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
if (old_res_ptr != NULL)
|
||||
free (old_res_ptr);
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
/* Open the file. Reject symbolic links on platforms that support
|
||||
O_NOFOLLOW. This is a security feature. Without it, an attacker
|
||||
could retrieve parts of the contents (namely, the tail of the
|
||||
first line that starts with "* ") of an arbitrary file by placing
|
||||
a symbolic link to that file under the name "charset.alias" in
|
||||
some writable directory and defining the environment variable
|
||||
CHARSETALIASDIR to point to that directory. */
|
||||
fd = open (file_name,
|
||||
O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
|
||||
if (fd < 0)
|
||||
/* File not found. Treat it as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
FILE *fp;
|
||||
|
||||
if (file_name != NULL)
|
||||
free (file_name);
|
||||
fp = fdopen (fd, "r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
/* Out of memory. Treat the file as empty. */
|
||||
close (fd);
|
||||
cp = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
size_t l1, l2;
|
||||
char *old_res_ptr;
|
||||
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
old_res_ptr = res_ptr;
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = (char *) malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = (char *) realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
if (old_res_ptr != NULL)
|
||||
free (old_res_ptr);
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free (file_name);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
|
|
|
|||
92
lib/lstat.c
Normal file
92
lib/lstat.c
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
/* Work around a bug of lstat on some systems
|
||||
|
||||
Copyright (C) 1997-1999, 2000-2006, 2008-2009 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* written by Jim Meyering */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if !HAVE_LSTAT
|
||||
/* On systems that lack symlinks, our replacement <sys/stat.h> already
|
||||
defined lstat as stat, so there is nothing further to do other than
|
||||
avoid an empty file. */
|
||||
typedef int dummy;
|
||||
#else /* HAVE_LSTAT */
|
||||
|
||||
/* Get the original definition of lstat. It might be defined as a macro. */
|
||||
# define __need_system_sys_stat_h
|
||||
# include <sys/types.h>
|
||||
# include <sys/stat.h>
|
||||
# undef __need_system_sys_stat_h
|
||||
|
||||
static inline int
|
||||
orig_lstat (const char *filename, struct stat *buf)
|
||||
{
|
||||
return lstat (filename, buf);
|
||||
}
|
||||
|
||||
/* Specification. */
|
||||
# include <sys/stat.h>
|
||||
|
||||
# include <string.h>
|
||||
# include <errno.h>
|
||||
|
||||
/* lstat works differently on Linux and Solaris systems. POSIX (see
|
||||
`pathname resolution' in the glossary) requires that programs like
|
||||
`ls' take into consideration the fact that FILE has a trailing slash
|
||||
when FILE is a symbolic link. On Linux and Solaris 10 systems, the
|
||||
lstat function already has the desired semantics (in treating
|
||||
`lstat ("symlink/", sbuf)' just like `lstat ("symlink/.", sbuf)',
|
||||
but on Solaris 9 and earlier it does not.
|
||||
|
||||
If FILE has a trailing slash and specifies a symbolic link,
|
||||
then use stat() to get more info on the referent of FILE.
|
||||
If the referent is a non-directory, then set errno to ENOTDIR
|
||||
and return -1. Otherwise, return stat's result. */
|
||||
|
||||
int
|
||||
rpl_lstat (const char *file, struct stat *sbuf)
|
||||
{
|
||||
size_t len;
|
||||
int lstat_result = orig_lstat (file, sbuf);
|
||||
|
||||
if (lstat_result != 0)
|
||||
return lstat_result;
|
||||
|
||||
/* This replacement file can blindly check against '/' rather than
|
||||
using the ISSLASH macro, because all platforms with '\\' either
|
||||
lack symlinks (mingw) or have working lstat (cygwin) and thus do
|
||||
not compile this file. 0 len should have already been filtered
|
||||
out above, with a failure return of ENOENT. */
|
||||
len = strlen (file);
|
||||
if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode))
|
||||
return 0;
|
||||
|
||||
/* At this point, a trailing slash is only permitted on
|
||||
symlink-to-dir; but it should have found information on the
|
||||
directory, not the symlink. Call stat() to get info about the
|
||||
link's referent. Our replacement stat guarantees valid results,
|
||||
even if the symlink is not pointing to a directory. */
|
||||
if (!S_ISLNK (sbuf->st_mode))
|
||||
{
|
||||
errno = ENOTDIR;
|
||||
return -1;
|
||||
}
|
||||
return stat (file, sbuf);
|
||||
}
|
||||
|
||||
#endif /* HAVE_LSTAT */
|
||||
47
lib/netinet_in.in.h
Normal file
47
lib/netinet_in.in.h
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/* Substitute for <netinet/in.h>.
|
||||
Copyright (C) 2007-2008 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef _GL_NETINET_IN_H
|
||||
|
||||
#if @HAVE_NETINET_IN_H@
|
||||
|
||||
# if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
# endif
|
||||
|
||||
/* On many platforms, <netinet/in.h> assumes prior inclusion of
|
||||
<sys/types.h>. */
|
||||
# include <sys/types.h>
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
# @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _GL_NETINET_IN_H
|
||||
#define _GL_NETINET_IN_H
|
||||
|
||||
#if !@HAVE_NETINET_IN_H@
|
||||
|
||||
/* A platform that lacks <netinet/in.h>. */
|
||||
|
||||
# include <sys/socket.h>
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _GL_NETINET_IN_H */
|
||||
#endif /* _GL_NETINET_IN_H */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* Stub for readlink().
|
||||
Copyright (C) 2003-2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003-2007, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
|
|
@ -20,30 +20,55 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#if !HAVE_READLINK
|
||||
|
||||
/* readlink() substitute for systems that don't have a readlink() function,
|
||||
such as DJGPP 2.03 and mingw32. */
|
||||
|
||||
/* The official POSIX return type of readlink() is ssize_t, but since here
|
||||
we have no declaration in a public header file, we use 'int' as return
|
||||
type. */
|
||||
|
||||
int
|
||||
readlink (const char *path, char *buf, size_t bufsize)
|
||||
ssize_t
|
||||
readlink (const char *name, char *buf _UNUSED_PARAMETER_,
|
||||
size_t bufsize _UNUSED_PARAMETER_)
|
||||
{
|
||||
struct stat statbuf;
|
||||
|
||||
/* In general we should use lstat() here, not stat(). But on platforms
|
||||
without symbolic links lstat() - if it exists - would be equivalent to
|
||||
without symbolic links, lstat() - if it exists - would be equivalent to
|
||||
stat(), therefore we can use stat(). This saves us a configure check. */
|
||||
if (stat (path, &statbuf) >= 0)
|
||||
if (stat (name, &statbuf) >= 0)
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
#else /* HAVE_READLINK */
|
||||
|
||||
# undef readlink
|
||||
|
||||
/* readlink() wrapper that uses correct types, for systems like cygwin
|
||||
1.5.x where readlink returns int, and which rejects trailing slash,
|
||||
for Solaris 9. */
|
||||
|
||||
ssize_t
|
||||
rpl_readlink (const char *name, char *buf, size_t bufsize)
|
||||
{
|
||||
# if READLINK_TRAILING_SLASH_BUG
|
||||
size_t len = strlen (name);
|
||||
if (len && name[len - 1] == '/')
|
||||
{
|
||||
/* Even if name without the slash is a symlink to a directory,
|
||||
both lstat() and stat() must resolve the trailing slash to
|
||||
the directory rather than the symlink. We can therefore
|
||||
safely use stat() to distinguish between EINVAL and
|
||||
ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */
|
||||
struct stat st;
|
||||
if (stat (name, &st) == 0)
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
# endif /* READLINK_TRAILING_SLASH_BUG */
|
||||
return readlink (name, buf, bufsize);
|
||||
}
|
||||
|
||||
#endif /* HAVE_READLINK */
|
||||
|
|
|
|||
104
lib/stat.c
Normal file
104
lib/stat.c
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/* Work around platform bugs in stat.
|
||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* written by Eric Blake */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Get the original definition of stat. It might be defined as a macro. */
|
||||
#define __need_system_sys_stat_h
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#undef __need_system_sys_stat_h
|
||||
|
||||
static inline int
|
||||
orig_stat (const char *filename, struct stat *buf)
|
||||
{
|
||||
return stat (filename, buf);
|
||||
}
|
||||
|
||||
/* Specification. */
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Store information about NAME into ST. Work around bugs with
|
||||
trailing slashes. Mingw has other bugs (such as st_ino always
|
||||
being 0 on success) which this wrapper does not work around. But
|
||||
at least this implementation provides the ability to emulate fchdir
|
||||
correctly. */
|
||||
|
||||
int
|
||||
rpl_stat (char const *name, struct stat *st)
|
||||
{
|
||||
int result = orig_stat (name, st);
|
||||
#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))
|
||||
{
|
||||
size_t len = strlen (name);
|
||||
if (ISSLASH (name[len - 1]))
|
||||
{
|
||||
errno = ENOTDIR;
|
||||
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;
|
||||
if (PATH_MAX <= len)
|
||||
errno = ENAMETOOLONG;
|
||||
else if (len)
|
||||
{
|
||||
strcpy (fixed_name, name);
|
||||
if (ISSLASH (fixed_name[len - 1]))
|
||||
{
|
||||
check_dir = true;
|
||||
while (len && ISSLASH (fixed_name[len - 1]))
|
||||
fixed_name[--len] = '\0';
|
||||
if (!len)
|
||||
fixed_name[0] = '/';
|
||||
}
|
||||
else
|
||||
fixed_name[len++] = '/';
|
||||
result = orig_stat (fixed_name, st);
|
||||
if (result == 0 && check_dir && !S_ISDIR (st->st_mode))
|
||||
{
|
||||
result = -1;
|
||||
errno = ENOTDIR;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* REPLACE_FUNC_STAT_DIR */
|
||||
return result;
|
||||
}
|
||||
86
lib/stddef.in.h
Normal file
86
lib/stddef.in.h
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
|
||||
|
||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Eric Blake. */
|
||||
|
||||
/*
|
||||
* POSIX 2008 <stddef.h> for platforms that have issues.
|
||||
* <http://www.opengroup.org/susv3xbd/stddef.h.html>
|
||||
*/
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
#endif
|
||||
|
||||
#if defined __need_wchar_t || defined __need_size_t \
|
||||
|| defined __need_ptrdiff_t || defined __need_NULL \
|
||||
|| defined __need_wint_t
|
||||
/* Special invocation convention inside gcc header files. In
|
||||
particular, gcc provides a version of <stddef.h> that blindly
|
||||
redefines NULL even when __need_wint_t was defined, even though
|
||||
wint_t is not normally provided by <stddef.h>. Hence, we must
|
||||
remember if special invocation has ever been used to obtain wint_t,
|
||||
in which case we need to clean up NULL yet again. */
|
||||
|
||||
# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
|
||||
# ifdef __need_wint_t
|
||||
# undef _GL_STDDEF_H
|
||||
# define _GL_STDDEF_WINT_T
|
||||
# endif
|
||||
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
|
||||
# endif
|
||||
|
||||
#else
|
||||
/* Normal invocation convention. */
|
||||
|
||||
# ifndef _GL_STDDEF_H
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
|
||||
# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
|
||||
|
||||
# ifndef _GL_STDDEF_H
|
||||
# define _GL_STDDEF_H
|
||||
|
||||
/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */
|
||||
#if @REPLACE_NULL@
|
||||
# undef NULL
|
||||
# ifdef __cplusplus
|
||||
/* ISO C++ says that the macro NULL must expand to an integer constant
|
||||
expression, hence '((void *) 0)' is not allowed in C++. */
|
||||
# if __GNUG__ >= 3
|
||||
/* GNU C++ has a __null macro that behaves like an integer ('int' or
|
||||
'long') but has the same size as a pointer. Use that, to avoid
|
||||
warnings. */
|
||||
# define NULL __null
|
||||
# else
|
||||
# define NULL 0L
|
||||
# endif
|
||||
# else
|
||||
# define NULL ((void *) 0)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Some platforms lack wchar_t. */
|
||||
#if !@HAVE_WCHAR_T@
|
||||
# define wchar_t int
|
||||
#endif
|
||||
|
||||
# endif /* _GL_STDDEF_H */
|
||||
# endif /* _GL_STDDEF_H */
|
||||
#endif /* __need_XXX */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* POSIX compatible FILE stream write function.
|
||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 2008-2009 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2008.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -63,6 +63,7 @@
|
|||
}
|
||||
|
||||
# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */
|
||||
# if !DEPENDS_ON_LIBINTL /* avoid collision with intl/printf.c */
|
||||
int
|
||||
printf (const char *format, ...)
|
||||
{
|
||||
|
|
@ -75,6 +76,7 @@ printf (const char *format, ...)
|
|||
|
||||
return retval;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */
|
||||
|
|
@ -92,7 +94,7 @@ fprintf (FILE *stream, const char *format, ...)
|
|||
}
|
||||
# endif
|
||||
|
||||
# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vprintf.c */
|
||||
# if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */
|
||||
int
|
||||
vprintf (const char *format, va_list args)
|
||||
{
|
||||
|
|
@ -100,7 +102,7 @@ vprintf (const char *format, va_list args)
|
|||
}
|
||||
# endif
|
||||
|
||||
# if !REPLACE_VPRINTF_POSIX /* avoid collision with vfprintf.c */
|
||||
# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */
|
||||
int
|
||||
vfprintf (FILE *stream, const char *format, va_list args)
|
||||
#undef vfprintf
|
||||
|
|
|
|||
688
lib/stdio.in.h
688
lib/stdio.in.h
|
|
@ -68,6 +68,70 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if @GNULIB_DPRINTF@
|
||||
# if @REPLACE_DPRINTF@
|
||||
# define dprintf rpl_dprintf
|
||||
# endif
|
||||
# if @REPLACE_DPRINTF@ || !@HAVE_DPRINTF@
|
||||
extern int dprintf (int fd, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef dprintf
|
||||
# define dprintf(d,f,a) \
|
||||
(GL_LINK_WARNING ("dprintf is unportable - " \
|
||||
"use gnulib module dprintf for portability"), \
|
||||
dprintf (d, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FCLOSE@
|
||||
# if @REPLACE_FCLOSE@
|
||||
# define fclose rpl_fclose
|
||||
/* Close STREAM and its underlying file descriptor. */
|
||||
extern int fclose (FILE *stream);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fclose
|
||||
# define fclose(f) \
|
||||
(GL_LINK_WARNING ("fclose is not always POSIX compliant - " \
|
||||
"use gnulib module fclose for portable " \
|
||||
"POSIX compliance"), \
|
||||
fclose (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FFLUSH@
|
||||
# if @REPLACE_FFLUSH@
|
||||
# define fflush rpl_fflush
|
||||
/* Flush all pending data on STREAM according to POSIX rules. Both
|
||||
output and seekable input streams are supported.
|
||||
Note! LOSS OF DATA can occur if fflush is applied on an input stream
|
||||
that is _not_seekable_ or on an update stream that is _not_seekable_
|
||||
and in which the most recent operation was input. Seekability can
|
||||
be tested with lseek(fileno(fp),0,SEEK_CUR). */
|
||||
extern int fflush (FILE *gl_stream);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fflush
|
||||
# define fflush(f) \
|
||||
(GL_LINK_WARNING ("fflush is not always POSIX compliant - " \
|
||||
"use gnulib module fflush for portable " \
|
||||
"POSIX compliance"), \
|
||||
fflush (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FOPEN@
|
||||
# if @REPLACE_FOPEN@
|
||||
# undef fopen
|
||||
# define fopen rpl_fopen
|
||||
extern FILE * fopen (const char *filename, const char *mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fopen
|
||||
# define fopen(f,m) \
|
||||
(GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \
|
||||
"use gnulib module fopen for portability"), \
|
||||
fopen (f, m))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FPRINTF_POSIX@
|
||||
# if @REPLACE_FPRINTF@
|
||||
|
|
@ -88,215 +152,37 @@ extern int fprintf (FILE *fp, const char *format, ...)
|
|||
fprintf)
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VFPRINTF_POSIX@
|
||||
# if @REPLACE_VFPRINTF@
|
||||
# define vfprintf rpl_vfprintf
|
||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
#if @GNULIB_FPURGE@
|
||||
# if @REPLACE_FPURGE@
|
||||
# define fpurge rpl_fpurge
|
||||
# endif
|
||||
#elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# define vfprintf rpl_vfprintf
|
||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vfprintf
|
||||
# define vfprintf(s,f,a) \
|
||||
(GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vfprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vfprintf (s, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PRINTF_POSIX@
|
||||
# if @REPLACE_PRINTF@
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define printf __printf__
|
||||
extern int printf (const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 1, 2)));
|
||||
# endif
|
||||
#elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define printf __printf__
|
||||
extern int printf (const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 1, 2)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef printf
|
||||
# define printf \
|
||||
(GL_LINK_WARNING ("printf is not always POSIX compliant - " \
|
||||
"use gnulib module printf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
printf)
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define format(kind,m,n) format (__##kind##__, m, n)
|
||||
# define __format__(kind,m,n) __format__ (__##kind##__, m, n)
|
||||
# define ____printf____ __printf__
|
||||
# define ____scanf____ __scanf__
|
||||
# define ____strftime____ __strftime__
|
||||
# define ____strfmon____ __strfmon__
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VPRINTF_POSIX@
|
||||
# if @REPLACE_VPRINTF@
|
||||
# define vprintf rpl_vprintf
|
||||
extern int vprintf (const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 1, 0)));
|
||||
# endif
|
||||
#elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# define vprintf rpl_vprintf
|
||||
extern int vprintf (const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 1, 0)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vprintf
|
||||
# define vprintf(f,a) \
|
||||
(GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vprintf (f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_SNPRINTF@
|
||||
# if @REPLACE_SNPRINTF@
|
||||
# define snprintf rpl_snprintf
|
||||
# endif
|
||||
# if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@
|
||||
extern int snprintf (char *str, size_t size, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||
# if @REPLACE_FPURGE@ || !@HAVE_DECL_FPURGE@
|
||||
/* Discard all pending buffered I/O data on STREAM.
|
||||
STREAM must not be wide-character oriented.
|
||||
When discarding pending output, the file position is set back to where it
|
||||
was before the write calls. When discarding pending input, the file
|
||||
position is advanced to match the end of the previously read input.
|
||||
Return 0 if successful. Upon error, return -1 and set errno. */
|
||||
extern int fpurge (FILE *gl_stream);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef snprintf
|
||||
# define snprintf \
|
||||
(GL_LINK_WARNING ("snprintf is unportable - " \
|
||||
"use gnulib module snprintf for portability"), \
|
||||
snprintf)
|
||||
# undef fpurge
|
||||
# define fpurge(f) \
|
||||
(GL_LINK_WARNING ("fpurge is not always present - " \
|
||||
"use gnulib module fpurge for portability"), \
|
||||
fpurge (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VSNPRINTF@
|
||||
# if @REPLACE_VSNPRINTF@
|
||||
# define vsnprintf rpl_vsnprintf
|
||||
# endif
|
||||
# if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@
|
||||
extern int vsnprintf (char *str, size_t size, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vsnprintf
|
||||
# define vsnprintf(b,s,f,a) \
|
||||
(GL_LINK_WARNING ("vsnprintf is unportable - " \
|
||||
"use gnulib module vsnprintf for portability"), \
|
||||
vsnprintf (b, s, f, a))
|
||||
#if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef fputc
|
||||
# define fputc rpl_fputc
|
||||
extern int fputc (int c, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_SPRINTF_POSIX@
|
||||
# if @REPLACE_SPRINTF@
|
||||
# define sprintf rpl_sprintf
|
||||
extern int sprintf (char *str, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef sprintf
|
||||
# define sprintf \
|
||||
(GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \
|
||||
"use gnulib module sprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
sprintf)
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VSPRINTF_POSIX@
|
||||
# if @REPLACE_VSPRINTF@
|
||||
# define vsprintf rpl_vsprintf
|
||||
extern int vsprintf (char *str, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vsprintf
|
||||
# define vsprintf(b,f,a) \
|
||||
(GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vsprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vsprintf (b, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_DPRINTF@
|
||||
# if @REPLACE_DPRINTF@
|
||||
# define dprintf rpl_dprintf
|
||||
# endif
|
||||
# if @REPLACE_DPRINTF@ || !@HAVE_DPRINTF@
|
||||
extern int dprintf (int fd, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef dprintf
|
||||
# define dprintf(d,f,a) \
|
||||
(GL_LINK_WARNING ("dprintf is unportable - " \
|
||||
"use gnulib module dprintf for portability"), \
|
||||
dprintf (d, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VDPRINTF@
|
||||
# if @REPLACE_VDPRINTF@
|
||||
# define vdprintf rpl_vdprintf
|
||||
# endif
|
||||
# if @REPLACE_VDPRINTF@ || !@HAVE_VDPRINTF@
|
||||
extern int vdprintf (int fd, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vdprintf
|
||||
# define vdprintf(d,f,a) \
|
||||
(GL_LINK_WARNING ("vdprintf is unportable - " \
|
||||
"use gnulib module vdprintf for portability"), \
|
||||
vdprintf (d, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VASPRINTF@
|
||||
# if @REPLACE_VASPRINTF@
|
||||
# define asprintf rpl_asprintf
|
||||
# define vasprintf rpl_vasprintf
|
||||
# endif
|
||||
# if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@
|
||||
/* Write formatted output to a string dynamically allocated with malloc().
|
||||
If the memory allocation succeeds, store the address of the string in
|
||||
*RESULT and return the number of resulting bytes, excluding the trailing
|
||||
NUL. Upon memory allocation error, or some other error, return -1. */
|
||||
extern int asprintf (char **result, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int vasprintf (char **result, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_OBSTACK_PRINTF@
|
||||
# if @REPLACE_OBSTACK_PRINTF@
|
||||
# define obstack_printf rpl_osbtack_printf
|
||||
# define obstack_vprintf rpl_obstack_vprintf
|
||||
# endif
|
||||
# if @REPLACE_OBSTACK_PRINTF@ || !@HAVE_DECL_OBSTACK_PRINTF@
|
||||
struct obstack;
|
||||
/* Grow an obstack with formatted output. Return the number of
|
||||
bytes added to OBS. No trailing nul byte is added, and the
|
||||
object should be closed with obstack_finish before use. Upon
|
||||
memory allocation error, call obstack_alloc_failed_handler. Upon
|
||||
other error, return -1. */
|
||||
extern int obstack_printf (struct obstack *obs, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int obstack_vprintf (struct obstack *obs, const char *format,
|
||||
va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FOPEN@
|
||||
# if @REPLACE_FOPEN@
|
||||
# undef fopen
|
||||
# define fopen rpl_fopen
|
||||
extern FILE * fopen (const char *filename, const char *mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fopen
|
||||
# define fopen(f,m) \
|
||||
(GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \
|
||||
"use gnulib module fopen for portability"), \
|
||||
fopen (f, m))
|
||||
#if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef fputs
|
||||
# define fputs rpl_fputs
|
||||
extern int fputs (const char *string, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FREOPEN@
|
||||
|
|
@ -313,22 +199,6 @@ extern FILE * freopen (const char *filename, const char *mode, FILE *stream);
|
|||
freopen (f, m, s))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FSEEKO@
|
||||
# if @REPLACE_FSEEKO@
|
||||
/* Provide fseek, fseeko functions that are aware of a preceding
|
||||
fflush(), and which detect pipes. */
|
||||
# define fseeko rpl_fseeko
|
||||
extern int fseeko (FILE *fp, off_t offset, int whence);
|
||||
# define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence)
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fseeko
|
||||
# define fseeko(f,o,w) \
|
||||
(GL_LINK_WARNING ("fseeko is unportable - " \
|
||||
"use gnulib module fseeko for portability"), \
|
||||
fseeko (f, o, w))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FSEEK@ && @REPLACE_FSEEK@
|
||||
extern int rpl_fseek (FILE *fp, long offset, int whence);
|
||||
# undef fseek
|
||||
|
|
@ -351,18 +221,27 @@ extern int rpl_fseek (FILE *fp, long offset, int whence);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FTELLO@
|
||||
# if @REPLACE_FTELLO@
|
||||
# define ftello rpl_ftello
|
||||
extern off_t ftello (FILE *fp);
|
||||
# define ftell(fp) ftello (fp)
|
||||
#if @GNULIB_FSEEKO@
|
||||
# if @REPLACE_FSEEKO@
|
||||
/* Provide fseek, fseeko functions that are aware of a preceding
|
||||
fflush(), and which detect pipes. */
|
||||
# define fseeko rpl_fseeko
|
||||
extern int fseeko (FILE *fp, off_t offset, int whence);
|
||||
# if !@GNULIB_FSEEK@
|
||||
# undef fseek
|
||||
# define fseek(f,o,w) \
|
||||
(GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \
|
||||
"on 32-bit platforms - " \
|
||||
"use fseeko function for handling of large files"), \
|
||||
fseeko (f, o, w))
|
||||
# endif
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef ftello
|
||||
# define ftello(f) \
|
||||
(GL_LINK_WARNING ("ftello is unportable - " \
|
||||
"use gnulib module ftello for portability"), \
|
||||
ftello (f))
|
||||
# undef fseeko
|
||||
# define fseeko(f,o,w) \
|
||||
(GL_LINK_WARNING ("fseeko is unportable - " \
|
||||
"use gnulib module fseeko for portability"), \
|
||||
fseeko (f, o, w))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FTELL@ && @REPLACE_FTELL@
|
||||
|
|
@ -387,87 +266,25 @@ extern long rpl_ftell (FILE *fp);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FFLUSH@
|
||||
# if @REPLACE_FFLUSH@
|
||||
# define fflush rpl_fflush
|
||||
/* Flush all pending data on STREAM according to POSIX rules. Both
|
||||
output and seekable input streams are supported.
|
||||
Note! LOSS OF DATA can occur if fflush is applied on an input stream
|
||||
that is _not_seekable_ or on an update stream that is _not_seekable_
|
||||
and in which the most recent operation was input. Seekability can
|
||||
be tested with lseek(fileno(fp),0,SEEK_CUR). */
|
||||
extern int fflush (FILE *gl_stream);
|
||||
#if @GNULIB_FTELLO@
|
||||
# if @REPLACE_FTELLO@
|
||||
# define ftello rpl_ftello
|
||||
extern off_t ftello (FILE *fp);
|
||||
# if !@GNULIB_FTELL@
|
||||
# undef ftell
|
||||
# define ftell(f) \
|
||||
(GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \
|
||||
"on 32-bit platforms - " \
|
||||
"use ftello function for handling of large files"), \
|
||||
ftello (f))
|
||||
# endif
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fflush
|
||||
# define fflush(f) \
|
||||
(GL_LINK_WARNING ("fflush is not always POSIX compliant - " \
|
||||
"use gnulib module fflush for portable " \
|
||||
"POSIX compliance"), \
|
||||
fflush (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FPURGE@
|
||||
# if @REPLACE_FPURGE@
|
||||
# define fpurge rpl_fpurge
|
||||
# endif
|
||||
# if @REPLACE_FPURGE@ || !@HAVE_DECL_FPURGE@
|
||||
/* Discard all pending buffered I/O data on STREAM.
|
||||
STREAM must not be wide-character oriented.
|
||||
Return 0 if successful. Upon error, return -1 and set errno. */
|
||||
extern int fpurge (FILE *gl_stream);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fpurge
|
||||
# define fpurge(f) \
|
||||
(GL_LINK_WARNING ("fpurge is not always present - " \
|
||||
"use gnulib module fpurge for portability"), \
|
||||
fpurge (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FCLOSE@
|
||||
# if @REPLACE_FCLOSE@
|
||||
# define fclose rpl_fclose
|
||||
/* Close STREAM and its underlying file descriptor. */
|
||||
extern int fclose (FILE *stream);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fclose
|
||||
# define fclose(f) \
|
||||
(GL_LINK_WARNING ("fclose is not always POSIX compliant - " \
|
||||
"use gnulib module fclose for portable " \
|
||||
"POSIX compliance"), \
|
||||
fclose (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef fputc
|
||||
# define fputc rpl_fputc
|
||||
extern int fputc (int c, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef putc
|
||||
# define putc rpl_fputc
|
||||
extern int putc (int c, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTCHAR@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef putchar
|
||||
# define putchar rpl_putchar
|
||||
extern int putchar (int c);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef fputs
|
||||
# define fputs rpl_fputs
|
||||
extern int fputs (const char *string, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef puts
|
||||
# define puts rpl_puts
|
||||
extern int puts (const char *string);
|
||||
# undef ftello
|
||||
# define ftello(f) \
|
||||
(GL_LINK_WARNING ("ftello is unportable - " \
|
||||
"use gnulib module ftello for portability"), \
|
||||
ftello (f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
|
|
@ -517,6 +334,26 @@ extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream);
|
|||
getline (l, s, f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_OBSTACK_PRINTF@
|
||||
# if @REPLACE_OBSTACK_PRINTF@
|
||||
# define obstack_printf rpl_osbtack_printf
|
||||
# define obstack_vprintf rpl_obstack_vprintf
|
||||
# endif
|
||||
# if @REPLACE_OBSTACK_PRINTF@ || !@HAVE_DECL_OBSTACK_PRINTF@
|
||||
struct obstack;
|
||||
/* Grow an obstack with formatted output. Return the number of
|
||||
bytes added to OBS. No trailing nul byte is added, and the
|
||||
object should be closed with obstack_finish before use. Upon
|
||||
memory allocation error, call obstack_alloc_failed_handler. Upon
|
||||
other error, return -1. */
|
||||
extern int obstack_printf (struct obstack *obs, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int obstack_vprintf (struct obstack *obs, const char *format,
|
||||
va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PERROR@
|
||||
# if @REPLACE_PERROR@
|
||||
# define perror rpl_perror
|
||||
|
|
@ -533,6 +370,243 @@ extern void perror (const char *string);
|
|||
perror (s))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_POPEN@
|
||||
# if @REPLACE_POPEN@
|
||||
# undef popen
|
||||
# define popen rpl_popen
|
||||
extern FILE *popen (const char *cmd, const char *mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef popen
|
||||
# define popen(c,m) \
|
||||
(GL_LINK_WARNING ("popen is buggy on some platforms - " \
|
||||
"use gnulib module popen or pipe for more portability"), \
|
||||
popen (c, m))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PRINTF_POSIX@
|
||||
# if @REPLACE_PRINTF@
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define printf __printf__
|
||||
extern int printf (const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 1, 2)));
|
||||
# endif
|
||||
#elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define printf __printf__
|
||||
extern int printf (const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 1, 2)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef printf
|
||||
# define printf \
|
||||
(GL_LINK_WARNING ("printf is not always POSIX compliant - " \
|
||||
"use gnulib module printf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
printf)
|
||||
/* Don't break __attribute__((format(printf,M,N))). */
|
||||
# define format(kind,m,n) format (__##kind##__, m, n)
|
||||
# define __format__(kind,m,n) __format__ (__##kind##__, m, n)
|
||||
# define ____printf____ __printf__
|
||||
# define ____scanf____ __scanf__
|
||||
# define ____strftime____ __strftime__
|
||||
# define ____strfmon____ __strfmon__
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef putc
|
||||
# define putc rpl_fputc
|
||||
extern int putc (int c, FILE *stream);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTCHAR@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef putchar
|
||||
# define putchar rpl_putchar
|
||||
extern int putchar (int c);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# undef puts
|
||||
# define puts rpl_puts
|
||||
extern int puts (const char *string);
|
||||
#endif
|
||||
|
||||
#if @GNULIB_REMOVE@
|
||||
# if @REPLACE_REMOVE@
|
||||
# undef remove
|
||||
# define remove rpl_remove
|
||||
extern int remove (const char *name);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef remove
|
||||
# define remove(n) \
|
||||
(GL_LINK_WARNING ("remove cannot handle directories on some platforms - " \
|
||||
"use gnulib module remove for more portability"), \
|
||||
remove (n))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_RENAME@
|
||||
# if @REPLACE_RENAME@
|
||||
# undef rename
|
||||
# define rename rpl_rename
|
||||
extern int rename (const char *old, const char *new);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef rename
|
||||
# define rename(o,n) \
|
||||
(GL_LINK_WARNING ("rename is buggy on some platforms - " \
|
||||
"use gnulib module rename for more portability"), \
|
||||
rename (o, n))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_RENAMEAT@
|
||||
# if @REPLACE_RENAMEAT@
|
||||
# undef renameat
|
||||
# define renameat rpl_renameat
|
||||
# endif
|
||||
# if !@HAVE_RENAMEAT@ || @REPLACE_RENAMEAT@
|
||||
extern int renameat (int fd1, char const *file1, int fd2, char const *file2);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef renameat
|
||||
# define renameat(d1,f1,d2,f2) \
|
||||
(GL_LINK_WARNING ("renameat is not portable - " \
|
||||
"use gnulib module renameat for portability"), \
|
||||
renameat (d1, f1, d2, f2))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_SNPRINTF@
|
||||
# if @REPLACE_SNPRINTF@
|
||||
# define snprintf rpl_snprintf
|
||||
# endif
|
||||
# if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@
|
||||
extern int snprintf (char *str, size_t size, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef snprintf
|
||||
# define snprintf \
|
||||
(GL_LINK_WARNING ("snprintf is unportable - " \
|
||||
"use gnulib module snprintf for portability"), \
|
||||
snprintf)
|
||||
#endif
|
||||
|
||||
#if @GNULIB_SPRINTF_POSIX@
|
||||
# if @REPLACE_SPRINTF@
|
||||
# define sprintf rpl_sprintf
|
||||
extern int sprintf (char *str, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef sprintf
|
||||
# define sprintf \
|
||||
(GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \
|
||||
"use gnulib module sprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
sprintf)
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VASPRINTF@
|
||||
# if @REPLACE_VASPRINTF@
|
||||
# define asprintf rpl_asprintf
|
||||
# define vasprintf rpl_vasprintf
|
||||
# endif
|
||||
# if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@
|
||||
/* Write formatted output to a string dynamically allocated with malloc().
|
||||
If the memory allocation succeeds, store the address of the string in
|
||||
*RESULT and return the number of resulting bytes, excluding the trailing
|
||||
NUL. Upon memory allocation error, or some other error, return -1. */
|
||||
extern int asprintf (char **result, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int vasprintf (char **result, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VDPRINTF@
|
||||
# if @REPLACE_VDPRINTF@
|
||||
# define vdprintf rpl_vdprintf
|
||||
# endif
|
||||
# if @REPLACE_VDPRINTF@ || !@HAVE_VDPRINTF@
|
||||
extern int vdprintf (int fd, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vdprintf
|
||||
# define vdprintf(d,f,a) \
|
||||
(GL_LINK_WARNING ("vdprintf is unportable - " \
|
||||
"use gnulib module vdprintf for portability"), \
|
||||
vdprintf (d, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VFPRINTF_POSIX@
|
||||
# if @REPLACE_VFPRINTF@
|
||||
# define vfprintf rpl_vfprintf
|
||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# define vfprintf rpl_vfprintf
|
||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vfprintf
|
||||
# define vfprintf(s,f,a) \
|
||||
(GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vfprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vfprintf (s, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VPRINTF_POSIX@
|
||||
# if @REPLACE_VPRINTF@
|
||||
# define vprintf rpl_vprintf
|
||||
extern int vprintf (const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 1, 0)));
|
||||
# endif
|
||||
#elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||
# define vprintf rpl_vprintf
|
||||
extern int vprintf (const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 1, 0)));
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vprintf
|
||||
# define vprintf(f,a) \
|
||||
(GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vprintf (f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VSNPRINTF@
|
||||
# if @REPLACE_VSNPRINTF@
|
||||
# define vsnprintf rpl_vsnprintf
|
||||
# endif
|
||||
# if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@
|
||||
extern int vsnprintf (char *str, size_t size, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vsnprintf
|
||||
# define vsnprintf(b,s,f,a) \
|
||||
(GL_LINK_WARNING ("vsnprintf is unportable - " \
|
||||
"use gnulib module vsnprintf for portability"), \
|
||||
vsnprintf (b, s, f, a))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_VSPRINTF_POSIX@
|
||||
# if @REPLACE_VSPRINTF@
|
||||
# define vsprintf rpl_vsprintf
|
||||
extern int vsprintf (char *str, const char *format, va_list args)
|
||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef vsprintf
|
||||
# define vsprintf(b,f,a) \
|
||||
(GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \
|
||||
"use gnulib module vsprintf-posix for portable " \
|
||||
"POSIX compliance"), \
|
||||
vsprintf (b, f, a))
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
159
lib/stdlib.in.h
159
lib/stdlib.in.h
|
|
@ -35,6 +35,8 @@
|
|||
#ifndef _GL_STDLIB_H
|
||||
#define _GL_STDLIB_H
|
||||
|
||||
/* NetBSD 5.0 mis-defines NULL. */
|
||||
#include <stddef.h>
|
||||
|
||||
/* Solaris declares getloadavg() in <sys/loadavg.h>. */
|
||||
#if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@
|
||||
|
|
@ -85,37 +87,20 @@ struct random_data
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_MALLOC_POSIX@
|
||||
# if !@HAVE_MALLOC_POSIX@
|
||||
# undef malloc
|
||||
# define malloc rpl_malloc
|
||||
extern void * malloc (size_t size);
|
||||
#if @GNULIB_ATOLL@
|
||||
# if !@HAVE_ATOLL@
|
||||
/* Parse a signed decimal integer.
|
||||
Returns the value of the integer. Errors are not detected. */
|
||||
extern long long atoll (const char *string);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef malloc
|
||||
# define malloc(s) \
|
||||
(GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \
|
||||
"use gnulib module malloc-posix for portability"), \
|
||||
malloc (s))
|
||||
# undef atoll
|
||||
# define atoll(s) \
|
||||
(GL_LINK_WARNING ("atoll is unportable - " \
|
||||
"use gnulib module atoll for portability"), \
|
||||
atoll (s))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_REALLOC_POSIX@
|
||||
# if !@HAVE_REALLOC_POSIX@
|
||||
# undef realloc
|
||||
# define realloc rpl_realloc
|
||||
extern void * realloc (void *ptr, size_t size);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef realloc
|
||||
# define realloc(p,s) \
|
||||
(GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \
|
||||
"use gnulib module realloc-posix for portability"), \
|
||||
realloc (p, s))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_CALLOC_POSIX@
|
||||
# if !@HAVE_CALLOC_POSIX@
|
||||
# undef calloc
|
||||
|
|
@ -130,22 +115,21 @@ extern void * calloc (size_t nmemb, size_t size);
|
|||
calloc (n, s))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_ATOLL@
|
||||
# if !@HAVE_ATOLL@
|
||||
/* Parse a signed decimal integer.
|
||||
Returns the value of the integer. Errors are not detected. */
|
||||
extern long long atoll (const char *string);
|
||||
#if @GNULIB_CANONICALIZE_FILE_NAME@
|
||||
# if @REPLACE_CANONICALIZE_FILE_NAME@
|
||||
# define canonicalize_file_name rpl_canonicalize_file_name
|
||||
# endif
|
||||
# if !@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@
|
||||
extern char *canonicalize_file_name (const char *name);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef atoll
|
||||
# define atoll(s) \
|
||||
(GL_LINK_WARNING ("atoll is unportable - " \
|
||||
"use gnulib module atoll for portability"), \
|
||||
atoll (s))
|
||||
# undef canonicalize_file_name
|
||||
# define canonicalize_file_name(n) \
|
||||
(GL_LINK_WARNING ("canonicalize_file_name is unportable - " \
|
||||
"use gnulib module canonicalize-lgpl for portability"), \
|
||||
canonicalize_file_name (n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_GETLOADAVG@
|
||||
# if !@HAVE_DECL_GETLOADAVG@
|
||||
/* Store max(NELEM,3) load average numbers in LOADAVG[].
|
||||
|
|
@ -162,7 +146,6 @@ extern int getloadavg (double loadavg[], int nelem);
|
|||
getloadavg (l, n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_GETSUBOPT@
|
||||
/* Assuming *OPTIONP is a comma separated list of elements of the form
|
||||
"token" or "token=value", getsubopt parses the first of these elements.
|
||||
|
|
@ -186,6 +169,19 @@ extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
|
|||
getsubopt (o, t, v))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_MALLOC_POSIX@
|
||||
# if !@HAVE_MALLOC_POSIX@
|
||||
# undef malloc
|
||||
# define malloc rpl_malloc
|
||||
extern void * malloc (size_t size);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef malloc
|
||||
# define malloc(s) \
|
||||
(GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \
|
||||
"use gnulib module malloc-posix for portability"), \
|
||||
malloc (s))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_MKDTEMP@
|
||||
# if !@HAVE_MKDTEMP@
|
||||
|
|
@ -204,6 +200,29 @@ extern char * mkdtemp (char * /*template*/);
|
|||
mkdtemp (t))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_MKOSTEMP@
|
||||
# if !@HAVE_MKOSTEMP@
|
||||
/* Create a unique temporary file from TEMPLATE.
|
||||
The last six characters of TEMPLATE must be "XXXXXX";
|
||||
they are replaced with a string that makes the file name unique.
|
||||
The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
||||
and O_TEXT, O_BINARY (defined in "binary-io.h").
|
||||
The file is then created, with the specified flags, ensuring it didn't exist
|
||||
before.
|
||||
The file is created read-write (mask at least 0600 & ~umask), but it may be
|
||||
world-readable and world-writable (mask 0666 & ~umask), depending on the
|
||||
implementation.
|
||||
Returns the open file descriptor if successful, otherwise -1 and errno
|
||||
set. */
|
||||
extern int mkostemp (char * /*template*/, int /*flags*/);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mkostemp
|
||||
# define mkostemp(t,f) \
|
||||
(GL_LINK_WARNING ("mkostemp is unportable - " \
|
||||
"use gnulib module mkostemp for portability"), \
|
||||
mkostemp (t, f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_MKSTEMP@
|
||||
# if @REPLACE_MKSTEMP@
|
||||
|
|
@ -230,7 +249,6 @@ extern int mkstemp (char * /*template*/);
|
|||
mkstemp (t))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_PUTENV@
|
||||
# if @REPLACE_PUTENV@
|
||||
# undef putenv
|
||||
|
|
@ -239,7 +257,6 @@ extern int putenv (char *string);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_RANDOM_R@
|
||||
# if !@HAVE_RANDOM_R@
|
||||
|
||||
|
|
@ -276,6 +293,34 @@ int random_r (struct random_data *buf, int32_t *result);
|
|||
setstate_r (a,r))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_REALLOC_POSIX@
|
||||
# if !@HAVE_REALLOC_POSIX@
|
||||
# undef realloc
|
||||
# define realloc rpl_realloc
|
||||
extern void * realloc (void *ptr, size_t size);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef realloc
|
||||
# define realloc(p,s) \
|
||||
(GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \
|
||||
"use gnulib module realloc-posix for portability"), \
|
||||
realloc (p, s))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_REALPATH@
|
||||
# if @REPLACE_REALPATH@
|
||||
# define realpath rpl_realpath
|
||||
# endif
|
||||
# if !@HAVE_REALPATH@ || @REPLACE_REALPATH@
|
||||
extern char *realpath (const char *name, char *resolved);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef realpath
|
||||
# define realpath(n,r) \
|
||||
(GL_LINK_WARNING ("realpath is unportable - use gnulib module " \
|
||||
"canonicalize or canonicalize-lgpl for portability"), \
|
||||
realpath (n, r))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_RPMATCH@
|
||||
# if !@HAVE_RPMATCH@
|
||||
|
|
@ -291,7 +336,6 @@ extern int rpmatch (const char *response);
|
|||
rpmatch (r))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_SETENV@
|
||||
# if !@HAVE_SETENV@
|
||||
/* Set NAME to VALUE in the environment.
|
||||
|
|
@ -300,21 +344,6 @@ extern int setenv (const char *name, const char *value, int replace);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_UNSETENV@
|
||||
# if @HAVE_UNSETENV@
|
||||
# if @VOID_UNSETENV@
|
||||
/* On some systems, unsetenv() returns void.
|
||||
This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */
|
||||
# define unsetenv(name) ((unsetenv)(name), 0)
|
||||
# endif
|
||||
# else
|
||||
/* Remove the variable NAME from the environment. */
|
||||
extern int unsetenv (const char *name);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_STRTOD@
|
||||
# if @REPLACE_STRTOD@
|
||||
# define strtod rpl_strtod
|
||||
|
|
@ -331,7 +360,6 @@ extern double strtod (const char *str, char **endp);
|
|||
strtod (s, e))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_STRTOLL@
|
||||
# if !@HAVE_STRTOLL@
|
||||
/* Parse a signed integer whose textual representation starts at STRING.
|
||||
|
|
@ -352,7 +380,6 @@ extern long long strtoll (const char *string, char **endptr, int base);
|
|||
strtoll (s, e, b))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_STRTOULL@
|
||||
# if !@HAVE_STRTOULL@
|
||||
/* Parse an unsigned integer whose textual representation starts at STRING.
|
||||
|
|
@ -373,6 +400,18 @@ extern unsigned long long strtoull (const char *string, char **endptr, int base)
|
|||
strtoull (s, e, b))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_UNSETENV@
|
||||
# if @HAVE_UNSETENV@
|
||||
# if @VOID_UNSETENV@
|
||||
/* On some systems, unsetenv() returns void.
|
||||
This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */
|
||||
# define unsetenv(name) ((unsetenv)(name), 0)
|
||||
# endif
|
||||
# else
|
||||
/* Remove the variable NAME from the environment. */
|
||||
extern int unsetenv (const char *name);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
# else
|
||||
# include "strftime.h"
|
||||
# endif
|
||||
# include "ignore-value.h"
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
|
|
@ -198,12 +199,25 @@ extern char *tzname[];
|
|||
#if FPRINTFTIME
|
||||
# define cpy(n, s) \
|
||||
add ((n), \
|
||||
do \
|
||||
{ \
|
||||
if (to_lowcase) \
|
||||
fwrite_lowcase (p, (s), _n); \
|
||||
else if (to_uppcase) \
|
||||
fwrite_uppcase (p, (s), _n); \
|
||||
else \
|
||||
fwrite ((s), _n, 1, p))
|
||||
{ \
|
||||
/* We are ignoring the value of fwrite here, in spite of the \
|
||||
fact that technically, that may not be valid: the fwrite \
|
||||
specification in POSIX 2008 defers to that of fputc, which \
|
||||
is intended to be consistent with the one from ISO C, \
|
||||
which permits failure due to ENOMEM *without* setting the \
|
||||
stream's error indicator. */ \
|
||||
ignore_value (fwrite ((s), _n, 1, p)); \
|
||||
} \
|
||||
} \
|
||||
while (0) \
|
||||
)
|
||||
#else
|
||||
# define cpy(n, s) \
|
||||
add ((n), \
|
||||
|
|
|
|||
298
lib/striconveh.c
298
lib/striconveh.c
|
|
@ -1,5 +1,5 @@
|
|||
/* Character set conversion with error handling.
|
||||
Copyright (C) 2001-2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001-2009 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible and Simon Josefsson.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -40,9 +40,98 @@
|
|||
|
||||
#if HAVE_ICONV
|
||||
|
||||
/* The caller must provide CD, CD1, CD2, not just CD, because when a conversion
|
||||
error occurs, we may have to determine the Unicode representation of the
|
||||
inconvertible character. */
|
||||
/* The caller must provide an iconveh_t, not just an iconv_t, because when a
|
||||
conversion error occurs, we may have to determine the Unicode representation
|
||||
of the inconvertible character. */
|
||||
|
||||
int
|
||||
iconveh_open (const char *to_codeset, const char *from_codeset, iconveh_t *cdp)
|
||||
{
|
||||
iconv_t cd;
|
||||
iconv_t cd1;
|
||||
iconv_t cd2;
|
||||
|
||||
/* Avoid glibc-2.1 bug with EUC-KR. */
|
||||
# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
|
||||
if (c_strcasecmp (from_codeset, "EUC-KR") == 0
|
||||
|| c_strcasecmp (to_codeset, "EUC-KR") == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
# endif
|
||||
|
||||
cd = iconv_open (to_codeset, from_codeset);
|
||||
|
||||
if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0))
|
||||
cd1 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd1 = iconv_open ("UTF-8", from_codeset);
|
||||
if (cd1 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cdp->cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)
|
||||
# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105
|
||||
|| c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0
|
||||
# endif
|
||||
)
|
||||
cd2 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd2 = iconv_open (to_codeset, "UTF-8");
|
||||
if (cd2 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
cdp->cd = cd;
|
||||
cdp->cd1 = cd1;
|
||||
cdp->cd2 = cd2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
iconveh_close (const iconveh_t *cd)
|
||||
{
|
||||
if (cd->cd2 != (iconv_t)(-1) && iconv_close (cd->cd2) < 0)
|
||||
{
|
||||
/* Return -1, but preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd->cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd->cd1);
|
||||
if (cd->cd != (iconv_t)(-1))
|
||||
iconv_close (cd->cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
if (cd->cd1 != (iconv_t)(-1) && iconv_close (cd->cd1) < 0)
|
||||
{
|
||||
/* Return -1, but preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd->cd != (iconv_t)(-1))
|
||||
iconv_close (cd->cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
if (cd->cd != (iconv_t)(-1) && iconv_close (cd->cd) < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* iconv_carefully is like iconv, except that it stops as soon as it encounters
|
||||
a conversion error, and it returns in *INCREMENTED a boolean telling whether
|
||||
|
|
@ -607,7 +696,8 @@ mem_cd_iconveh_internal (const char *src, size_t srclen,
|
|||
in1ptr++;
|
||||
in1size--;
|
||||
}
|
||||
utf8buf[utf8len++] = '?';
|
||||
*out1ptr++ = '?';
|
||||
res1 = 0;
|
||||
}
|
||||
errno1 = errno;
|
||||
utf8len = out1ptr - utf8buf;
|
||||
|
|
@ -913,18 +1003,18 @@ mem_cd_iconveh_internal (const char *src, size_t srclen,
|
|||
|
||||
int
|
||||
mem_cd_iconveh (const char *src, size_t srclen,
|
||||
iconv_t cd, iconv_t cd1, iconv_t cd2,
|
||||
const iconveh_t *cd,
|
||||
enum iconv_ilseq_handler handler,
|
||||
size_t *offsets,
|
||||
char **resultp, size_t *lengthp)
|
||||
{
|
||||
return mem_cd_iconveh_internal (src, srclen, cd, cd1, cd2, handler, 0,
|
||||
offsets, resultp, lengthp);
|
||||
return mem_cd_iconveh_internal (src, srclen, cd->cd, cd->cd1, cd->cd2,
|
||||
handler, 0, offsets, resultp, lengthp);
|
||||
}
|
||||
|
||||
char *
|
||||
str_cd_iconveh (const char *src,
|
||||
iconv_t cd, iconv_t cd1, iconv_t cd2,
|
||||
const iconveh_t *cd,
|
||||
enum iconv_ilseq_handler handler)
|
||||
{
|
||||
/* For most encodings, a trailing NUL byte in the input will be converted
|
||||
|
|
@ -934,8 +1024,8 @@ str_cd_iconveh (const char *src,
|
|||
char *result = NULL;
|
||||
size_t length = 0;
|
||||
int retval = mem_cd_iconveh_internal (src, strlen (src),
|
||||
cd, cd1, cd2, handler, 1, NULL,
|
||||
&result, &length);
|
||||
cd->cd, cd->cd1, cd->cd2, handler, 1,
|
||||
NULL, &result, &length);
|
||||
|
||||
if (retval < 0)
|
||||
{
|
||||
|
|
@ -992,110 +1082,32 @@ mem_iconveh (const char *src, size_t srclen,
|
|||
else
|
||||
{
|
||||
#if HAVE_ICONV
|
||||
iconv_t cd;
|
||||
iconv_t cd1;
|
||||
iconv_t cd2;
|
||||
iconveh_t cd;
|
||||
char *result;
|
||||
size_t length;
|
||||
int retval;
|
||||
|
||||
/* Avoid glibc-2.1 bug with EUC-KR. */
|
||||
# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
|
||||
if (c_strcasecmp (from_codeset, "EUC-KR") == 0
|
||||
|| c_strcasecmp (to_codeset, "EUC-KR") == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
# endif
|
||||
|
||||
cd = iconv_open (to_codeset, from_codeset);
|
||||
|
||||
if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0))
|
||||
cd1 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd1 = iconv_open ("UTF-8", from_codeset);
|
||||
if (cd1 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)
|
||||
# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105
|
||||
|| c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0
|
||||
# endif
|
||||
)
|
||||
cd2 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd2 = iconv_open (to_codeset, "UTF-8");
|
||||
if (cd2 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (iconveh_open (to_codeset, from_codeset, &cd) < 0)
|
||||
return -1;
|
||||
|
||||
result = *resultp;
|
||||
length = *lengthp;
|
||||
retval = mem_cd_iconveh (src, srclen, cd, cd1, cd2, handler, offsets,
|
||||
retval = mem_cd_iconveh (src, srclen, &cd, handler, offsets,
|
||||
&result, &length);
|
||||
|
||||
if (retval < 0)
|
||||
{
|
||||
/* Close cd, cd1, cd2, but preserve the errno from str_cd_iconv. */
|
||||
/* Close cd, but preserve the errno from str_cd_iconv. */
|
||||
int saved_errno = errno;
|
||||
if (cd2 != (iconv_t)(-1))
|
||||
iconv_close (cd2);
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
iconveh_close (&cd);
|
||||
errno = saved_errno;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cd2 != (iconv_t)(-1) && iconv_close (cd2) < 0)
|
||||
if (iconveh_close (&cd) < 0)
|
||||
{
|
||||
/* Return -1, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
if (result != *resultp && result != NULL)
|
||||
free (result);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
if (cd1 != (iconv_t)(-1) && iconv_close (cd1) < 0)
|
||||
{
|
||||
/* Return -1, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
if (result != *resultp && result != NULL)
|
||||
free (result);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
if (cd != (iconv_t)(-1) && iconv_close (cd) < 0)
|
||||
{
|
||||
/* Return -1, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
that, preserve the errno from iconveh_close. */
|
||||
int saved_errno = errno;
|
||||
if (result != *resultp && result != NULL)
|
||||
free (result);
|
||||
|
|
@ -1134,103 +1146,27 @@ str_iconveh (const char *src,
|
|||
else
|
||||
{
|
||||
#if HAVE_ICONV
|
||||
iconv_t cd;
|
||||
iconv_t cd1;
|
||||
iconv_t cd2;
|
||||
iconveh_t cd;
|
||||
char *result;
|
||||
|
||||
/* Avoid glibc-2.1 bug with EUC-KR. */
|
||||
# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
|
||||
if (c_strcasecmp (from_codeset, "EUC-KR") == 0
|
||||
|| c_strcasecmp (to_codeset, "EUC-KR") == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
# endif
|
||||
if (iconveh_open (to_codeset, from_codeset, &cd) < 0)
|
||||
return NULL;
|
||||
|
||||
cd = iconv_open (to_codeset, from_codeset);
|
||||
|
||||
if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0))
|
||||
cd1 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd1 = iconv_open ("UTF-8", from_codeset);
|
||||
if (cd1 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
errno = saved_errno;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)
|
||||
# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105
|
||||
|| c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0
|
||||
# endif
|
||||
)
|
||||
cd2 = (iconv_t)(-1);
|
||||
else
|
||||
{
|
||||
cd2 = iconv_open (to_codeset, "UTF-8");
|
||||
if (cd2 == (iconv_t)(-1))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
errno = saved_errno;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
result = str_cd_iconveh (src, cd, cd1, cd2, handler);
|
||||
result = str_cd_iconveh (src, &cd, handler);
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
/* Close cd, cd1, cd2, but preserve the errno from str_cd_iconv. */
|
||||
/* Close cd, but preserve the errno from str_cd_iconv. */
|
||||
int saved_errno = errno;
|
||||
if (cd2 != (iconv_t)(-1))
|
||||
iconv_close (cd2);
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
iconveh_close (&cd);
|
||||
errno = saved_errno;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cd2 != (iconv_t)(-1) && iconv_close (cd2) < 0)
|
||||
if (iconveh_close (&cd) < 0)
|
||||
{
|
||||
/* Return NULL, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd1 != (iconv_t)(-1))
|
||||
iconv_close (cd1);
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
free (result);
|
||||
errno = saved_errno;
|
||||
return NULL;
|
||||
}
|
||||
if (cd1 != (iconv_t)(-1) && iconv_close (cd1) < 0)
|
||||
{
|
||||
/* Return NULL, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
int saved_errno = errno;
|
||||
if (cd != (iconv_t)(-1))
|
||||
iconv_close (cd);
|
||||
free (result);
|
||||
errno = saved_errno;
|
||||
return NULL;
|
||||
}
|
||||
if (cd != (iconv_t)(-1) && iconv_close (cd) < 0)
|
||||
{
|
||||
/* Return NULL, but free the allocated memory, and while doing
|
||||
that, preserve the errno from iconv_close. */
|
||||
that, preserve the errno from iconveh_close. */
|
||||
int saved_errno = errno;
|
||||
free (result);
|
||||
errno = saved_errno;
|
||||
|
|
|
|||
|
|
@ -33,14 +33,38 @@ extern "C" {
|
|||
|
||||
#if HAVE_ICONV
|
||||
|
||||
/* An conversion descriptor for use by the iconveh functions. */
|
||||
typedef struct
|
||||
{
|
||||
/* Conversion descriptor from FROM_CODESET to TO_CODESET, or (iconv_t)(-1)
|
||||
if the system does not support a direct conversion from FROM_CODESET to
|
||||
TO_CODESET. */
|
||||
iconv_t cd;
|
||||
/* Conversion descriptor from FROM_CODESET to UTF-8 (or (iconv_t)(-1) if
|
||||
FROM_CODESET is UTF-8). */
|
||||
iconv_t cd1;
|
||||
/* Conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1) if
|
||||
TO_CODESET is UTF-8). */
|
||||
iconv_t cd2;
|
||||
}
|
||||
iconveh_t;
|
||||
|
||||
/* Open a conversion descriptor for use by the iconveh functions.
|
||||
If successful, fills *CDP and returns 0. Upon failure, return -1 with errno
|
||||
set. */
|
||||
extern int
|
||||
iconveh_open (const char *to_codeset, const char *from_codeset,
|
||||
iconveh_t *cdp);
|
||||
|
||||
/* Close a conversion descriptor created by iconveh_open().
|
||||
Return value: 0 if successful, otherwise -1 and errno set. */
|
||||
extern int
|
||||
iconveh_close (const iconveh_t *cd);
|
||||
|
||||
/* Convert an entire string from one encoding to another, using iconv.
|
||||
The original string is at [SRC,...,SRC+SRCLEN-1].
|
||||
CD is the conversion descriptor from FROMCODE to TOCODE, or (iconv_t)(-1) if
|
||||
the system does not support a direct conversion from FROMCODE to TOCODE.
|
||||
CD1 is the conversion descriptor from FROM_CODESET to UTF-8 (or
|
||||
(iconv_t)(-1) if FROM_CODESET is UTF-8).
|
||||
CD2 is the conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1)
|
||||
if TO_CODESET is UTF-8).
|
||||
CD points to the conversion descriptor from FROMCODE to TOCODE, created by
|
||||
the function iconveh_open().
|
||||
If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this
|
||||
array is filled with offsets into the result, i.e. the character starting
|
||||
at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]],
|
||||
|
|
@ -54,27 +78,23 @@ extern "C" {
|
|||
unchanged if no dynamic memory allocation was necessary. */
|
||||
extern int
|
||||
mem_cd_iconveh (const char *src, size_t srclen,
|
||||
iconv_t cd, iconv_t cd1, iconv_t cd2,
|
||||
const iconveh_t *cd,
|
||||
enum iconv_ilseq_handler handler,
|
||||
size_t *offsets,
|
||||
char **resultp, size_t *lengthp);
|
||||
|
||||
/* Convert an entire string from one encoding to another, using iconv.
|
||||
The original string is the NUL-terminated string starting at SRC.
|
||||
CD is the conversion descriptor from FROMCODE to TOCODE, or (iconv_t)(-1) if
|
||||
the system does not support a direct conversion from FROMCODE to TOCODE.
|
||||
CD points to the conversion descriptor from FROMCODE to TOCODE, created by
|
||||
the function iconveh_open().
|
||||
Both the "from" and the "to" encoding must use a single NUL byte at the end
|
||||
of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32).
|
||||
CD1 is the conversion descriptor from FROM_CODESET to UTF-8 (or
|
||||
(iconv_t)(-1) if FROM_CODESET is UTF-8).
|
||||
CD2 is the conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1)
|
||||
if TO_CODESET is UTF-8).
|
||||
Allocate a malloced memory block for the result.
|
||||
Return value: the freshly allocated resulting NUL-terminated string if
|
||||
successful, otherwise NULL and errno set. */
|
||||
extern char *
|
||||
str_cd_iconveh (const char *src,
|
||||
iconv_t cd, iconv_t cd1, iconv_t cd2,
|
||||
const iconveh_t *cd,
|
||||
enum iconv_ilseq_handler handler);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
#ifndef _GL_STRING_H
|
||||
#define _GL_STRING_H
|
||||
|
||||
/* NetBSD 5.0 mis-defines NULL. */
|
||||
#include <stddef.h>
|
||||
|
||||
#ifndef __attribute__
|
||||
/* This feature is available in gcc versions 2.5 and later. */
|
||||
|
|
@ -201,11 +203,11 @@ extern char *strdup (char const *__s);
|
|||
|
||||
/* Return a newly allocated copy of at most N bytes of STRING. */
|
||||
#if @GNULIB_STRNDUP@
|
||||
# if ! @HAVE_STRNDUP@
|
||||
# if @REPLACE_STRNDUP@
|
||||
# undef strndup
|
||||
# define strndup rpl_strndup
|
||||
# endif
|
||||
# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
|
||||
# if @REPLACE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
|
||||
extern char *strndup (char const *__string, size_t __n);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -397,7 +399,13 @@ extern char *strcasestr (const char *haystack, const char *needle)
|
|||
|
||||
See also strsep(). */
|
||||
#if @GNULIB_STRTOK_R@
|
||||
# if ! @HAVE_DECL_STRTOK_R@
|
||||
# if @REPLACE_STRTOK_R@
|
||||
# undef strtok_r
|
||||
# define strtok_r rpl_strtok_r
|
||||
# elif @UNDEFINE_STRTOK_R@
|
||||
# undef strtok_r
|
||||
# endif
|
||||
# if ! @HAVE_DECL_STRTOK_R@ || @REPLACE_STRTOK_R@
|
||||
extern char *strtok_r (char *restrict s, char const *restrict delim,
|
||||
char **restrict save_ptr);
|
||||
# endif
|
||||
|
|
|
|||
454
lib/sys_socket.in.h
Normal file
454
lib/sys_socket.in.h
Normal file
|
|
@ -0,0 +1,454 @@
|
|||
/* Provide a sys/socket header file for systems lacking it (read: MinGW)
|
||||
and for systems where it is incomplete.
|
||||
Copyright (C) 2005-2009 Free Software Foundation, Inc.
|
||||
Written by Simon Josefsson.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* This file is supposed to be used on platforms that lack <sys/socket.h>,
|
||||
on platforms where <sys/socket.h> cannot be included standalone, and on
|
||||
platforms where <sys/socket.h> does not provide all necessary definitions.
|
||||
It is intended to provide definitions and prototypes needed by an
|
||||
application. */
|
||||
|
||||
#ifndef _GL_SYS_SOCKET_H
|
||||
|
||||
#if @HAVE_SYS_SOCKET_H@
|
||||
|
||||
# if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
# endif
|
||||
|
||||
/* On many platforms, <sys/socket.h> assumes prior inclusion of
|
||||
<sys/types.h>. */
|
||||
# include <sys/types.h>
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
# @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _GL_SYS_SOCKET_H
|
||||
#define _GL_SYS_SOCKET_H
|
||||
|
||||
#if !@HAVE_SA_FAMILY_T@
|
||||
typedef unsigned short sa_family_t;
|
||||
#endif
|
||||
|
||||
#if !@HAVE_STRUCT_SOCKADDR_STORAGE@
|
||||
# include <alignof.h>
|
||||
/* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on
|
||||
2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */
|
||||
# define __ss_aligntype unsigned long int
|
||||
# define _SS_SIZE 256
|
||||
# define _SS_PADSIZE \
|
||||
(_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \
|
||||
? sizeof (sa_family_t) \
|
||||
: alignof (__ss_aligntype)) \
|
||||
+ sizeof (__ss_aligntype)))
|
||||
|
||||
struct sockaddr_storage
|
||||
{
|
||||
sa_family_t ss_family; /* Address family, etc. */
|
||||
__ss_aligntype __ss_align; /* Force desired alignment. */
|
||||
char __ss_padding[_SS_PADSIZE];
|
||||
};
|
||||
#endif
|
||||
|
||||
#if @HAVE_SYS_SOCKET_H@
|
||||
|
||||
/* A platform that has <sys/socket.h>. */
|
||||
|
||||
/* For shutdown(). */
|
||||
# if !defined SHUT_RD
|
||||
# define SHUT_RD 0
|
||||
# endif
|
||||
# if !defined SHUT_WR
|
||||
# define SHUT_WR 1
|
||||
# endif
|
||||
# if !defined SHUT_RDWR
|
||||
# define SHUT_RDWR 2
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
# ifdef __CYGWIN__
|
||||
# error "Cygwin does have a sys/socket.h, doesn't it?!?"
|
||||
# endif
|
||||
|
||||
/* A platform that lacks <sys/socket.h>.
|
||||
|
||||
Currently only MinGW is supported. See the gnulib manual regarding
|
||||
Windows sockets. MinGW has the header files winsock2.h and
|
||||
ws2tcpip.h that declare the sys/socket.h definitions we need. Note
|
||||
that you can influence which definitions you get by setting the
|
||||
WINVER symbol before including these two files. For example,
|
||||
getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that
|
||||
symbol is set indiriectly through WINVER). You can set this by
|
||||
adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your
|
||||
code may not run on older Windows releases then. My Windows 2000
|
||||
box was not able to run the code, for example. The situation is
|
||||
slightly confusing because:
|
||||
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/getaddrinfo_2.asp
|
||||
suggests that getaddrinfo should be available on all Windows
|
||||
releases. */
|
||||
|
||||
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# include <winsock2.h>
|
||||
# endif
|
||||
# if @HAVE_WS2TCPIP_H@
|
||||
# include <ws2tcpip.h>
|
||||
# endif
|
||||
|
||||
/* For shutdown(). */
|
||||
# if !defined SHUT_RD && defined SD_RECEIVE
|
||||
# define SHUT_RD SD_RECEIVE
|
||||
# endif
|
||||
# if !defined SHUT_WR && defined SD_SEND
|
||||
# define SHUT_WR SD_SEND
|
||||
# endif
|
||||
# if !defined SHUT_RDWR && defined SD_BOTH
|
||||
# define SHUT_RDWR SD_BOTH
|
||||
# endif
|
||||
|
||||
/* The definition of GL_LINK_WARNING is copied here. */
|
||||
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
/* Include headers needed by the emulation code. */
|
||||
# include <sys/types.h>
|
||||
# include <io.h>
|
||||
|
||||
typedef int socklen_t;
|
||||
|
||||
# endif
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
|
||||
/* Re-define FD_ISSET to avoid a WSA call while we are not using
|
||||
network sockets. */
|
||||
static inline int
|
||||
rpl_fd_isset (SOCKET fd, fd_set * set)
|
||||
{
|
||||
u_int i;
|
||||
if (set == NULL)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < set->fd_count; i++)
|
||||
if (set->fd_array[i] == fd)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
# undef FD_ISSET
|
||||
# define FD_ISSET(fd, set) rpl_fd_isset(fd, set)
|
||||
|
||||
# endif
|
||||
|
||||
/* Wrap everything else to use libc file descriptors for sockets. */
|
||||
|
||||
# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H
|
||||
# undef close
|
||||
# define close close_used_without_including_unistd_h
|
||||
# endif
|
||||
|
||||
# if @HAVE_WINSOCK2_H@ && !defined _GL_UNISTD_H
|
||||
# undef gethostname
|
||||
# define gethostname gethostname_used_without_including_unistd_h
|
||||
# endif
|
||||
|
||||
# if @GNULIB_SOCKET@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef socket
|
||||
# define socket rpl_socket
|
||||
extern int rpl_socket (int, int, int protocol);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef socket
|
||||
# define socket socket_used_without_requesting_gnulib_module_socket
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef socket
|
||||
# define socket(d,t,p) \
|
||||
(GL_LINK_WARNING ("socket is not always POSIX compliant - " \
|
||||
"use gnulib module socket for portability"), \
|
||||
socket (d, t, p))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_CONNECT@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef connect
|
||||
# define connect rpl_connect
|
||||
extern int rpl_connect (int, struct sockaddr *, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef connect
|
||||
# define connect socket_used_without_requesting_gnulib_module_connect
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef connect
|
||||
# define connect(s,a,l) \
|
||||
(GL_LINK_WARNING ("connect is not always POSIX compliant - " \
|
||||
"use gnulib module connect for portability"), \
|
||||
connect (s, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_ACCEPT@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef accept
|
||||
# define accept rpl_accept
|
||||
extern int rpl_accept (int, struct sockaddr *, int *);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef accept
|
||||
# define accept accept_used_without_requesting_gnulib_module_accept
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef accept
|
||||
# define accept(s,a,l) \
|
||||
(GL_LINK_WARNING ("accept is not always POSIX compliant - " \
|
||||
"use gnulib module accept for portability"), \
|
||||
accept (s, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_BIND@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef bind
|
||||
# define bind rpl_bind
|
||||
extern int rpl_bind (int, struct sockaddr *, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef bind
|
||||
# define bind bind_used_without_requesting_gnulib_module_bind
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef bind
|
||||
# define bind(s,a,l) \
|
||||
(GL_LINK_WARNING ("bind is not always POSIX compliant - " \
|
||||
"use gnulib module bind for portability"), \
|
||||
bind (s, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_GETPEERNAME@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef getpeername
|
||||
# define getpeername rpl_getpeername
|
||||
extern int rpl_getpeername (int, struct sockaddr *, int *);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef getpeername
|
||||
# define getpeername getpeername_used_without_requesting_gnulib_module_getpeername
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef getpeername
|
||||
# define getpeername(s,a,l) \
|
||||
(GL_LINK_WARNING ("getpeername is not always POSIX compliant - " \
|
||||
"use gnulib module getpeername for portability"), \
|
||||
getpeername (s, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_GETSOCKNAME@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef getsockname
|
||||
# define getsockname rpl_getsockname
|
||||
extern int rpl_getsockname (int, struct sockaddr *, int *);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef getsockname
|
||||
# define getsockname getsockname_used_without_requesting_gnulib_module_getsockname
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef getsockname
|
||||
# define getsockname(s,a,l) \
|
||||
(GL_LINK_WARNING ("getsockname is not always POSIX compliant - " \
|
||||
"use gnulib module getsockname for portability"), \
|
||||
getsockname (s, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_GETSOCKOPT@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef getsockopt
|
||||
# define getsockopt rpl_getsockopt
|
||||
extern int rpl_getsockopt (int, int, int, void *, socklen_t *);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef getsockopt
|
||||
# define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef getsockopt
|
||||
# define getsockopt(s,lvl,o,v,l) \
|
||||
(GL_LINK_WARNING ("getsockopt is not always POSIX compliant - " \
|
||||
"use gnulib module getsockopt for portability"), \
|
||||
getsockopt (s, lvl, o, v, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_LISTEN@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef listen
|
||||
# define listen rpl_listen
|
||||
extern int rpl_listen (int, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef listen
|
||||
# define listen listen_used_without_requesting_gnulib_module_listen
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef listen
|
||||
# define listen(s,b) \
|
||||
(GL_LINK_WARNING ("listen is not always POSIX compliant - " \
|
||||
"use gnulib module listen for portability"), \
|
||||
listen (s, b))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_RECV@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef recv
|
||||
# define recv rpl_recv
|
||||
extern int rpl_recv (int, void *, int, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef recv
|
||||
# define recv recv_used_without_requesting_gnulib_module_recv
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef recv
|
||||
# define recv(s,b,n,f) \
|
||||
(GL_LINK_WARNING ("recv is not always POSIX compliant - " \
|
||||
"use gnulib module recv for portability"), \
|
||||
recv (s, b, n, f))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_SEND@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef send
|
||||
# define send rpl_send
|
||||
extern int rpl_send (int, const void *, int, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef send
|
||||
# define send send_used_without_requesting_gnulib_module_send
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef send
|
||||
# define send(s,b,n,f) \
|
||||
(GL_LINK_WARNING ("send is not always POSIX compliant - " \
|
||||
"use gnulib module send for portability"), \
|
||||
send (s, b, n, f))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_RECVFROM@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef recvfrom
|
||||
# define recvfrom rpl_recvfrom
|
||||
extern int rpl_recvfrom (int, void *, int, int, struct sockaddr *, int *);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef recvfrom
|
||||
# define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef recvfrom
|
||||
# define recvfrom(s,b,n,f,a,l) \
|
||||
(GL_LINK_WARNING ("recvfrom is not always POSIX compliant - " \
|
||||
"use gnulib module recvfrom for portability"), \
|
||||
recvfrom (s, b, n, f, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_SENDTO@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef sendto
|
||||
# define sendto rpl_sendto
|
||||
extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef sendto
|
||||
# define sendto sendto_used_without_requesting_gnulib_module_sendto
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef sendto
|
||||
# define sendto(s,b,n,f,a,l) \
|
||||
(GL_LINK_WARNING ("sendto is not always POSIX compliant - " \
|
||||
"use gnulib module sendto for portability"), \
|
||||
sendto (s, b, n, f, a, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_SETSOCKOPT@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef setsockopt
|
||||
# define setsockopt rpl_setsockopt
|
||||
extern int rpl_setsockopt (int, int, int, const void *, socklen_t);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef setsockopt
|
||||
# define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef setsockopt
|
||||
# define setsockopt(s,lvl,o,v,l) \
|
||||
(GL_LINK_WARNING ("setsockopt is not always POSIX compliant - " \
|
||||
"use gnulib module setsockopt for portability"), \
|
||||
setsockopt (s, lvl, o, v, l))
|
||||
# endif
|
||||
|
||||
# if @GNULIB_SHUTDOWN@
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef shutdown
|
||||
# define shutdown rpl_shutdown
|
||||
extern int rpl_shutdown (int, int);
|
||||
# endif
|
||||
# elif @HAVE_WINSOCK2_H@
|
||||
# undef shutdown
|
||||
# define shutdown shutdown_used_without_requesting_gnulib_module_shutdown
|
||||
# elif defined GNULIB_POSIXCHECK
|
||||
# undef shutdown
|
||||
# define shutdown(s,h) \
|
||||
(GL_LINK_WARNING ("shutdown is not always POSIX compliant - " \
|
||||
"use gnulib module shutdown for portability"), \
|
||||
shutdown (s, h))
|
||||
# endif
|
||||
|
||||
# if @HAVE_WINSOCK2_H@
|
||||
# undef select
|
||||
# define select select_used_without_including_sys_select_h
|
||||
# endif
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif /* HAVE_SYS_SOCKET_H */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if @GNULIB_ACCEPT4@
|
||||
/* Accept a connection on a socket, with specific opening flags.
|
||||
The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
||||
and O_TEXT, O_BINARY (defined in "binary-io.h").
|
||||
See also the Linux man page at
|
||||
<http://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */
|
||||
# if @HAVE_ACCEPT4@
|
||||
# define accept4 rpl_accept4
|
||||
# endif
|
||||
extern int accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
||||
int flags);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef accept4
|
||||
# define accept4(s,a,l,f) \
|
||||
(GL_LINK_WARNING ("accept4 is unportable - " \
|
||||
"use gnulib module accept4 for portability"), \
|
||||
accept4 (s, a, l, f))
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GL_SYS_SOCKET_H */
|
||||
#endif /* _GL_SYS_SOCKET_H */
|
||||
496
lib/sys_stat.in.h
Normal file
496
lib/sys_stat.in.h
Normal file
|
|
@ -0,0 +1,496 @@
|
|||
/* Provide a more complete sys/stat header file.
|
||||
Copyright (C) 2005-2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2, 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
|
||||
|
||||
/* This file is supposed to be used on platforms where <sys/stat.h> is
|
||||
incomplete. It is intended to provide definitions and prototypes
|
||||
needed by an application. Start with what the system provides. */
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
#endif
|
||||
|
||||
#if defined __need_system_sys_stat_h
|
||||
/* Special invocation convention. */
|
||||
|
||||
#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
|
||||
|
||||
#else
|
||||
/* Normal invocation convention. */
|
||||
|
||||
#ifndef _GL_SYS_STAT_H
|
||||
|
||||
/* Get nlink_t. */
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Get struct timespec. */
|
||||
#include <time.h>
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
|
||||
|
||||
#ifndef _GL_SYS_STAT_H
|
||||
#define _GL_SYS_STAT_H
|
||||
|
||||
/* The definition of GL_LINK_WARNING is copied here. */
|
||||
|
||||
/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
|
||||
headers that may declare mkdir(). */
|
||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
#ifndef S_IFMT
|
||||
# define S_IFMT 0170000
|
||||
#endif
|
||||
|
||||
#if STAT_MACROS_BROKEN
|
||||
# undef S_ISBLK
|
||||
# undef S_ISCHR
|
||||
# undef S_ISDIR
|
||||
# undef S_ISFIFO
|
||||
# undef S_ISLNK
|
||||
# undef S_ISNAM
|
||||
# undef S_ISMPB
|
||||
# undef S_ISMPC
|
||||
# undef S_ISNWK
|
||||
# undef S_ISREG
|
||||
# undef S_ISSOCK
|
||||
#endif
|
||||
|
||||
#ifndef S_ISBLK
|
||||
# ifdef S_IFBLK
|
||||
# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
||||
# else
|
||||
# define S_ISBLK(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISCHR
|
||||
# ifdef S_IFCHR
|
||||
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
# else
|
||||
# define S_ISCHR(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISDIR
|
||||
# ifdef S_IFDIR
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
# else
|
||||
# define S_ISDIR(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISDOOR /* Solaris 2.5 and up */
|
||||
# define S_ISDOOR(m) 0
|
||||
#endif
|
||||
|
||||
#ifndef S_ISFIFO
|
||||
# ifdef S_IFIFO
|
||||
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
# else
|
||||
# define S_ISFIFO(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISLNK
|
||||
# ifdef S_IFLNK
|
||||
# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
# else
|
||||
# define S_ISLNK(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISMPB /* V7 */
|
||||
# ifdef S_IFMPB
|
||||
# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
|
||||
# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
|
||||
# else
|
||||
# define S_ISMPB(m) 0
|
||||
# define S_ISMPC(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISNAM /* Xenix */
|
||||
# ifdef S_IFNAM
|
||||
# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
|
||||
# else
|
||||
# define S_ISNAM(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISNWK /* HP/UX */
|
||||
# ifdef S_IFNWK
|
||||
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
|
||||
# else
|
||||
# define S_ISNWK(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISPORT /* Solaris 10 and up */
|
||||
# define S_ISPORT(m) 0
|
||||
#endif
|
||||
|
||||
#ifndef S_ISREG
|
||||
# ifdef S_IFREG
|
||||
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
# else
|
||||
# define S_ISREG(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISSOCK
|
||||
# ifdef S_IFSOCK
|
||||
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
|
||||
# else
|
||||
# define S_ISSOCK(m) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef S_TYPEISMQ
|
||||
# define S_TYPEISMQ(p) 0
|
||||
#endif
|
||||
|
||||
#ifndef S_TYPEISTMO
|
||||
# define S_TYPEISTMO(p) 0
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef S_TYPEISSEM
|
||||
# ifdef S_INSEM
|
||||
# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
|
||||
# else
|
||||
# define S_TYPEISSEM(p) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_TYPEISSHM
|
||||
# ifdef S_INSHD
|
||||
# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
|
||||
# else
|
||||
# define S_TYPEISSHM(p) 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* high performance ("contiguous data") */
|
||||
#ifndef S_ISCTG
|
||||
# define S_ISCTG(p) 0
|
||||
#endif
|
||||
|
||||
/* Cray DMF (data migration facility): off line, with data */
|
||||
#ifndef S_ISOFD
|
||||
# define S_ISOFD(p) 0
|
||||
#endif
|
||||
|
||||
/* Cray DMF (data migration facility): off line, with no data */
|
||||
#ifndef S_ISOFL
|
||||
# define S_ISOFL(p) 0
|
||||
#endif
|
||||
|
||||
/* 4.4BSD whiteout */
|
||||
#ifndef S_ISWHT
|
||||
# define S_ISWHT(m) 0
|
||||
#endif
|
||||
|
||||
/* If any of the following are undefined,
|
||||
define them to their de facto standard values. */
|
||||
#if !S_ISUID
|
||||
# define S_ISUID 04000
|
||||
#endif
|
||||
#if !S_ISGID
|
||||
# define S_ISGID 02000
|
||||
#endif
|
||||
|
||||
/* S_ISVTX is a common extension to POSIX. */
|
||||
#ifndef S_ISVTX
|
||||
# define S_ISVTX 01000
|
||||
#endif
|
||||
|
||||
#if !S_IRUSR && S_IREAD
|
||||
# define S_IRUSR S_IREAD
|
||||
#endif
|
||||
#if !S_IRUSR
|
||||
# define S_IRUSR 00400
|
||||
#endif
|
||||
#if !S_IRGRP
|
||||
# define S_IRGRP (S_IRUSR >> 3)
|
||||
#endif
|
||||
#if !S_IROTH
|
||||
# define S_IROTH (S_IRUSR >> 6)
|
||||
#endif
|
||||
|
||||
#if !S_IWUSR && S_IWRITE
|
||||
# define S_IWUSR S_IWRITE
|
||||
#endif
|
||||
#if !S_IWUSR
|
||||
# define S_IWUSR 00200
|
||||
#endif
|
||||
#if !S_IWGRP
|
||||
# define S_IWGRP (S_IWUSR >> 3)
|
||||
#endif
|
||||
#if !S_IWOTH
|
||||
# define S_IWOTH (S_IWUSR >> 6)
|
||||
#endif
|
||||
|
||||
#if !S_IXUSR && S_IEXEC
|
||||
# define S_IXUSR S_IEXEC
|
||||
#endif
|
||||
#if !S_IXUSR
|
||||
# define S_IXUSR 00100
|
||||
#endif
|
||||
#if !S_IXGRP
|
||||
# define S_IXGRP (S_IXUSR >> 3)
|
||||
#endif
|
||||
#if !S_IXOTH
|
||||
# define S_IXOTH (S_IXUSR >> 6)
|
||||
#endif
|
||||
|
||||
#if !S_IRWXU
|
||||
# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
|
||||
#endif
|
||||
#if !S_IRWXG
|
||||
# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
|
||||
#endif
|
||||
#if !S_IRWXO
|
||||
# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
|
||||
#endif
|
||||
|
||||
/* S_IXUGO is a common extension to POSIX. */
|
||||
#if !S_IXUGO
|
||||
# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXUGO
|
||||
# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
|
||||
#endif
|
||||
|
||||
/* Macros for futimens and utimensat. */
|
||||
#ifndef UTIME_NOW
|
||||
# define UTIME_NOW (-1)
|
||||
# define UTIME_OMIT (-2)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FCHMODAT@
|
||||
# if !@HAVE_FCHMODAT@
|
||||
extern int fchmodat (int fd, char const *file, mode_t mode, int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fchmodat
|
||||
# define fchmodat(d,n,m,f) \
|
||||
(GL_LINK_WARNING ("fchmodat is not portable - " \
|
||||
"use gnulib module openat for portability"), \
|
||||
fchmodat (d, n, m, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @REPLACE_FSTAT@
|
||||
# define fstat rpl_fstat
|
||||
extern int fstat (int fd, struct stat *buf);
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FSTATAT@
|
||||
# if @REPLACE_FSTATAT@
|
||||
# undef fstatat
|
||||
# define fstatat rpl_fstatat
|
||||
# endif
|
||||
# if !@HAVE_FSTATAT@ || @REPLACE_FSTATAT@
|
||||
extern int fstatat (int fd, char const *name, struct stat *st, int flags);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fstatat
|
||||
# define fstatat(d,n,s,f) \
|
||||
(GL_LINK_WARNING ("fstatat is not portable - " \
|
||||
"use gnulib module openat for portability"), \
|
||||
fstatat (d, n, s, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FUTIMENS@
|
||||
# if @REPLACE_FUTIMENS@
|
||||
# undef futimens
|
||||
# define futimens rpl_futimens
|
||||
# endif
|
||||
# if !@HAVE_FUTIMENS@ || @REPLACE_FUTIMENS@
|
||||
extern int futimens (int fd, struct timespec const times[2]);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef futimens
|
||||
# define futimens(f,t) \
|
||||
(GL_LINK_WARNING ("futimens is not portable - " \
|
||||
"use gnulib module futimens for portability"), \
|
||||
futimens (f, t))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_LCHMOD@
|
||||
/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
|
||||
denotes a symbolic link. */
|
||||
# if !@HAVE_LCHMOD@
|
||||
/* The lchmod replacement follows symbolic links. Callers should take
|
||||
this into account; lchmod should be applied only to arguments that
|
||||
are known to not be symbolic links. On hosts that lack lchmod,
|
||||
this can lead to race conditions between the check and the
|
||||
invocation of lchmod, but we know of no workarounds that are
|
||||
reliable in general. You might try requesting support for lchmod
|
||||
from your operating system supplier. */
|
||||
# define lchmod chmod
|
||||
# endif
|
||||
# if 0 /* assume already declared */
|
||||
extern int lchmod (const char *filename, mode_t mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef lchmod
|
||||
# define lchmod(f,m) \
|
||||
(GL_LINK_WARNING ("lchmod is unportable - " \
|
||||
"use gnulib module lchmod for portability"), \
|
||||
lchmod (f, m))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_LSTAT@
|
||||
# if ! @HAVE_LSTAT@
|
||||
/* mingw does not support symlinks, therefore it does not have lstat. But
|
||||
without links, stat does just fine. */
|
||||
# define lstat stat
|
||||
# elif @REPLACE_LSTAT@
|
||||
# undef lstat
|
||||
# define lstat rpl_lstat
|
||||
extern int rpl_lstat (const char *name, struct stat *buf);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef lstat
|
||||
# define lstat(p,b) \
|
||||
(GL_LINK_WARNING ("lstat is unportable - " \
|
||||
"use gnulib module lstat for portability"), \
|
||||
lstat (p, b))
|
||||
#endif
|
||||
|
||||
|
||||
#if @REPLACE_MKDIR@
|
||||
# undef mkdir
|
||||
# define mkdir rpl_mkdir
|
||||
extern int mkdir (char const *name, mode_t mode);
|
||||
#else
|
||||
/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
|
||||
Additionally, it declares _mkdir (and depending on compile flags, an
|
||||
alias mkdir), only in the nonstandard <io.h>, which is included above. */
|
||||
# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
|
||||
static inline int
|
||||
rpl_mkdir (char const *name, mode_t mode)
|
||||
{
|
||||
return _mkdir (name);
|
||||
}
|
||||
|
||||
# define mkdir rpl_mkdir
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_MKDIRAT@
|
||||
# if !@HAVE_MKDIRAT@
|
||||
extern int mkdirat (int fd, char const *file, mode_t mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mkdirat
|
||||
# define mkdirat(d,n,m) \
|
||||
(GL_LINK_WARNING ("mkdirat is not portable - " \
|
||||
"use gnulib module openat for portability"), \
|
||||
mkdirat (d, n, m))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_MKFIFOAT@
|
||||
# if !@HAVE_MKFIFOAT@
|
||||
int mkfifoat (int fd, char const *file, mode_t mode);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mkfifoat
|
||||
# define mkfifoat(d,n,m) \
|
||||
(GL_LINK_WARNING ("mkfifoat is not portable - " \
|
||||
"use gnulib module mkfifoat for portability"), \
|
||||
mkfifoat (d, n, m))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_MKNODAT@
|
||||
# if !@HAVE_MKNODAT@
|
||||
int mknodat (int fd, char const *file, mode_t mode, dev_t dev);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mknodat
|
||||
# define mknodat(f,n,m,d) \
|
||||
(GL_LINK_WARNING ("mknodat is not portable - " \
|
||||
"use gnulib module mkfifoat for portability"), \
|
||||
mknodat (f, n, m, d))
|
||||
#endif
|
||||
|
||||
|
||||
#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. */
|
||||
# undef stat
|
||||
# define stat(name, st) rpl_stat (name, st)
|
||||
extern int stat (const char *name, struct stat *buf);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef stat
|
||||
# define stat(p,b) \
|
||||
(GL_LINK_WARNING ("stat is unportable - " \
|
||||
"use gnulib module stat for portability"), \
|
||||
stat (p, b))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_UTIMENSAT@
|
||||
# if @REPLACE_UTIMENSAT@
|
||||
# undef utimensat
|
||||
# define utimensat rpl_utimensat
|
||||
# endif
|
||||
# if !@HAVE_UTIMENSAT@ || @REPLACE_UTIMENSAT@
|
||||
extern int utimensat (int fd, char const *name,
|
||||
struct timespec const times[2], int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef utimensat
|
||||
# define utimensat(d,n,t,f) \
|
||||
(GL_LINK_WARNING ("utimensat is not portable - " \
|
||||
"use gnulib module utimensat for portability"), \
|
||||
utimensat (d, n, t, f))
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _GL_SYS_STAT_H */
|
||||
#endif /* _GL_SYS_STAT_H */
|
||||
#endif
|
||||
|
|
@ -37,6 +37,9 @@
|
|||
|
||||
# @INCLUDE_NEXT@ @NEXT_TIME_H@
|
||||
|
||||
/* NetBSD 5.0 mis-defines NULL. */
|
||||
#include <stddef.h>
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif
|
||||
|
|
|
|||
251
lib/unistd.in.h
251
lib/unistd.in.h
|
|
@ -29,6 +29,9 @@
|
|||
#ifndef _GL_UNISTD_H
|
||||
#define _GL_UNISTD_H
|
||||
|
||||
/* NetBSD 5.0 mis-defines NULL. Also get size_t. */
|
||||
#include <stddef.h>
|
||||
|
||||
/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */
|
||||
#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
|
||||
# include <stdio.h>
|
||||
|
|
@ -38,11 +41,18 @@
|
|||
/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */
|
||||
#include <stdlib.h>
|
||||
|
||||
#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
|
||||
#if ((@GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@) \
|
||||
|| (@GNULIB_READLINK@ && (!@HAVE_READLINK@ || @REPLACE_READLINK@)) \
|
||||
|| (@GNULIB_READLINKAT@ && !@HAVE_READLINKAT@))
|
||||
/* Get ssize_t. */
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
/* Get getopt(), optarg, optind, opterr, optopt. */
|
||||
#if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT
|
||||
# include <getopt.h>
|
||||
#endif
|
||||
|
||||
#if @GNULIB_GETHOSTNAME@
|
||||
/* Get all possible declarations of gethostname(). */
|
||||
# if @UNISTD_H_HAVE_WINSOCK2_H@
|
||||
|
|
@ -98,6 +108,15 @@
|
|||
# define STDERR_FILENO 2
|
||||
#endif
|
||||
|
||||
/* Ensure *_OK macros exist. */
|
||||
#ifndef F_OK
|
||||
# define F_OK 0
|
||||
# define X_OK 1
|
||||
# define W_OK 2
|
||||
# define R_OK 4
|
||||
#endif
|
||||
|
||||
|
||||
/* Declare overridden functions. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
@ -137,7 +156,7 @@ extern int chown (const char *file, uid_t uid, gid_t gid);
|
|||
# define close rpl_close
|
||||
extern int close (int);
|
||||
# endif
|
||||
#elif @UNISTD_H_HAVE_WINSOCK2_H@
|
||||
#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||
# undef close
|
||||
# define close close_used_without_requesting_gnulib_module_close
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -149,6 +168,12 @@ extern int close (int);
|
|||
#endif
|
||||
|
||||
|
||||
#if @REPLACE_DUP@
|
||||
# define dup rpl_dup
|
||||
extern int dup (int);
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_DUP2@
|
||||
# if @REPLACE_DUP2@
|
||||
# define dup2 rpl_dup2
|
||||
|
|
@ -170,6 +195,28 @@ extern int dup2 (int oldfd, int newfd);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_DUP3@
|
||||
/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
|
||||
specified flags.
|
||||
The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
||||
and O_TEXT, O_BINARY (defined in "binary-io.h").
|
||||
Close NEWFD first if it is open.
|
||||
Return newfd if successful, otherwise -1 and errno set.
|
||||
See the Linux man page at
|
||||
<http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */
|
||||
# if @HAVE_DUP3@
|
||||
# define dup3 rpl_dup3
|
||||
# endif
|
||||
extern int dup3 (int oldfd, int newfd, int flags);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef dup3
|
||||
# define dup3(o,n,f) \
|
||||
(GL_LINK_WARNING ("dup3 is unportable - " \
|
||||
"use gnulib module dup3 for portability"), \
|
||||
dup3 (o, n, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_ENVIRON@
|
||||
# if !@HAVE_DECL_ENVIRON@
|
||||
/* Set of environment variables and values. An array of strings of the form
|
||||
|
|
@ -192,7 +239,7 @@ extern char **environ;
|
|||
|
||||
#if @GNULIB_EUIDACCESS@
|
||||
# if !@HAVE_EUIDACCESS@
|
||||
/* Like access(), except that is uses the effective user id and group id of
|
||||
/* Like access(), except that it uses the effective user id and group id of
|
||||
the current process. */
|
||||
extern int euidaccess (const char *filename, int mode);
|
||||
# endif
|
||||
|
|
@ -205,9 +252,21 @@ extern int euidaccess (const char *filename, int mode);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FACCESSAT@
|
||||
# if !@HAVE_FACCESSAT@
|
||||
int faccessat (int fd, char const *file, int mode, int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef faccessat
|
||||
# define faccessat(d,n,m,f) \
|
||||
(GL_LINK_WARNING ("faccessat is not portable - " \
|
||||
"use gnulib module faccessat for portability"), \
|
||||
faccessat (d, n, m, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FCHDIR@
|
||||
# if @REPLACE_FCHDIR@
|
||||
|
||||
/* Change the process' current working directory to the directory on which
|
||||
the given file descriptor is open.
|
||||
Return 0 if successful, otherwise -1 and errno set.
|
||||
|
|
@ -215,14 +274,11 @@ extern int euidaccess (const char *filename, int mode);
|
|||
<http://www.opengroup.org/susv3xsh/fchdir.html>. */
|
||||
extern int fchdir (int /*fd*/);
|
||||
|
||||
# define dup rpl_dup
|
||||
extern int dup (int);
|
||||
|
||||
# if @REPLACE_DUP2@
|
||||
# undef dup2
|
||||
# endif
|
||||
# define dup2 rpl_dup2_fchdir
|
||||
extern int dup2 (int, int);
|
||||
/* Gnulib internal hooks needed to maintain the fchdir metadata. */
|
||||
extern int _gl_register_fd (int fd, const char *filename);
|
||||
extern void _gl_unregister_fd (int fd);
|
||||
extern int _gl_register_dup (int oldfd, int newfd);
|
||||
extern const char *_gl_directory_name (int fd);
|
||||
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -234,6 +290,23 @@ extern int dup2 (int, int);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FCHOWNAT@
|
||||
# if @REPLACE_FCHOWNAT@
|
||||
# undef fchownat
|
||||
# define fchownat rpl_fchownat
|
||||
# endif
|
||||
# if !@HAVE_FCHOWNAT@ || @REPLACE_FCHOWNAT@
|
||||
extern int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef fchownat
|
||||
# define fchownat(d,n,o,g,f) \
|
||||
(GL_LINK_WARNING ("fchownat is not portable - " \
|
||||
"use gnulib module openat for portability"), \
|
||||
fchownat (d, n, o, g, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_FSYNC@
|
||||
/* Synchronize changes to a file.
|
||||
Return 0 if successful, otherwise -1 and errno set.
|
||||
|
|
@ -320,7 +393,8 @@ extern int getdomainname(char *name, size_t len);
|
|||
|
||||
#if @GNULIB_GETDTABLESIZE@
|
||||
# if !@HAVE_GETDTABLESIZE@
|
||||
/* Return the maximum number of file descriptors in the current process. */
|
||||
/* Return the maximum number of file descriptors in the current process.
|
||||
In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
|
||||
extern int getdtablesize (void);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -370,7 +444,6 @@ extern int gethostname(char *name, size_t len);
|
|||
See <http://www.opengroup.org/susv3xsh/getlogin.html>.
|
||||
*/
|
||||
# if !@HAVE_DECL_GETLOGIN_R@
|
||||
# include <stddef.h>
|
||||
extern int getlogin_r (char *name, size_t size);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -490,11 +563,14 @@ extern int lchown (char const *file, uid_t owner, gid_t group);
|
|||
|
||||
|
||||
#if @GNULIB_LINK@
|
||||
# if @REPLACE_LINK@
|
||||
# define link rpl_link
|
||||
# endif
|
||||
/* Create a new hard link for an existing file.
|
||||
Return 0 if successful, otherwise -1 and errno set.
|
||||
See POSIX:2001 specification
|
||||
<http://www.opengroup.org/susv3xsh/link.html>. */
|
||||
# if !@HAVE_LINK@
|
||||
# if !@HAVE_LINK@ || @REPLACE_LINK@
|
||||
extern int link (const char *path1, const char *path2);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
|
|
@ -505,6 +581,25 @@ extern int link (const char *path1, const char *path2);
|
|||
link (path1, path2))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_LINKAT@
|
||||
# if @REPLACE_LINKAT@
|
||||
# undef linkat
|
||||
# define linkat rpl_linkat
|
||||
# endif
|
||||
/* Create a new hard link for an existing file, relative to two
|
||||
directories. FLAG controls whether symlinks are followed.
|
||||
Return 0 if successful, otherwise -1 and errno set. */
|
||||
# if !@HAVE_LINKAT@ || @REPLACE_LINKAT@
|
||||
extern int linkat (int fd1, const char *path1, int fd2, const char *path2,
|
||||
int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef linkat
|
||||
# define link(f1,path1,f2,path2,f) \
|
||||
(GL_LINK_WARNING ("linkat is unportable - " \
|
||||
"use gnulib module linkat for portability"), \
|
||||
linkat (f1, path1, f2, path2,f))
|
||||
#endif
|
||||
|
||||
#if @GNULIB_LSEEK@
|
||||
# if @REPLACE_LSEEK@
|
||||
|
|
@ -524,15 +619,39 @@ extern int link (const char *path1, const char *path2);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_PIPE2@
|
||||
/* Create a pipe, applying the given flags when opening the read-end of the
|
||||
pipe and the write-end of the pipe.
|
||||
The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
||||
and O_TEXT, O_BINARY (defined in "binary-io.h").
|
||||
Store the read-end as fd[0] and the write-end as fd[1].
|
||||
Return 0 upon success, or -1 with errno set upon failure.
|
||||
See also the Linux man page at
|
||||
<http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */
|
||||
# if @HAVE_PIPE2@
|
||||
# define pipe2 rpl_pipe2
|
||||
# endif
|
||||
extern int pipe2 (int fd[2], int flags);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef pipe2
|
||||
# define pipe2(f,o) \
|
||||
(GL_LINK_WARNING ("pipe2 is unportable - " \
|
||||
"use gnulib module pipe2 for portability"), \
|
||||
pipe2 (f, o))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_READLINK@
|
||||
# if @REPLACE_READLINK@
|
||||
# define readlink rpl_readlink
|
||||
# endif
|
||||
/* Read the contents of the symbolic link FILE and place the first BUFSIZE
|
||||
bytes of it into BUF. Return the number of bytes placed into BUF if
|
||||
successful, otherwise -1 and errno set.
|
||||
See the POSIX:2001 specification
|
||||
<http://www.opengroup.org/susv3xsh/readlink.html>. */
|
||||
# if !@HAVE_READLINK@
|
||||
# include <stddef.h>
|
||||
extern int readlink (const char *file, char *buf, size_t bufsize);
|
||||
# if !@HAVE_READLINK@ || @REPLACE_READLINK@
|
||||
extern ssize_t readlink (const char *file, char *buf, size_t bufsize);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef readlink
|
||||
|
|
@ -543,6 +662,34 @@ extern int readlink (const char *file, char *buf, size_t bufsize);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_READLINKAT@
|
||||
# if !@HAVE_READLINKAT@
|
||||
ssize_t readlinkat (int fd, char const *file, char *buf, size_t len);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef readlinkat
|
||||
# define readlinkat(d,n,b,l) \
|
||||
(GL_LINK_WARNING ("readlinkat is not portable - " \
|
||||
"use gnulib module symlinkat for portability"), \
|
||||
readlinkat (d, n, b, l))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_RMDIR@
|
||||
# if @REPLACE_RMDIR@
|
||||
# define rmdir rpl_rmdir
|
||||
/* Remove the directory DIR. */
|
||||
extern int rmdir (char const *name);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef rmdir
|
||||
# define rmdir(n) \
|
||||
(GL_LINK_WARNING ("rmdir is unportable - " \
|
||||
"use gnulib module rmdir for portability"), \
|
||||
rmdir (n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_SLEEP@
|
||||
/* Pause the execution of the current thread for N seconds.
|
||||
Returns the number of seconds left to sleep.
|
||||
|
|
@ -560,6 +707,68 @@ extern unsigned int sleep (unsigned int n);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_SYMLINK@
|
||||
# if @REPLACE_SYMLINK@
|
||||
# undef symlink
|
||||
# define symlink rpl_symlink
|
||||
# endif
|
||||
# if !@HAVE_SYMLINK@ || @REPLACE_SYMLINK@
|
||||
int symlink (char const *contents, char const *file);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef symlink
|
||||
# define symlink(c,n) \
|
||||
(GL_LINK_WARNING ("symlink is not portable - " \
|
||||
"use gnulib module symlink for portability"), \
|
||||
symlink (c, n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_SYMLINKAT@
|
||||
# if !@HAVE_SYMLINKAT@
|
||||
int symlinkat (char const *contents, int fd, char const *file);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef symlinkat
|
||||
# define symlinkat(c,d,n) \
|
||||
(GL_LINK_WARNING ("symlinkat is not portable - " \
|
||||
"use gnulib module symlinkat for portability"), \
|
||||
symlinkat (c, d, n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_UNLINK@
|
||||
# if @REPLACE_UNLINK@
|
||||
# undef unlink
|
||||
# define unlink rpl_unlink
|
||||
extern int unlink (char const *file);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef unlink
|
||||
# define unlink(n) \
|
||||
(GL_LINK_WARNING ("unlink is not portable - " \
|
||||
"use gnulib module unlink for portability"), \
|
||||
unlink (n))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_UNLINKAT@
|
||||
# if @REPLACE_UNLINKAT@
|
||||
# undef unlinkat
|
||||
# define unlinkat rpl_unlinkat
|
||||
# endif
|
||||
# if !@HAVE_UNLINKAT@ || @REPLACE_UNLINKAT@
|
||||
extern int unlinkat (int fd, char const *file, int flag);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef unlinkat
|
||||
# define unlinkat(d,n,f) \
|
||||
(GL_LINK_WARNING ("unlinkat is not portable - " \
|
||||
"use gnulib module openat for portability"), \
|
||||
unlinkat (d, n, f))
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
|
||||
/* Write up to COUNT bytes starting at BUF to file descriptor FD.
|
||||
See the POSIX:2001 specification
|
||||
|
|
@ -570,12 +779,6 @@ extern ssize_t write (int fd, const void *buf, size_t count);
|
|||
#endif
|
||||
|
||||
|
||||
#ifdef FCHDIR_REPLACEMENT
|
||||
/* gnulib internal function. */
|
||||
extern void _gl_unregister_fd (int fd);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ local_wcsnlen (const wchar_t *s, size_t maxlen)
|
|||
# ifndef decimal_point_char_defined
|
||||
# define decimal_point_char_defined 1
|
||||
static char
|
||||
decimal_point_char ()
|
||||
decimal_point_char (void)
|
||||
{
|
||||
const char *point;
|
||||
/* Determine it in a multithread-safe way. We know nl_langinfo is
|
||||
|
|
@ -5476,6 +5476,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
|
|||
#undef TCHARS_PER_DCHAR
|
||||
#undef SNPRINTF
|
||||
#undef USE_SNPRINTF
|
||||
#undef DCHAR_SET
|
||||
#undef DCHAR_CPY
|
||||
#undef PRINTF_PARSE
|
||||
#undef DIRECTIVES
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* POSIX compatible write() function.
|
||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
Copyright (C) 2008-2009 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2008.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -46,7 +46,7 @@ rpl_write (int fd, const void *buf, size_t count)
|
|||
if (ret < 0)
|
||||
{
|
||||
if (GetLastError () == ERROR_NO_DATA
|
||||
&& GetFileType (_get_osfhandle (fd)) == FILE_TYPE_PIPE)
|
||||
&& GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)
|
||||
{
|
||||
/* Try to raise signal SIGPIPE. */
|
||||
raise (SIGPIPE);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue