mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-18 02:55:12 +00:00
latest gnulib sources
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1206 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
parent
6a4923ddd5
commit
c7c822426c
519
libgnu/Makefile.am
Normal file
519
libgnu/Makefile.am
Normal file
@ -0,0 +1,519 @@
|
|||||||
|
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||||
|
## Process this file with automake to produce Makefile.in.
|
||||||
|
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software, distributed under the terms of the GNU
|
||||||
|
# General Public License. As a special exception to the GNU General
|
||||||
|
# Public License, this file may be distributed as part of a program
|
||||||
|
# that contains a configuration script generated by Autoconf, under
|
||||||
|
# the same distribution terms as the rest of that program.
|
||||||
|
#
|
||||||
|
# Generated by gnulib-tool.
|
||||||
|
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=. --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl getaddrinfo stdio
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = 1.5 gnits
|
||||||
|
|
||||||
|
noinst_HEADERS =
|
||||||
|
noinst_LIBRARIES =
|
||||||
|
noinst_LTLIBRARIES =
|
||||||
|
EXTRA_DIST =
|
||||||
|
BUILT_SOURCES =
|
||||||
|
SUFFIXES =
|
||||||
|
MOSTLYCLEANFILES = core *.stackdump
|
||||||
|
MOSTLYCLEANDIRS =
|
||||||
|
CLEANFILES =
|
||||||
|
DISTCLEANFILES =
|
||||||
|
MAINTAINERCLEANFILES =
|
||||||
|
|
||||||
|
AM_CPPFLAGS =
|
||||||
|
|
||||||
|
noinst_LIBRARIES += libgnu.a
|
||||||
|
|
||||||
|
libgnu_a_SOURCES =
|
||||||
|
libgnu_a_LIBADD = $(gl_LIBOBJS)
|
||||||
|
libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
|
||||||
|
EXTRA_libgnu_a_SOURCES =
|
||||||
|
|
||||||
|
## begin gnulib module absolute-header
|
||||||
|
|
||||||
|
# Use this preprocessor expression to decide whether #include_next works.
|
||||||
|
# Do not rely on a 'configure'-time test for this, since the expression
|
||||||
|
# might appear in an installed header, which is used by some other compiler.
|
||||||
|
HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER)
|
||||||
|
|
||||||
|
## end gnulib module absolute-header
|
||||||
|
|
||||||
|
## begin gnulib module alloca-opt
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
cat $(srcdir)/alloca_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv -f $@-t $@
|
||||||
|
MOSTLYCLEANFILES += alloca.h alloca.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += alloca_.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:
|
||||||
|
@MKDIR_P@ arpa
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
echo '#include <sys/socket.h>'; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
|
||||||
|
MOSTLYCLEANDIRS += arpa
|
||||||
|
|
||||||
|
## end gnulib module arpa_inet
|
||||||
|
|
||||||
|
## begin gnulib module float
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
|
||||||
|
< $(srcdir)/float_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += float.h float.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += float_.h
|
||||||
|
|
||||||
|
## end gnulib module float
|
||||||
|
|
||||||
|
## begin gnulib module getaddrinfo
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += gai_strerror.c getaddrinfo.c getaddrinfo.h
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += gai_strerror.c getaddrinfo.c
|
||||||
|
|
||||||
|
## end gnulib module getaddrinfo
|
||||||
|
|
||||||
|
## begin gnulib module gettext-h
|
||||||
|
|
||||||
|
libgnu_a_SOURCES += gettext.h
|
||||||
|
|
||||||
|
## end gnulib module gettext-h
|
||||||
|
|
||||||
|
## begin gnulib module inet_ntop
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += inet_ntop.c inet_ntop.h
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += inet_ntop.c
|
||||||
|
|
||||||
|
## end gnulib module inet_ntop
|
||||||
|
|
||||||
|
## begin gnulib module link-warning
|
||||||
|
|
||||||
|
LINK_WARNING_H=$(top_srcdir)/./link-warning.h
|
||||||
|
|
||||||
|
EXTRA_DIST += $(top_srcdir)/./link-warning.h
|
||||||
|
|
||||||
|
## end gnulib module link-warning
|
||||||
|
|
||||||
|
## begin gnulib module malloc-posix
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += malloc.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += malloc.c
|
||||||
|
|
||||||
|
## end gnulib module malloc-posix
|
||||||
|
|
||||||
|
## 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:
|
||||||
|
@MKDIR_P@ netinet
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/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_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t
|
||||||
|
MOSTLYCLEANDIRS += netinet
|
||||||
|
|
||||||
|
EXTRA_DIST += netinet_in_.h
|
||||||
|
|
||||||
|
## end gnulib module netinet_in
|
||||||
|
|
||||||
|
## begin gnulib module size_max
|
||||||
|
|
||||||
|
libgnu_a_SOURCES += size_max.h
|
||||||
|
|
||||||
|
## end gnulib module size_max
|
||||||
|
|
||||||
|
## begin gnulib module snprintf
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += snprintf.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += snprintf.c
|
||||||
|
|
||||||
|
## end gnulib module snprintf
|
||||||
|
|
||||||
|
## begin gnulib module stdbool
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += stdbool_.h
|
||||||
|
|
||||||
|
## end gnulib module stdbool
|
||||||
|
|
||||||
|
## begin gnulib module stdint
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
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' \
|
||||||
|
-e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
|
||||||
|
-e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
|
||||||
|
-e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
||||||
|
-e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
|
||||||
|
-e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
|
||||||
|
-e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
|
||||||
|
-e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
|
||||||
|
-e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
|
||||||
|
-e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
|
||||||
|
-e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
|
||||||
|
-e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
|
||||||
|
-e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
|
||||||
|
-e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
|
||||||
|
-e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
|
||||||
|
-e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
|
||||||
|
-e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
|
||||||
|
-e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
|
||||||
|
-e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
|
||||||
|
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
||||||
|
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
||||||
|
< $(srcdir)/stdint_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += stdint.h stdint.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += stdint_.h
|
||||||
|
|
||||||
|
## end gnulib module stdint
|
||||||
|
|
||||||
|
## begin gnulib module stdio
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
|
||||||
|
-e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
|
||||||
|
-e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
|
||||||
|
-e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
|
||||||
|
-e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
|
||||||
|
-e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|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_VASPRINTF''@|$(GNULIB_VASPRINTF)|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_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
|
||||||
|
-e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|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_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
|
||||||
|
-e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|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|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
|
||||||
|
-e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
|
< $(srcdir)/stdio_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += stdio.h stdio.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += stdio_.h
|
||||||
|
|
||||||
|
## end gnulib module stdio
|
||||||
|
|
||||||
|
## begin gnulib module stdlib
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_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_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
|
||||||
|
-e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
|
||||||
|
-e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
|
||||||
|
-e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|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|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
|
< $(srcdir)/stdlib_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += stdlib.h stdlib.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += stdlib_.h
|
||||||
|
|
||||||
|
## end gnulib module stdlib
|
||||||
|
|
||||||
|
## begin gnulib module strdup
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += strdup.c
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += strdup.c
|
||||||
|
|
||||||
|
## end gnulib module strdup
|
||||||
|
|
||||||
|
## begin gnulib module string
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
|
||||||
|
-e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
|
||||||
|
-e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
|
||||||
|
-e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
|
||||||
|
-e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
|
||||||
|
-e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
|
||||||
|
-e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
|
||||||
|
-e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
|
||||||
|
-e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
|
||||||
|
-e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
|
||||||
|
-e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
|
||||||
|
-e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
|
||||||
|
-e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
|
||||||
|
-e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
|
||||||
|
-e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
|
||||||
|
-e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
|
||||||
|
-e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
|
||||||
|
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
||||||
|
-e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|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' \
|
||||||
|
-e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
|
||||||
|
-e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
|
< $(srcdir)/string_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += string.h string.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += string_.h
|
||||||
|
|
||||||
|
## end gnulib module string
|
||||||
|
|
||||||
|
## 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_.h
|
||||||
|
@MKDIR_P@ sys
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/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|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
|
||||||
|
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
|
||||||
|
< $(srcdir)/sys_socket_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv -f $@-t $@
|
||||||
|
MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
|
||||||
|
MOSTLYCLEANDIRS += sys
|
||||||
|
|
||||||
|
EXTRA_DIST += sys_socket_.h
|
||||||
|
|
||||||
|
## end gnulib module sys_socket
|
||||||
|
|
||||||
|
## begin gnulib module unistd
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
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' \
|
||||||
|
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
|
||||||
|
-e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
|
||||||
|
-e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
|
||||||
|
-e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
|
||||||
|
-e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
|
||||||
|
-e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
|
||||||
|
-e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
|
||||||
|
-e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
|
||||||
|
-e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
|
||||||
|
-e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
|
||||||
|
-e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
|
||||||
|
-e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
|
||||||
|
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
|
||||||
|
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
|
||||||
|
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
|
||||||
|
-e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
|
||||||
|
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
|
||||||
|
-e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
|
||||||
|
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
|
||||||
|
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
|
||||||
|
< $(srcdir)/unistd_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += unistd.h unistd.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += unistd_.h
|
||||||
|
|
||||||
|
## end gnulib module unistd
|
||||||
|
|
||||||
|
## begin gnulib module vasnprintf
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h
|
||||||
|
|
||||||
|
EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
|
||||||
|
|
||||||
|
## end gnulib module vasnprintf
|
||||||
|
|
||||||
|
## begin gnulib module wchar
|
||||||
|
|
||||||
|
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_.h
|
||||||
|
rm -f $@-t $@
|
||||||
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
|
sed -e 's/@''INCLUDE_NEXT''@/$(INCLUDE_NEXT)/g' \
|
||||||
|
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
||||||
|
-e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
|
||||||
|
-e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
|
||||||
|
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
||||||
|
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
|
< $(srcdir)/wchar_.h; \
|
||||||
|
} > $@-t
|
||||||
|
mv $@-t $@
|
||||||
|
MOSTLYCLEANFILES += wchar.h wchar.h-t
|
||||||
|
|
||||||
|
EXTRA_DIST += wchar_.h
|
||||||
|
|
||||||
|
## end gnulib module wchar
|
||||||
|
|
||||||
|
## begin gnulib module xsize
|
||||||
|
|
||||||
|
libgnu_a_SOURCES += xsize.h
|
||||||
|
|
||||||
|
## end gnulib module xsize
|
||||||
|
|
||||||
|
## begin gnulib module dummy
|
||||||
|
|
||||||
|
libgnu_a_SOURCES += dummy.c
|
||||||
|
|
||||||
|
## end gnulib module dummy
|
||||||
|
|
||||||
|
|
||||||
|
mostlyclean-local: mostlyclean-generic
|
||||||
|
@for dir in '' $(MOSTLYCLEANDIRS); do \
|
||||||
|
if test -n "$$dir" && test -d $$dir; then \
|
||||||
|
echo "rmdir $$dir"; rmdir $$dir; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
:
|
54
libgnu/alloca_.h
Normal file
54
libgnu/alloca_.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/* Memory allocation on the stack.
|
||||||
|
|
||||||
|
Copyright (C) 1995, 1999, 2001-2004, 2006-2007 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 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
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
|
||||||
|
means there is a real alloca function. */
|
||||||
|
#ifndef _GL_ALLOCA_H
|
||||||
|
#define _GL_ALLOCA_H
|
||||||
|
|
||||||
|
/* alloca (N) returns a pointer to N bytes of memory
|
||||||
|
allocated on the stack, which will last until the function returns.
|
||||||
|
Use of alloca should be avoided:
|
||||||
|
- inside arguments of function calls - undefined behaviour,
|
||||||
|
- in inline functions - the allocation may actually last until the
|
||||||
|
calling function returns,
|
||||||
|
- for huge N (say, N >= 65536) - you never know how large (or small)
|
||||||
|
the stack is, and when the stack cannot fulfill the memory allocation
|
||||||
|
request, the program just crashes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef alloca
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# define alloca __builtin_alloca
|
||||||
|
# elif defined _AIX
|
||||||
|
# define alloca __alloca
|
||||||
|
# elif defined _MSC_VER
|
||||||
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
|
# else
|
||||||
|
# include <stddef.h>
|
||||||
|
# ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
# endif
|
||||||
|
void *alloca (size_t);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_ALLOCA_H */
|
35
libgnu/asnprintf.c
Normal file
35
libgnu/asnprintf.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/* Formatted output to strings.
|
||||||
|
Copyright (C) 1999, 2002, 2006 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "vasnprintf.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *result;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
result = vasnprintf (resultbuf, lengthp, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return result;
|
||||||
|
}
|
44
libgnu/dummy.c
Normal file
44
libgnu/dummy.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* A dummy file, to prevent empty libraries from breaking builds.
|
||||||
|
Copyright (C) 2004, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
/* Some systems, reportedly OpenBSD and Mac OS X, refuse to create
|
||||||
|
libraries without any object files. You might get an error like:
|
||||||
|
|
||||||
|
> ar cru .libs/libgl.a
|
||||||
|
> ar: no archive members specified
|
||||||
|
|
||||||
|
Compiling this file, and adding its object file to the library, will
|
||||||
|
prevent the library from being empty. */
|
||||||
|
|
||||||
|
/* Some systems, such as Solaris with cc 5.0, refuse to work with libraries
|
||||||
|
that don't export any symbol. You might get an error like:
|
||||||
|
|
||||||
|
> cc ... libgnu.a
|
||||||
|
> ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a
|
||||||
|
|
||||||
|
Compiling this file, and adding its object file to the library, will
|
||||||
|
prevent the library from exporting no symbols. */
|
||||||
|
|
||||||
|
#ifdef __sun
|
||||||
|
/* This declaration ensures that the library will export at least 1 symbol. */
|
||||||
|
int gl_dummy_symbol;
|
||||||
|
#else
|
||||||
|
/* This declaration is solely to ensure that after preprocessing
|
||||||
|
this file is never empty. */
|
||||||
|
typedef int dummy;
|
||||||
|
#endif
|
148
libgnu/float+.h
Normal file
148
libgnu/float+.h
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
/* Supplemental information about the floating-point formats.
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2007.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _FLOATPLUS_H
|
||||||
|
#define _FLOATPLUS_H
|
||||||
|
|
||||||
|
#include <float.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
/* Number of bits in the mantissa of a floating-point number, including the
|
||||||
|
"hidden bit". */
|
||||||
|
#if FLT_RADIX == 2
|
||||||
|
# define FLT_MANT_BIT FLT_MANT_DIG
|
||||||
|
# define DBL_MANT_BIT DBL_MANT_DIG
|
||||||
|
# define LDBL_MANT_BIT LDBL_MANT_DIG
|
||||||
|
#elif FLT_RADIX == 4
|
||||||
|
# define FLT_MANT_BIT (FLT_MANT_DIG * 2)
|
||||||
|
# define DBL_MANT_BIT (DBL_MANT_DIG * 2)
|
||||||
|
# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2)
|
||||||
|
#elif FLT_RADIX == 16
|
||||||
|
# define FLT_MANT_BIT (FLT_MANT_DIG * 4)
|
||||||
|
# define DBL_MANT_BIT (DBL_MANT_DIG * 4)
|
||||||
|
# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Bit mask that can be used to mask the exponent, as an unsigned number. */
|
||||||
|
#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7)
|
||||||
|
#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
|
||||||
|
#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7)
|
||||||
|
|
||||||
|
/* Number of bits used for the exponent of a floating-point number, including
|
||||||
|
the exponent's sign. */
|
||||||
|
#define FLT_EXP_BIT \
|
||||||
|
(FLT_EXP_MASK < 0x100 ? 8 : \
|
||||||
|
FLT_EXP_MASK < 0x200 ? 9 : \
|
||||||
|
FLT_EXP_MASK < 0x400 ? 10 : \
|
||||||
|
FLT_EXP_MASK < 0x800 ? 11 : \
|
||||||
|
FLT_EXP_MASK < 0x1000 ? 12 : \
|
||||||
|
FLT_EXP_MASK < 0x2000 ? 13 : \
|
||||||
|
FLT_EXP_MASK < 0x4000 ? 14 : \
|
||||||
|
FLT_EXP_MASK < 0x8000 ? 15 : \
|
||||||
|
FLT_EXP_MASK < 0x10000 ? 16 : \
|
||||||
|
FLT_EXP_MASK < 0x20000 ? 17 : \
|
||||||
|
FLT_EXP_MASK < 0x40000 ? 18 : \
|
||||||
|
FLT_EXP_MASK < 0x80000 ? 19 : \
|
||||||
|
FLT_EXP_MASK < 0x100000 ? 20 : \
|
||||||
|
FLT_EXP_MASK < 0x200000 ? 21 : \
|
||||||
|
FLT_EXP_MASK < 0x400000 ? 22 : \
|
||||||
|
FLT_EXP_MASK < 0x800000 ? 23 : \
|
||||||
|
FLT_EXP_MASK < 0x1000000 ? 24 : \
|
||||||
|
FLT_EXP_MASK < 0x2000000 ? 25 : \
|
||||||
|
FLT_EXP_MASK < 0x4000000 ? 26 : \
|
||||||
|
FLT_EXP_MASK < 0x8000000 ? 27 : \
|
||||||
|
FLT_EXP_MASK < 0x10000000 ? 28 : \
|
||||||
|
FLT_EXP_MASK < 0x20000000 ? 29 : \
|
||||||
|
FLT_EXP_MASK < 0x40000000 ? 30 : \
|
||||||
|
FLT_EXP_MASK <= 0x7fffffff ? 31 : \
|
||||||
|
32)
|
||||||
|
#define DBL_EXP_BIT \
|
||||||
|
(DBL_EXP_MASK < 0x100 ? 8 : \
|
||||||
|
DBL_EXP_MASK < 0x200 ? 9 : \
|
||||||
|
DBL_EXP_MASK < 0x400 ? 10 : \
|
||||||
|
DBL_EXP_MASK < 0x800 ? 11 : \
|
||||||
|
DBL_EXP_MASK < 0x1000 ? 12 : \
|
||||||
|
DBL_EXP_MASK < 0x2000 ? 13 : \
|
||||||
|
DBL_EXP_MASK < 0x4000 ? 14 : \
|
||||||
|
DBL_EXP_MASK < 0x8000 ? 15 : \
|
||||||
|
DBL_EXP_MASK < 0x10000 ? 16 : \
|
||||||
|
DBL_EXP_MASK < 0x20000 ? 17 : \
|
||||||
|
DBL_EXP_MASK < 0x40000 ? 18 : \
|
||||||
|
DBL_EXP_MASK < 0x80000 ? 19 : \
|
||||||
|
DBL_EXP_MASK < 0x100000 ? 20 : \
|
||||||
|
DBL_EXP_MASK < 0x200000 ? 21 : \
|
||||||
|
DBL_EXP_MASK < 0x400000 ? 22 : \
|
||||||
|
DBL_EXP_MASK < 0x800000 ? 23 : \
|
||||||
|
DBL_EXP_MASK < 0x1000000 ? 24 : \
|
||||||
|
DBL_EXP_MASK < 0x2000000 ? 25 : \
|
||||||
|
DBL_EXP_MASK < 0x4000000 ? 26 : \
|
||||||
|
DBL_EXP_MASK < 0x8000000 ? 27 : \
|
||||||
|
DBL_EXP_MASK < 0x10000000 ? 28 : \
|
||||||
|
DBL_EXP_MASK < 0x20000000 ? 29 : \
|
||||||
|
DBL_EXP_MASK < 0x40000000 ? 30 : \
|
||||||
|
DBL_EXP_MASK <= 0x7fffffff ? 31 : \
|
||||||
|
32)
|
||||||
|
#define LDBL_EXP_BIT \
|
||||||
|
(LDBL_EXP_MASK < 0x100 ? 8 : \
|
||||||
|
LDBL_EXP_MASK < 0x200 ? 9 : \
|
||||||
|
LDBL_EXP_MASK < 0x400 ? 10 : \
|
||||||
|
LDBL_EXP_MASK < 0x800 ? 11 : \
|
||||||
|
LDBL_EXP_MASK < 0x1000 ? 12 : \
|
||||||
|
LDBL_EXP_MASK < 0x2000 ? 13 : \
|
||||||
|
LDBL_EXP_MASK < 0x4000 ? 14 : \
|
||||||
|
LDBL_EXP_MASK < 0x8000 ? 15 : \
|
||||||
|
LDBL_EXP_MASK < 0x10000 ? 16 : \
|
||||||
|
LDBL_EXP_MASK < 0x20000 ? 17 : \
|
||||||
|
LDBL_EXP_MASK < 0x40000 ? 18 : \
|
||||||
|
LDBL_EXP_MASK < 0x80000 ? 19 : \
|
||||||
|
LDBL_EXP_MASK < 0x100000 ? 20 : \
|
||||||
|
LDBL_EXP_MASK < 0x200000 ? 21 : \
|
||||||
|
LDBL_EXP_MASK < 0x400000 ? 22 : \
|
||||||
|
LDBL_EXP_MASK < 0x800000 ? 23 : \
|
||||||
|
LDBL_EXP_MASK < 0x1000000 ? 24 : \
|
||||||
|
LDBL_EXP_MASK < 0x2000000 ? 25 : \
|
||||||
|
LDBL_EXP_MASK < 0x4000000 ? 26 : \
|
||||||
|
LDBL_EXP_MASK < 0x8000000 ? 27 : \
|
||||||
|
LDBL_EXP_MASK < 0x10000000 ? 28 : \
|
||||||
|
LDBL_EXP_MASK < 0x20000000 ? 29 : \
|
||||||
|
LDBL_EXP_MASK < 0x40000000 ? 30 : \
|
||||||
|
LDBL_EXP_MASK <= 0x7fffffff ? 31 : \
|
||||||
|
32)
|
||||||
|
|
||||||
|
/* Number of bits used for a floating-point number: the mantissa (not
|
||||||
|
counting the "hidden bit", since it may or may not be explicit), the
|
||||||
|
exponent, and the sign. */
|
||||||
|
#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1)
|
||||||
|
#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1)
|
||||||
|
#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1)
|
||||||
|
|
||||||
|
/* Number of bytes used for a floating-point number.
|
||||||
|
This can be smaller than the 'sizeof'. For example, on i386 systems,
|
||||||
|
'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence
|
||||||
|
LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but
|
||||||
|
sizeof (long double) = 12 or = 16. */
|
||||||
|
#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
|
||||||
|
#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
|
||||||
|
#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
|
||||||
|
|
||||||
|
/* Verify that SIZEOF_FLT <= sizeof (float) etc. */
|
||||||
|
typedef int verify_sizeof_flt[2 * (SIZEOF_FLT <= sizeof (float)) - 1];
|
||||||
|
typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1];
|
||||||
|
typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1];
|
||||||
|
|
||||||
|
#endif /* _FLOATPLUS_H */
|
59
libgnu/float_.h
Normal file
59
libgnu/float_.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/* A correct <float.h>.
|
||||||
|
|
||||||
|
Copyright (C) 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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_FLOAT_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
|
||||||
|
|
||||||
|
#ifndef _GL_FLOAT_H
|
||||||
|
#define _GL_FLOAT_H
|
||||||
|
|
||||||
|
/* 'long double' properties. */
|
||||||
|
#if defined __i386__ && defined __BEOS__
|
||||||
|
/* Number of mantissa units, in base FLT_RADIX. */
|
||||||
|
# undef LDBL_MANT_DIG
|
||||||
|
# define LDBL_MANT_DIG 64
|
||||||
|
/* Number of decimal digits that is sufficient for representing a number. */
|
||||||
|
# undef LDBL_DIG
|
||||||
|
# define LDBL_DIG 18
|
||||||
|
/* x-1 where x is the smallest representable number > 1. */
|
||||||
|
# undef LDBL_EPSILON
|
||||||
|
# define LDBL_EPSILON 1.0842021724855044340E-19L
|
||||||
|
/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */
|
||||||
|
# undef LDBL_MIN_EXP
|
||||||
|
# define LDBL_MIN_EXP (-16381)
|
||||||
|
/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */
|
||||||
|
# undef LDBL_MAX_EXP
|
||||||
|
# define LDBL_MAX_EXP 16384
|
||||||
|
/* Minimum positive normalized number. */
|
||||||
|
# undef LDBL_MIN
|
||||||
|
# define LDBL_MIN 3.3621031431120935063E-4932L
|
||||||
|
/* Maximum representable finite number. */
|
||||||
|
# undef LDBL_MAX
|
||||||
|
# define LDBL_MAX 1.1897314953572317650E+4932L
|
||||||
|
/* Minimum e such that 10^e is in the range of normalized numbers. */
|
||||||
|
# undef LDBL_MIN_10_EXP
|
||||||
|
# define LDBL_MIN_10_EXP (-4931)
|
||||||
|
/* Maximum e such that 10^e is in the range of representable finite numbers. */
|
||||||
|
# undef LDBL_MAX_10_EXP
|
||||||
|
# define LDBL_MAX_10_EXP 4932
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_FLOAT_H */
|
||||||
|
#endif /* _GL_FLOAT_H */
|
78
libgnu/gai_strerror.c
Normal file
78
libgnu/gai_strerror.c
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/* Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Philip Blundell <pjb27@cam.ac.uk>, 1997.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _LIBC
|
||||||
|
# include <config.h>
|
||||||
|
# include "getaddrinfo.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include <libintl.h>
|
||||||
|
#else
|
||||||
|
# include "gettext.h"
|
||||||
|
# define _(String) gettext (String)
|
||||||
|
# define N_(String) String
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static struct
|
||||||
|
{
|
||||||
|
int code;
|
||||||
|
const char *msg;
|
||||||
|
}
|
||||||
|
values[] =
|
||||||
|
{
|
||||||
|
{ EAI_ADDRFAMILY, N_("Address family for hostname not supported") },
|
||||||
|
{ EAI_AGAIN, N_("Temporary failure in name resolution") },
|
||||||
|
{ EAI_BADFLAGS, N_("Bad value for ai_flags") },
|
||||||
|
{ EAI_FAIL, N_("Non-recoverable failure in name resolution") },
|
||||||
|
{ EAI_FAMILY, N_("ai_family not supported") },
|
||||||
|
{ EAI_MEMORY, N_("Memory allocation failure") },
|
||||||
|
{ EAI_NODATA, N_("No address associated with hostname") },
|
||||||
|
{ EAI_NONAME, N_("Name or service not known") },
|
||||||
|
{ EAI_SERVICE, N_("Servname not supported for ai_socktype") },
|
||||||
|
{ EAI_SOCKTYPE, N_("ai_socktype not supported") },
|
||||||
|
{ EAI_SYSTEM, N_("System error") },
|
||||||
|
{ EAI_OVERFLOW, N_("Argument buffer too small") },
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
{ EAI_INPROGRESS, N_("Processing request in progress") },
|
||||||
|
{ EAI_CANCELED, N_("Request canceled") },
|
||||||
|
{ EAI_NOTCANCELED, N_("Request not canceled") },
|
||||||
|
{ EAI_ALLDONE, N_("All requests done") },
|
||||||
|
{ EAI_INTR, N_("Interrupted by a signal") },
|
||||||
|
{ EAI_IDN_ENCODE, N_("Parameter string not correctly encoded") }
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
gai_strerror (int code)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < sizeof (values) / sizeof (values[0]); ++i)
|
||||||
|
if (values[i].code == code)
|
||||||
|
return _(values[i].msg);
|
||||||
|
|
||||||
|
return _("Unknown error");
|
||||||
|
}
|
||||||
|
#ifdef _LIBC
|
||||||
|
libc_hidden_def (gai_strerror)
|
||||||
|
#endif
|
418
libgnu/getaddrinfo.c
Normal file
418
libgnu/getaddrinfo.c
Normal file
@ -0,0 +1,418 @@
|
|||||||
|
/* Get address information (partial implementation).
|
||||||
|
Copyright (C) 1997, 2001, 2002, 2004, 2005, 2006, 2007 Free Software
|
||||||
|
Foundation, Inc.
|
||||||
|
Contributed by Simon Josefsson <simon@josefsson.org>.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "getaddrinfo.h"
|
||||||
|
|
||||||
|
#if HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get calloc. */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Get memcpy, strdup. */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Get snprintf. */
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "gettext.h"
|
||||||
|
#define _(String) gettext (String)
|
||||||
|
#define N_(String) String
|
||||||
|
|
||||||
|
#include "inet_ntop.h"
|
||||||
|
|
||||||
|
/* BeOS has AF_INET, but not PF_INET. */
|
||||||
|
#ifndef PF_INET
|
||||||
|
# define PF_INET AF_INET
|
||||||
|
#endif
|
||||||
|
/* BeOS also lacks PF_UNSPEC. */
|
||||||
|
#ifndef PF_UNSPEC
|
||||||
|
# define PF_UNSPEC 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
# define WIN32_NATIVE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32_NATIVE
|
||||||
|
typedef int (WSAAPI *getaddrinfo_func) (const char*, const char*,
|
||||||
|
const struct addrinfo*,
|
||||||
|
struct addrinfo**);
|
||||||
|
typedef void (WSAAPI *freeaddrinfo_func) (struct addrinfo*);
|
||||||
|
typedef int (WSAAPI *getnameinfo_func) (const struct sockaddr*,
|
||||||
|
socklen_t, char*, DWORD,
|
||||||
|
char*, DWORD, int);
|
||||||
|
|
||||||
|
static getaddrinfo_func getaddrinfo_ptr = NULL;
|
||||||
|
static freeaddrinfo_func freeaddrinfo_ptr = NULL;
|
||||||
|
static getnameinfo_func getnameinfo_ptr = NULL;
|
||||||
|
|
||||||
|
static int
|
||||||
|
use_win32_p (void)
|
||||||
|
{
|
||||||
|
static int done = 0;
|
||||||
|
HMODULE h;
|
||||||
|
|
||||||
|
if (done)
|
||||||
|
return getaddrinfo_ptr ? 1 : 0;
|
||||||
|
|
||||||
|
done = 1;
|
||||||
|
|
||||||
|
h = GetModuleHandle ("ws2_32.dll");
|
||||||
|
|
||||||
|
if (h)
|
||||||
|
{
|
||||||
|
getaddrinfo_ptr = (getaddrinfo_func) GetProcAddress (h, "getaddrinfo");
|
||||||
|
freeaddrinfo_ptr = (freeaddrinfo_func) GetProcAddress (h, "freeaddrinfo");
|
||||||
|
getnameinfo_ptr = (getnameinfo_func) GetProcAddress (h, "getnameinfo");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If either is missing, something is odd. */
|
||||||
|
if (!getaddrinfo_ptr || !freeaddrinfo_ptr || !getnameinfo_ptr)
|
||||||
|
{
|
||||||
|
getaddrinfo_ptr = NULL;
|
||||||
|
freeaddrinfo_ptr = NULL;
|
||||||
|
getnameinfo_ptr = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
validate_family (int family)
|
||||||
|
{
|
||||||
|
/* FIXME: Support more families. */
|
||||||
|
#if HAVE_IPV4
|
||||||
|
if (family == PF_INET)
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
#if HAVE_IPV6
|
||||||
|
if (family == PF_INET6)
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
if (family == PF_UNSPEC)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Translate name of a service location and/or a service name to set of
|
||||||
|
socket addresses. */
|
||||||
|
int
|
||||||
|
getaddrinfo (const char *restrict nodename,
|
||||||
|
const char *restrict servname,
|
||||||
|
const struct addrinfo *restrict hints,
|
||||||
|
struct addrinfo **restrict res)
|
||||||
|
{
|
||||||
|
struct addrinfo *tmp;
|
||||||
|
int port = 0;
|
||||||
|
struct hostent *he;
|
||||||
|
void *storage;
|
||||||
|
size_t size;
|
||||||
|
#if HAVE_IPV6
|
||||||
|
struct v6_pair {
|
||||||
|
struct addrinfo addrinfo;
|
||||||
|
struct sockaddr_in6 sockaddr_in6;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
#if HAVE_IPV4
|
||||||
|
struct v4_pair {
|
||||||
|
struct addrinfo addrinfo;
|
||||||
|
struct sockaddr_in sockaddr_in;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32_NATIVE
|
||||||
|
if (use_win32_p ())
|
||||||
|
return getaddrinfo_ptr (nodename, servname, hints, res);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE)))
|
||||||
|
/* FIXME: Support more flags. */
|
||||||
|
return EAI_BADFLAGS;
|
||||||
|
|
||||||
|
if (hints && !validate_family (hints->ai_family))
|
||||||
|
return EAI_FAMILY;
|
||||||
|
|
||||||
|
if (hints &&
|
||||||
|
hints->ai_socktype != SOCK_STREAM && hints->ai_socktype != SOCK_DGRAM)
|
||||||
|
/* FIXME: Support other socktype. */
|
||||||
|
return EAI_SOCKTYPE; /* FIXME: Better return code? */
|
||||||
|
|
||||||
|
if (!nodename)
|
||||||
|
{
|
||||||
|
if (!(hints->ai_flags & AI_PASSIVE))
|
||||||
|
return EAI_NONAME;
|
||||||
|
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
nodename = (hints->ai_family == AF_INET6) ? "::" : "0.0.0.0";
|
||||||
|
#else
|
||||||
|
nodename = "0.0.0.0";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (servname)
|
||||||
|
{
|
||||||
|
struct servent *se = NULL;
|
||||||
|
const char *proto =
|
||||||
|
(hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp";
|
||||||
|
|
||||||
|
if (hints == NULL || !(hints->ai_flags & AI_NUMERICSERV))
|
||||||
|
/* FIXME: Use getservbyname_r if available. */
|
||||||
|
se = getservbyname (servname, proto);
|
||||||
|
|
||||||
|
if (!se)
|
||||||
|
{
|
||||||
|
char *c;
|
||||||
|
if (!(*servname >= '0' && *servname <= '9'))
|
||||||
|
return EAI_NONAME;
|
||||||
|
port = strtoul (servname, &c, 10);
|
||||||
|
if (*c || port > 0xffff)
|
||||||
|
return EAI_NONAME;
|
||||||
|
port = htons (port);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
port = se->s_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: Use gethostbyname_r if available. */
|
||||||
|
he = gethostbyname (nodename);
|
||||||
|
if (!he || he->h_addr_list[0] == NULL)
|
||||||
|
return EAI_NONAME;
|
||||||
|
|
||||||
|
switch (he->h_addrtype)
|
||||||
|
{
|
||||||
|
#if HAVE_IPV6
|
||||||
|
case PF_INET6:
|
||||||
|
size = sizeof (struct v6_pair);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_IPV4
|
||||||
|
case PF_INET:
|
||||||
|
size = sizeof (struct v4_pair);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return EAI_NODATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
storage = calloc (1, size);
|
||||||
|
if (!storage)
|
||||||
|
return EAI_MEMORY;
|
||||||
|
|
||||||
|
switch (he->h_addrtype)
|
||||||
|
{
|
||||||
|
#if HAVE_IPV6
|
||||||
|
case PF_INET6:
|
||||||
|
{
|
||||||
|
struct v6_pair *p = storage;
|
||||||
|
struct sockaddr_in6 *sinp = &p->sockaddr_in6;
|
||||||
|
tmp = &p->addrinfo;
|
||||||
|
|
||||||
|
if (port)
|
||||||
|
sinp->sin6_port = port;
|
||||||
|
|
||||||
|
if (he->h_length != sizeof (sinp->sin6_addr))
|
||||||
|
{
|
||||||
|
free (storage);
|
||||||
|
return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy (&sinp->sin6_addr, he->h_addr_list[0], sizeof sinp->sin6_addr);
|
||||||
|
|
||||||
|
tmp->ai_addr = (struct sockaddr *) sinp;
|
||||||
|
tmp->ai_addrlen = sizeof *sinp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_IPV4
|
||||||
|
case PF_INET:
|
||||||
|
{
|
||||||
|
struct v4_pair *p = storage;
|
||||||
|
struct sockaddr_in *sinp = &p->sockaddr_in;
|
||||||
|
tmp = &p->addrinfo;
|
||||||
|
|
||||||
|
if (port)
|
||||||
|
sinp->sin_port = port;
|
||||||
|
|
||||||
|
if (he->h_length != sizeof (sinp->sin_addr))
|
||||||
|
{
|
||||||
|
free (storage);
|
||||||
|
return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy (&sinp->sin_addr, he->h_addr_list[0], sizeof sinp->sin_addr);
|
||||||
|
|
||||||
|
tmp->ai_addr = (struct sockaddr *) sinp;
|
||||||
|
tmp->ai_addrlen = sizeof *sinp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
free (storage);
|
||||||
|
return EAI_NODATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hints && hints->ai_flags & AI_CANONNAME)
|
||||||
|
{
|
||||||
|
const char *cn;
|
||||||
|
if (he->h_name)
|
||||||
|
cn = he->h_name;
|
||||||
|
else
|
||||||
|
cn = nodename;
|
||||||
|
|
||||||
|
tmp->ai_canonname = strdup (cn);
|
||||||
|
if (!tmp->ai_canonname)
|
||||||
|
{
|
||||||
|
free (storage);
|
||||||
|
return EAI_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp->ai_protocol = (hints) ? hints->ai_protocol : 0;
|
||||||
|
tmp->ai_socktype = (hints) ? hints->ai_socktype : 0;
|
||||||
|
tmp->ai_addr->sa_family = he->h_addrtype;
|
||||||
|
tmp->ai_family = he->h_addrtype;
|
||||||
|
|
||||||
|
/* FIXME: If more than one address, create linked list of addrinfo's. */
|
||||||
|
|
||||||
|
*res = tmp;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free `addrinfo' structure AI including associated storage. */
|
||||||
|
void
|
||||||
|
freeaddrinfo (struct addrinfo *ai)
|
||||||
|
{
|
||||||
|
#ifdef WIN32_NATIVE
|
||||||
|
if (use_win32_p ())
|
||||||
|
{
|
||||||
|
freeaddrinfo_ptr (ai);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (ai)
|
||||||
|
{
|
||||||
|
struct addrinfo *cur;
|
||||||
|
|
||||||
|
cur = ai;
|
||||||
|
ai = ai->ai_next;
|
||||||
|
|
||||||
|
if (cur->ai_canonname) free (cur->ai_canonname);
|
||||||
|
free (cur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen,
|
||||||
|
char *restrict node, socklen_t nodelen,
|
||||||
|
char *restrict service, socklen_t servicelen,
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
#ifdef WIN32_NATIVE
|
||||||
|
if (use_win32_p ())
|
||||||
|
return getnameinfo_ptr (sa, salen, node, nodelen,
|
||||||
|
service, servicelen, flags);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FIXME: Support other flags. */
|
||||||
|
if ((node && nodelen > 0 && !(flags & NI_NUMERICHOST)) ||
|
||||||
|
(service && servicelen > 0 && !(flags & NI_NUMERICHOST)) ||
|
||||||
|
(flags & ~(NI_NUMERICHOST|NI_NUMERICSERV)))
|
||||||
|
return EAI_BADFLAGS;
|
||||||
|
|
||||||
|
if (sa == NULL || salen < sizeof (sa->sa_family))
|
||||||
|
return EAI_FAMILY;
|
||||||
|
|
||||||
|
switch (sa->sa_family)
|
||||||
|
{
|
||||||
|
#if HAVE_IPV4
|
||||||
|
case AF_INET:
|
||||||
|
if (salen < sizeof (struct sockaddr_in))
|
||||||
|
return EAI_FAMILY;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
if (salen < sizeof (struct sockaddr_in6))
|
||||||
|
return EAI_FAMILY;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return EAI_FAMILY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node && nodelen > 0 && flags & NI_NUMERICHOST)
|
||||||
|
{
|
||||||
|
switch (sa->sa_family)
|
||||||
|
{
|
||||||
|
#if HAVE_IPV4
|
||||||
|
case AF_INET:
|
||||||
|
if (!inet_ntop (AF_INET,
|
||||||
|
&(((const struct sockaddr_in *) sa)->sin_addr),
|
||||||
|
node, nodelen))
|
||||||
|
return EAI_SYSTEM;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
if (!inet_ntop (AF_INET6,
|
||||||
|
&(((const struct sockaddr_in6 *) sa)->sin6_addr),
|
||||||
|
node, nodelen))
|
||||||
|
return EAI_SYSTEM;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return EAI_FAMILY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (service && servicelen > 0 && flags & NI_NUMERICSERV)
|
||||||
|
switch (sa->sa_family)
|
||||||
|
{
|
||||||
|
#if HAVE_IPV4
|
||||||
|
case AF_INET:
|
||||||
|
#endif
|
||||||
|
#if HAVE_IPV6
|
||||||
|
case AF_INET6:
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
unsigned short int port
|
||||||
|
= ntohs (((const struct sockaddr_in *) sa)->sin_port);
|
||||||
|
if (servicelen <= snprintf (service, servicelen, "%u", port))
|
||||||
|
return EAI_OVERFLOW;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
155
libgnu/getaddrinfo.h
Normal file
155
libgnu/getaddrinfo.h
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
/* Get address information.
|
||||||
|
Copyright (C) 1996-2002, 2003, 2004, 2005, 2006
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
Contributed by Simon Josefsson <simon@josefsson.org>.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 GETADDRINFO_H
|
||||||
|
#define GETADDRINFO_H
|
||||||
|
|
||||||
|
/* sys/socket.h in i386-unknown-freebsd4.10 and
|
||||||
|
powerpc-apple-darwin5.5 require sys/types.h, so include it first.
|
||||||
|
Then we'll also get 'socklen_t' and 'struct sockaddr' which are
|
||||||
|
used below. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
/* Get all getaddrinfo related declarations, if available. */
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
# include <netdb.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRUCT_ADDRINFO
|
||||||
|
|
||||||
|
/* Structure to contain information about address of a service provider. */
|
||||||
|
struct addrinfo
|
||||||
|
{
|
||||||
|
int ai_flags; /* Input flags. */
|
||||||
|
int ai_family; /* Protocol family for socket. */
|
||||||
|
int ai_socktype; /* Socket type. */
|
||||||
|
int ai_protocol; /* Protocol for socket. */
|
||||||
|
socklen_t ai_addrlen; /* Length of socket address. */
|
||||||
|
struct sockaddr *ai_addr; /* Socket address for socket. */
|
||||||
|
char *ai_canonname; /* Canonical name for service location. */
|
||||||
|
struct addrinfo *ai_next; /* Pointer to next in list. */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Possible values for `ai_flags' field in `addrinfo' structure. */
|
||||||
|
#ifndef AI_PASSIVE
|
||||||
|
# define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */
|
||||||
|
#endif
|
||||||
|
#ifndef AI_CANONNAME
|
||||||
|
# define AI_CANONNAME 0x0002 /* Request for canonical name. */
|
||||||
|
#endif
|
||||||
|
#ifndef AI_NUMERICSERV
|
||||||
|
# define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* The commented out definitions below are not yet implemented in the
|
||||||
|
GNULIB getaddrinfo() replacement, so are not yet needed and may, in fact,
|
||||||
|
cause conflicts on systems with a getaddrinfo() function which does not
|
||||||
|
define them.
|
||||||
|
|
||||||
|
If they are restored, be sure to protect the definitions with #ifndef. */
|
||||||
|
#define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */
|
||||||
|
#define AI_V4MAPPED 0x0008 /* IPv4 mapped addresses are acceptable. */
|
||||||
|
#define AI_ALL 0x0010 /* Return IPv4 mapped and IPv6 addresses. */
|
||||||
|
#define AI_ADDRCONFIG 0x0020 /* Use configuration of this host to choose
|
||||||
|
returned address type.. */
|
||||||
|
#endif /* 0 */
|
||||||
|
|
||||||
|
/* Error values for `getaddrinfo' function. */
|
||||||
|
#ifndef EAI_BADFLAGS
|
||||||
|
# define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */
|
||||||
|
# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */
|
||||||
|
# define EAI_AGAIN -3 /* Temporary failure in name resolution. */
|
||||||
|
# define EAI_FAIL -4 /* Non-recoverable failure in name res. */
|
||||||
|
# define EAI_NODATA -5 /* No address associated with NAME. */
|
||||||
|
# define EAI_FAMILY -6 /* `ai_family' not supported. */
|
||||||
|
# define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */
|
||||||
|
# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
|
||||||
|
# define EAI_MEMORY -10 /* Memory allocation failure. */
|
||||||
|
#endif
|
||||||
|
#ifndef EAI_OVERFLOW
|
||||||
|
/* Not defined on mingw32. */
|
||||||
|
# define EAI_OVERFLOW -12 /* Argument buffer overflow. */
|
||||||
|
#endif
|
||||||
|
#ifndef EAI_ADDRFAMILY
|
||||||
|
/* Not defined on mingw32. */
|
||||||
|
# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */
|
||||||
|
#endif
|
||||||
|
#ifndef EAI_SYSTEM
|
||||||
|
/* Not defined on mingw32. */
|
||||||
|
# define EAI_SYSTEM -11 /* System error returned in `errno'. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
# ifndef EAI_INPROGRESS
|
||||||
|
# define EAI_INPROGRESS -100 /* Processing request in progress. */
|
||||||
|
# define EAI_CANCELED -101 /* Request canceled. */
|
||||||
|
# define EAI_NOTCANCELED -102 /* Request not canceled. */
|
||||||
|
# define EAI_ALLDONE -103 /* All requests done. */
|
||||||
|
# define EAI_INTR -104 /* Interrupted by a signal. */
|
||||||
|
# define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_DECL_GETADDRINFO
|
||||||
|
/* Translate name of a service location and/or a service name to set of
|
||||||
|
socket addresses.
|
||||||
|
For more details, see the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
|
||||||
|
extern int getaddrinfo (const char *restrict nodename,
|
||||||
|
const char *restrict servname,
|
||||||
|
const struct addrinfo *restrict hints,
|
||||||
|
struct addrinfo **restrict res);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_DECL_FREEADDRINFO
|
||||||
|
/* Free `addrinfo' structure AI including associated storage.
|
||||||
|
For more details, see the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */
|
||||||
|
extern void freeaddrinfo (struct addrinfo *ai);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_DECL_GAI_STRERROR
|
||||||
|
/* Convert error return from getaddrinfo() to a string.
|
||||||
|
For more details, see the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/gai_strerror.html>. */
|
||||||
|
extern const char *gai_strerror (int ecode);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_DECL_GETNAMEINFO
|
||||||
|
/* Convert socket address to printable node and service names.
|
||||||
|
For more details, see the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/getnameinfo.html>. */
|
||||||
|
extern int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen,
|
||||||
|
char *restrict node, socklen_t nodelen,
|
||||||
|
char *restrict service, socklen_t servicelen,
|
||||||
|
int flags);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Possible flags for getnameinfo. */
|
||||||
|
#ifndef NI_NUMERICHOST
|
||||||
|
# define NI_NUMERICHOST 1
|
||||||
|
#endif
|
||||||
|
#ifndef NI_NUMERICSERV
|
||||||
|
# define NI_NUMERICSERV 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* GETADDRINFO_H */
|
270
libgnu/gettext.h
Normal file
270
libgnu/gettext.h
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
/* Convenience header for conditional use of GNU <libintl.h>.
|
||||||
|
Copyright (C) 1995-1998, 2000-2002, 2004-2006 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _LIBGETTEXT_H
|
||||||
|
#define _LIBGETTEXT_H 1
|
||||||
|
|
||||||
|
/* NLS can be disabled through the configure --disable-nls option. */
|
||||||
|
#if ENABLE_NLS
|
||||||
|
|
||||||
|
/* Get declarations of GNU message catalog functions. */
|
||||||
|
# include <libintl.h>
|
||||||
|
|
||||||
|
/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
|
||||||
|
the gettext() and ngettext() macros. This is an alternative to calling
|
||||||
|
textdomain(), and is useful for libraries. */
|
||||||
|
# ifdef DEFAULT_TEXT_DOMAIN
|
||||||
|
# undef gettext
|
||||||
|
# define gettext(Msgid) \
|
||||||
|
dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
|
||||||
|
# undef ngettext
|
||||||
|
# define ngettext(Msgid1, Msgid2, N) \
|
||||||
|
dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
|
||||||
|
chokes if dcgettext is defined as a macro. So include it now, to make
|
||||||
|
later inclusions of <locale.h> a NOP. We don't include <libintl.h>
|
||||||
|
as well because people using "gettext.h" will not include <libintl.h>,
|
||||||
|
and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
|
||||||
|
is OK. */
|
||||||
|
#if defined(__sun)
|
||||||
|
# include <locale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
|
||||||
|
<libintl.h>, which chokes if dcgettext is defined as a macro. So include
|
||||||
|
it now, to make later inclusions of <libintl.h> a NOP. */
|
||||||
|
#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
|
||||||
|
# include <cstdlib>
|
||||||
|
# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
|
||||||
|
# include <libintl.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Disabled NLS.
|
||||||
|
The casts to 'const char *' serve the purpose of producing warnings
|
||||||
|
for invalid uses of the value returned from these functions.
|
||||||
|
On pre-ANSI systems without 'const', the config.h file is supposed to
|
||||||
|
contain "#define const". */
|
||||||
|
# define gettext(Msgid) ((const char *) (Msgid))
|
||||||
|
# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
|
||||||
|
# define dcgettext(Domainname, Msgid, Category) \
|
||||||
|
((void) (Category), dgettext (Domainname, Msgid))
|
||||||
|
# define ngettext(Msgid1, Msgid2, N) \
|
||||||
|
((N) == 1 \
|
||||||
|
? ((void) (Msgid2), (const char *) (Msgid1)) \
|
||||||
|
: ((void) (Msgid1), (const char *) (Msgid2)))
|
||||||
|
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
||||||
|
((void) (Domainname), ngettext (Msgid1, Msgid2, N))
|
||||||
|
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
||||||
|
((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
|
||||||
|
# define textdomain(Domainname) ((const char *) (Domainname))
|
||||||
|
# define bindtextdomain(Domainname, Dirname) \
|
||||||
|
((void) (Domainname), (const char *) (Dirname))
|
||||||
|
# define bind_textdomain_codeset(Domainname, Codeset) \
|
||||||
|
((void) (Domainname), (const char *) (Codeset))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* A pseudo function call that serves as a marker for the automated
|
||||||
|
extraction of messages, but does not call gettext(). The run-time
|
||||||
|
translation is done at a different place in the code.
|
||||||
|
The argument, String, should be a literal string. Concatenated strings
|
||||||
|
and other string expressions won't work.
|
||||||
|
The macro's expansion is not parenthesized, so that it is suitable as
|
||||||
|
initializer for static 'char[]' or 'const char[]' variables. */
|
||||||
|
#define gettext_noop(String) String
|
||||||
|
|
||||||
|
/* The separator between msgctxt and msgid in a .mo file. */
|
||||||
|
#define GETTEXT_CONTEXT_GLUE "\004"
|
||||||
|
|
||||||
|
/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
|
||||||
|
MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
|
||||||
|
short and rarely need to change.
|
||||||
|
The letter 'p' stands for 'particular' or 'special'. */
|
||||||
|
#ifdef DEFAULT_TEXT_DOMAIN
|
||||||
|
# define pgettext(Msgctxt, Msgid) \
|
||||||
|
pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
|
||||||
|
#else
|
||||||
|
# define pgettext(Msgctxt, Msgid) \
|
||||||
|
pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
|
||||||
|
#endif
|
||||||
|
#define dpgettext(Domainname, Msgctxt, Msgid) \
|
||||||
|
pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
|
||||||
|
#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
|
||||||
|
pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
|
||||||
|
#ifdef DEFAULT_TEXT_DOMAIN
|
||||||
|
# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
|
||||||
|
npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
|
||||||
|
#else
|
||||||
|
# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
|
||||||
|
npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
|
||||||
|
#endif
|
||||||
|
#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
|
||||||
|
npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
|
||||||
|
#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
|
||||||
|
npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static const char *
|
||||||
|
pgettext_aux (const char *domain,
|
||||||
|
const char *msg_ctxt_id, const char *msgid,
|
||||||
|
int category)
|
||||||
|
{
|
||||||
|
const char *translation = dcgettext (domain, msg_ctxt_id, category);
|
||||||
|
if (translation == msg_ctxt_id)
|
||||||
|
return msgid;
|
||||||
|
else
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static const char *
|
||||||
|
npgettext_aux (const char *domain,
|
||||||
|
const char *msg_ctxt_id, const char *msgid,
|
||||||
|
const char *msgid_plural, unsigned long int n,
|
||||||
|
int category)
|
||||||
|
{
|
||||||
|
const char *translation =
|
||||||
|
dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
|
||||||
|
if (translation == msg_ctxt_id || translation == msgid_plural)
|
||||||
|
return (n == 1 ? msgid : msgid_plural);
|
||||||
|
else
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
|
||||||
|
can be arbitrary expressions. But for string literals these macros are
|
||||||
|
less efficient than those above. */
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
|
||||||
|
(((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
|
||||||
|
/* || __STDC_VERSION__ >= 199901L */ )
|
||||||
|
|
||||||
|
#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define pgettext_expr(Msgctxt, Msgid) \
|
||||||
|
dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
|
||||||
|
#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
|
||||||
|
dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static const char *
|
||||||
|
dcpgettext_expr (const char *domain,
|
||||||
|
const char *msgctxt, const char *msgid,
|
||||||
|
int category)
|
||||||
|
{
|
||||||
|
size_t msgctxt_len = strlen (msgctxt) + 1;
|
||||||
|
size_t msgid_len = strlen (msgid) + 1;
|
||||||
|
const char *translation;
|
||||||
|
#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
|
||||||
|
char msg_ctxt_id[msgctxt_len + msgid_len];
|
||||||
|
#else
|
||||||
|
char buf[1024];
|
||||||
|
char *msg_ctxt_id =
|
||||||
|
(msgctxt_len + msgid_len <= sizeof (buf)
|
||||||
|
? buf
|
||||||
|
: (char *) malloc (msgctxt_len + msgid_len));
|
||||||
|
if (msg_ctxt_id != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
|
||||||
|
msg_ctxt_id[msgctxt_len - 1] = '\004';
|
||||||
|
memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
|
||||||
|
translation = dcgettext (domain, msg_ctxt_id, category);
|
||||||
|
#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
|
||||||
|
if (msg_ctxt_id != buf)
|
||||||
|
free (msg_ctxt_id);
|
||||||
|
#endif
|
||||||
|
if (translation != msg_ctxt_id)
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
return msgid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
|
||||||
|
dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
|
||||||
|
#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
|
||||||
|
dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static const char *
|
||||||
|
dcnpgettext_expr (const char *domain,
|
||||||
|
const char *msgctxt, const char *msgid,
|
||||||
|
const char *msgid_plural, unsigned long int n,
|
||||||
|
int category)
|
||||||
|
{
|
||||||
|
size_t msgctxt_len = strlen (msgctxt) + 1;
|
||||||
|
size_t msgid_len = strlen (msgid) + 1;
|
||||||
|
const char *translation;
|
||||||
|
#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
|
||||||
|
char msg_ctxt_id[msgctxt_len + msgid_len];
|
||||||
|
#else
|
||||||
|
char buf[1024];
|
||||||
|
char *msg_ctxt_id =
|
||||||
|
(msgctxt_len + msgid_len <= sizeof (buf)
|
||||||
|
? buf
|
||||||
|
: (char *) malloc (msgctxt_len + msgid_len));
|
||||||
|
if (msg_ctxt_id != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
|
||||||
|
msg_ctxt_id[msgctxt_len - 1] = '\004';
|
||||||
|
memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
|
||||||
|
translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
|
||||||
|
#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
|
||||||
|
if (msg_ctxt_id != buf)
|
||||||
|
free (msg_ctxt_id);
|
||||||
|
#endif
|
||||||
|
if (!(translation == msg_ctxt_id || translation == msgid_plural))
|
||||||
|
return translation;
|
||||||
|
}
|
||||||
|
return (n == 1 ? msgid : msgid_plural);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _LIBGETTEXT_H */
|
238
libgnu/inet_ntop.c
Normal file
238
libgnu/inet_ntop.c
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
|
||||||
|
|
||||||
|
Copyright (C) 2005, 2006 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 "inet_ntop.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef EAFNOSUPPORT
|
||||||
|
# define EAFNOSUPPORT EINVAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
42
libgnu/inet_ntop.h
Normal file
42
libgnu/inet_ntop.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* Convert internet address from internal to printable, presentable format.
|
||||||
|
Copyright (C) 2005, 2006 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
/* 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>. */
|
||||||
|
|
||||||
|
#if !HAVE_DECL_INET_NTOP
|
||||||
|
extern const char *inet_ntop (int af, const void *restrict src,
|
||||||
|
char *restrict dst, socklen_t cnt);
|
||||||
|
#endif
|
28
libgnu/link-warning.h
Normal file
28
libgnu/link-warning.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* GL_LINK_WARNING("literal string") arranges to emit the literal string as
|
||||||
|
a linker warning on most glibc systems.
|
||||||
|
We use a linker warning rather than a preprocessor warning, because
|
||||||
|
#warning cannot be used inside macros. */
|
||||||
|
#ifndef GL_LINK_WARNING
|
||||||
|
/* This works on platforms with GNU ld and ELF object format.
|
||||||
|
Testing __GLIBC__ is sufficient for asserting that GNU ld is in use.
|
||||||
|
Testing __ELF__ guarantees the ELF object format.
|
||||||
|
Testing __GNUC__ is necessary for the compound expression syntax. */
|
||||||
|
# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__
|
||||||
|
# define GL_LINK_WARNING(message) \
|
||||||
|
GL_LINK_WARNING1 (__FILE__, __LINE__, message)
|
||||||
|
# define GL_LINK_WARNING1(file, line, message) \
|
||||||
|
GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */
|
||||||
|
# define GL_LINK_WARNING2(file, line, message) \
|
||||||
|
GL_LINK_WARNING3 (file ":" #line ": warning: " message)
|
||||||
|
# define GL_LINK_WARNING3(message) \
|
||||||
|
({ static const char warning[sizeof (message)] \
|
||||||
|
__attribute__ ((__unused__, \
|
||||||
|
__section__ (".gnu.warning"), \
|
||||||
|
__aligned__ (1))) \
|
||||||
|
= message "\n"; \
|
||||||
|
(void)0; \
|
||||||
|
})
|
||||||
|
# else
|
||||||
|
# define GL_LINK_WARNING(message) ((void) 0)
|
||||||
|
# endif
|
||||||
|
#endif
|
49
libgnu/m4/absolute-header.m4
Normal file
49
libgnu/m4/absolute-header.m4
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# absolute-header.m4 serial 7
|
||||||
|
dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Derek Price.
|
||||||
|
|
||||||
|
# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
|
||||||
|
# ---------------------------------------
|
||||||
|
# Find the absolute name of a header file, assuming the header exists.
|
||||||
|
# If the header were sys/inttypes.h, this macro would define
|
||||||
|
# ABSOLUTE_SYS_INTTYPES_H to the `""' quoted absolute name of sys/inttypes.h
|
||||||
|
# in config.h
|
||||||
|
# (e.g. `#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
|
||||||
|
# The three "///" are to pacify Sun C 5.8, which otherwise would say
|
||||||
|
# "warning: #include of /usr/include/... may be non-portable".
|
||||||
|
# Use `""', not `<>', so that the /// cannot be confused with a C99 comment.
|
||||||
|
AC_DEFUN([gl_ABSOLUTE_HEADER],
|
||||||
|
[AC_LANG_PREPROC_REQUIRE()dnl
|
||||||
|
AC_FOREACH([gl_HEADER_NAME], [$1],
|
||||||
|
[AS_VAR_PUSHDEF([gl_absolute_header],
|
||||||
|
[gl_cv_absolute_]m4_quote(m4_defn([gl_HEADER_NAME])))dnl
|
||||||
|
AC_CACHE_CHECK([absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>],
|
||||||
|
m4_quote(m4_defn([gl_absolute_header])),
|
||||||
|
[AS_VAR_PUSHDEF([ac_header_exists],
|
||||||
|
[ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME])))dnl
|
||||||
|
AC_CHECK_HEADERS_ONCE(m4_quote(m4_defn([gl_HEADER_NAME])))dnl
|
||||||
|
if test AS_VAR_GET(ac_header_exists) = yes; then
|
||||||
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]])])
|
||||||
|
dnl eval is necessary to expand ac_cpp.
|
||||||
|
dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell.
|
||||||
|
AS_VAR_SET(gl_absolute_header,
|
||||||
|
[`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
|
||||||
|
sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
|
||||||
|
s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
|
||||||
|
s#^/[^/]#//&#
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}'`])
|
||||||
|
fi
|
||||||
|
AS_VAR_POPDEF([ac_header_exists])dnl
|
||||||
|
])dnl
|
||||||
|
AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_quote(m4_defn([gl_HEADER_NAME]))),
|
||||||
|
["AS_VAR_GET(gl_absolute_header)"],
|
||||||
|
[Define this to an absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>.])
|
||||||
|
AS_VAR_POPDEF([gl_absolute_header])dnl
|
||||||
|
])dnl
|
||||||
|
])# gl_ABSOLUTE_HEADER
|
50
libgnu/m4/alloca.m4
Normal file
50
libgnu/m4/alloca.m4
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# alloca.m4 serial 7
|
||||||
|
dnl Copyright (C) 2002-2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_ALLOCA],
|
||||||
|
[
|
||||||
|
dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
|
||||||
|
AC_REQUIRE([AC_PROG_CPP])
|
||||||
|
AC_REQUIRE([AC_PROG_EGREP])
|
||||||
|
|
||||||
|
AC_REQUIRE([AC_FUNC_ALLOCA])
|
||||||
|
if test $ac_cv_func_alloca_works = no; then
|
||||||
|
gl_PREREQ_ALLOCA
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define an additional variable used in the Makefile substitution.
|
||||||
|
if test $ac_cv_working_alloca_h = yes; then
|
||||||
|
AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
|
||||||
|
AC_EGREP_CPP([Need own alloca], [
|
||||||
|
#if defined __GNUC__ || defined _AIX || defined _MSC_VER
|
||||||
|
Need own alloca
|
||||||
|
#endif
|
||||||
|
], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
|
||||||
|
])
|
||||||
|
if test $gl_cv_rpl_alloca = yes; then
|
||||||
|
dnl OK, alloca can be implemented through a compiler built-in.
|
||||||
|
AC_DEFINE([HAVE_ALLOCA], 1,
|
||||||
|
[Define to 1 if you have 'alloca' after including <alloca.h>,
|
||||||
|
a header that may be supplied by this distribution.])
|
||||||
|
ALLOCA_H=alloca.h
|
||||||
|
else
|
||||||
|
dnl alloca exists as a library function, i.e. it is slow and probably
|
||||||
|
dnl a memory leak. Don't define HAVE_ALLOCA in this case.
|
||||||
|
ALLOCA_H=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ALLOCA_H=alloca.h
|
||||||
|
fi
|
||||||
|
AC_SUBST([ALLOCA_H])
|
||||||
|
|
||||||
|
AC_DEFINE(HAVE_ALLOCA_H, 1,
|
||||||
|
[Define HAVE_ALLOCA_H for backward compatibility with older code
|
||||||
|
that includes <alloca.h> only if HAVE_ALLOCA_H is defined.])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/alloca.c.
|
||||||
|
# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
|
||||||
|
AC_DEFUN([gl_PREREQ_ALLOCA], [:])
|
18
libgnu/m4/arpa_inet_h.m4
Normal file
18
libgnu/m4/arpa_inet_h.m4
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# arpa_inet_h.m4 serial 1
|
||||||
|
dnl Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl Written by Simon Josefsson
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_ARPA_INET],
|
||||||
|
[
|
||||||
|
AC_CHECK_HEADERS_ONCE([arpa/inet.h])
|
||||||
|
if test $ac_cv_header_arpa_inet_h = yes; then
|
||||||
|
ARPA_INET_H=''
|
||||||
|
else
|
||||||
|
ARPA_INET_H='arpa/inet.h'
|
||||||
|
fi
|
||||||
|
AC_SUBST(ARPA_INET_H)
|
||||||
|
])
|
70
libgnu/m4/eoverflow.m4
Normal file
70
libgnu/m4/eoverflow.m4
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# eoverflow.m4 serial 2
|
||||||
|
dnl Copyright (C) 2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
|
||||||
|
# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
|
||||||
|
# POSIX. But some systems (like AIX 3) don't define it, and some systems
|
||||||
|
# (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.
|
||||||
|
|
||||||
|
# Define EOVERFLOW as a C macro and as a substituted macro in such a way that
|
||||||
|
# 1. on all systems, after inclusion of <errno.h>, EOVERFLOW is usable,
|
||||||
|
# 2. on systems where EOVERFLOW is defined elsewhere, we use the same numeric
|
||||||
|
# value.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_EOVERFLOW],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_PROG_CC])dnl
|
||||||
|
|
||||||
|
AC_CACHE_CHECK([for EOVERFLOW], ac_cv_decl_EOVERFLOW, [
|
||||||
|
AC_EGREP_CPP(yes,[
|
||||||
|
#include <errno.h>
|
||||||
|
#ifdef EOVERFLOW
|
||||||
|
yes
|
||||||
|
#endif
|
||||||
|
], have_eoverflow=1)
|
||||||
|
if test -n "$have_eoverflow"; then
|
||||||
|
dnl EOVERFLOW exists in <errno.h>. Don't need to define EOVERFLOW ourselves.
|
||||||
|
ac_cv_decl_EOVERFLOW=yes
|
||||||
|
else
|
||||||
|
AC_EGREP_CPP(yes,[
|
||||||
|
#define _XOPEN_SOURCE_EXTENDED 1
|
||||||
|
#include <errno.h>
|
||||||
|
#ifdef EOVERFLOW
|
||||||
|
yes
|
||||||
|
#endif
|
||||||
|
], have_eoverflow=1)
|
||||||
|
if test -n "$have_eoverflow"; then
|
||||||
|
dnl EOVERFLOW exists but is hidden.
|
||||||
|
dnl Define it to the same value.
|
||||||
|
AC_COMPUTE_INT([ac_cv_decl_EOVERFLOW], [EOVERFLOW], [
|
||||||
|
#define _XOPEN_SOURCE_EXTENDED 1
|
||||||
|
#include <errno.h>
|
||||||
|
/* The following two lines are a workaround against an autoconf-2.52 bug. */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
])
|
||||||
|
else
|
||||||
|
dnl EOVERFLOW isn't defined by the system. Define EOVERFLOW ourselves, but
|
||||||
|
dnl don't define it as EINVAL, because snprintf() callers want to
|
||||||
|
dnl distinguish EINVAL and EOVERFLOW.
|
||||||
|
ac_cv_decl_EOVERFLOW=E2BIG
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
if test "$ac_cv_decl_EOVERFLOW" != yes; then
|
||||||
|
AC_DEFINE_UNQUOTED([EOVERFLOW], [$ac_cv_decl_EOVERFLOW],
|
||||||
|
[Define as good substitute value for EOVERFLOW.])
|
||||||
|
EOVERFLOW="$ac_cv_decl_EOVERFLOW"
|
||||||
|
AC_SUBST(EOVERFLOW)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
|
||||||
|
dnl Remove this when we can assume autoconf >= 2.61.
|
||||||
|
m4_ifdef([AC_COMPUTE_INT], [], [
|
||||||
|
AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
|
||||||
|
])
|
82
libgnu/m4/extensions.m4
Normal file
82
libgnu/m4/extensions.m4
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# serial 5 -*- Autoconf -*-
|
||||||
|
# Enable extensions on systems that normally disable them.
|
||||||
|
|
||||||
|
# Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
|
||||||
|
# Autoconf. Perhaps we can remove this once we can assume Autoconf
|
||||||
|
# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
|
||||||
|
# enough in this area it's likely we'll need to redefine
|
||||||
|
# AC_USE_SYSTEM_EXTENSIONS for quite some time.
|
||||||
|
|
||||||
|
# AC_USE_SYSTEM_EXTENSIONS
|
||||||
|
# ------------------------
|
||||||
|
# Enable extensions on systems that normally disable them,
|
||||||
|
# typically due to standards-conformance issues.
|
||||||
|
# Remember that #undef in AH_VERBATIM gets replaced with #define by
|
||||||
|
# AC_DEFINE. The goal here is to define all known feature-enabling
|
||||||
|
# macros, then, if reports of conflicts are made, disable macros that
|
||||||
|
# cause problems on some platforms (such as __EXTENSIONS__).
|
||||||
|
AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS],
|
||||||
|
[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
|
||||||
|
AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
|
||||||
|
|
||||||
|
AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
|
||||||
|
if test "$MINIX" = yes; then
|
||||||
|
AC_DEFINE([_POSIX_SOURCE], [1],
|
||||||
|
[Define to 1 if you need to in order for `stat' and other
|
||||||
|
things to work.])
|
||||||
|
AC_DEFINE([_POSIX_1_SOURCE], [2],
|
||||||
|
[Define to 2 if the system does not provide POSIX.1 features
|
||||||
|
except with this defined.])
|
||||||
|
AC_DEFINE([_MINIX], [1],
|
||||||
|
[Define to 1 if on MINIX.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AH_VERBATIM([__EXTENSIONS__],
|
||||||
|
[/* Enable extensions on AIX 3, Interix. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
# undef _ALL_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable GNU extensions on systems that have them. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# undef _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable threading extensions on Solaris. */
|
||||||
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
# undef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
#endif
|
||||||
|
/* Enable extensions on HP NonStop. */
|
||||||
|
#ifndef _TANDEM_SOURCE
|
||||||
|
# undef _TANDEM_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable general extensions on Solaris. */
|
||||||
|
#ifndef __EXTENSIONS__
|
||||||
|
# undef __EXTENSIONS__
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
|
||||||
|
[ac_cv_safe_to_define___extensions__],
|
||||||
|
[AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([
|
||||||
|
# define __EXTENSIONS__ 1
|
||||||
|
AC_INCLUDES_DEFAULT])],
|
||||||
|
[ac_cv_safe_to_define___extensions__=yes],
|
||||||
|
[ac_cv_safe_to_define___extensions__=no])])
|
||||||
|
test $ac_cv_safe_to_define___extensions__ = yes &&
|
||||||
|
AC_DEFINE([__EXTENSIONS__])
|
||||||
|
AC_DEFINE([_ALL_SOURCE])
|
||||||
|
AC_DEFINE([_GNU_SOURCE])
|
||||||
|
AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
|
||||||
|
AC_DEFINE([_TANDEM_SOURCE])
|
||||||
|
])# AC_USE_SYSTEM_EXTENSIONS
|
||||||
|
|
||||||
|
# gl_USE_SYSTEM_EXTENSIONS
|
||||||
|
# ------------------------
|
||||||
|
# Enable extensions on systems that normally disable them,
|
||||||
|
# typically due to standards-conformance issues.
|
||||||
|
AC_DEFUN([gl_USE_SYSTEM_EXTENSIONS],
|
||||||
|
[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])])
|
19
libgnu/m4/float_h.m4
Normal file
19
libgnu/m4/float_h.m4
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# float_h.m4 serial 2
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FLOAT_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
FLOAT_H=
|
||||||
|
case "$host_os" in
|
||||||
|
beos*)
|
||||||
|
FLOAT_H=float.h
|
||||||
|
gl_CHECK_NEXT_HEADERS([float.h])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_SUBST([FLOAT_H])
|
||||||
|
])
|
113
libgnu/m4/getaddrinfo.m4
Normal file
113
libgnu/m4/getaddrinfo.m4
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
# getaddrinfo.m4 serial 13
|
||||||
|
dnl Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_GETADDRINFO],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H
|
||||||
|
AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo])
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS(getaddrinfo, [nsl socket])
|
||||||
|
AC_CHECK_FUNCS(getaddrinfo,, [
|
||||||
|
AC_CACHE_CHECK(for getaddrinfo in ws2tcpip.h and -lws2_32,
|
||||||
|
gl_cv_w32_getaddrinfo, [
|
||||||
|
gl_cv_w32_getaddrinfo=no
|
||||||
|
am_save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS -lws2_32"
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
], [getaddrinfo(0, 0, 0, 0);], gl_cv_w32_getaddrinfo=yes)
|
||||||
|
LIBS="$am_save_LIBS"])
|
||||||
|
if test "$gl_cv_w32_getaddrinfo" = "yes"; then
|
||||||
|
LIBS="$LIBS -lws2_32"
|
||||||
|
else
|
||||||
|
AC_LIBOBJ(getaddrinfo)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# We can't use AC_REPLACE_FUNCS here because gai_strerror may be an
|
||||||
|
# inline function declared in ws2tcpip.h, so we need to get that
|
||||||
|
# header included somehow.
|
||||||
|
AC_CHECK_HEADERS_ONCE(netdb.h)
|
||||||
|
AC_CACHE_CHECK([for gai_strerror (possibly via ws2tcpip.h)],
|
||||||
|
gl_cv_func_gai_strerror, [
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
], [gai_strerror (0);],
|
||||||
|
[gl_cv_func_gai_strerror=yes],
|
||||||
|
[gl_cv_func_gai_strerror=no])])
|
||||||
|
if test $gl_cv_func_gai_strerror = no; then
|
||||||
|
AC_LIBOBJ(gai_strerror)
|
||||||
|
fi
|
||||||
|
|
||||||
|
gl_PREREQ_GETADDRINFO
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/getaddrinfo.h and lib/getaddrinfo.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_GETADDRINFO], [
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H
|
||||||
|
AC_SEARCH_LIBS(gethostbyname, [inet nsl])
|
||||||
|
AC_SEARCH_LIBS(getservbyname, [inet nsl socket xnet])
|
||||||
|
AC_CHECK_FUNCS(gethostbyname,, [
|
||||||
|
AC_CACHE_CHECK(for gethostbyname in winsock2.h and -lws2_32,
|
||||||
|
gl_cv_w32_gethostbyname, [
|
||||||
|
gl_cv_w32_gethostbyname=no
|
||||||
|
am_save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS -lws2_32"
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
], [gethostbyname(0);], gl_cv_w32_gethostbyname=yes)
|
||||||
|
LIBS="$am_save_LIBS"])
|
||||||
|
if test "$gl_cv_w32_gethostbyname" = "yes"; then
|
||||||
|
LIBS="$LIBS -lws2_32"
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_REQUIRE([AC_C_RESTRICT])
|
||||||
|
AC_REQUIRE([gl_SOCKET_FAMILIES])
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
|
||||||
|
AC_REQUIRE([AC_C_INLINE])
|
||||||
|
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
|
||||||
|
AC_CHECK_HEADERS_ONCE(netinet/in.h netdb.h)
|
||||||
|
AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, gai_strerror, getnameinfo],,,[
|
||||||
|
/* sys/types.h is not needed according to POSIX, but the
|
||||||
|
sys/socket.h in i386-unknown-freebsd4.10 and
|
||||||
|
powerpc-apple-darwin5.5 required it. */
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
AC_CHECK_TYPES([struct addrinfo],,,[
|
||||||
|
#include <sys/types.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WS2TCPIP_H
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
])
|
||||||
|
])
|
32
libgnu/m4/gnulib-cache.m4
Normal file
32
libgnu/m4/gnulib-cache.m4
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software, distributed under the terms of the GNU
|
||||||
|
# General Public License. As a special exception to the GNU General
|
||||||
|
# Public License, this file may be distributed as part of a program
|
||||||
|
# that contains a configuration script generated by Autoconf, under
|
||||||
|
# the same distribution terms as the rest of that program.
|
||||||
|
#
|
||||||
|
# Generated by gnulib-tool.
|
||||||
|
#
|
||||||
|
# This file represents the specification of how gnulib-tool is used.
|
||||||
|
# It acts as a cache: It is written and read by gnulib-tool.
|
||||||
|
# In projects using CVS, this file is meant to be stored in CVS,
|
||||||
|
# like the configure.ac and various Makefile.am files.
|
||||||
|
|
||||||
|
|
||||||
|
# Specification in the form of a command-line invocation:
|
||||||
|
# gnulib-tool --import --dir=. --lib=libgnu --source-base=. --m4-base=m4 --doc-base=doc --aux-dir=. --no-libtool --macro-prefix=gl getaddrinfo stdio
|
||||||
|
|
||||||
|
# Specification in the form of a few gnulib-tool.m4 macro invocations:
|
||||||
|
gl_LOCAL_DIR([])
|
||||||
|
gl_MODULES([getaddrinfo stdio])
|
||||||
|
gl_AVOID([])
|
||||||
|
gl_SOURCE_BASE([.])
|
||||||
|
gl_M4_BASE([m4])
|
||||||
|
gl_PO_BASE([])
|
||||||
|
gl_DOC_BASE([doc])
|
||||||
|
gl_TESTS_BASE([tests])
|
||||||
|
gl_LIB([libgnu])
|
||||||
|
gl_MAKEFILE_NAME([])
|
||||||
|
gl_MACRO_PREFIX([gl])
|
||||||
|
gl_PO_DOMAIN([])
|
22
libgnu/m4/gnulib-common.m4
Normal file
22
libgnu/m4/gnulib-common.m4
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# gnulib-common.m4 serial 2
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# gl_MODULE_INDICATOR([modulename])
|
||||||
|
# defines a C macro indicating the presence of the given module.
|
||||||
|
AC_DEFUN([gl_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
|
||||||
|
[Define to 1 when using the gnulib module ]$1[.])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_PROG_MKDIR_P
|
||||||
|
# is a backport of autoconf-2.60's AC_PROG_MKDIR_P.
|
||||||
|
# Remove this macro when we can assume autoconf >= 2.60.
|
||||||
|
m4_ifdef([AC_PROG_MKDIR_P], [], [
|
||||||
|
AC_DEFUN([AC_PROG_MKDIR_P],
|
||||||
|
[AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
|
||||||
|
MKDIR_P='$(mkdir_p)'
|
||||||
|
AC_SUBST([MKDIR_P])])])
|
180
libgnu/m4/gnulib-comp.m4
Normal file
180
libgnu/m4/gnulib-comp.m4
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
# DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||||
|
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software, distributed under the terms of the GNU
|
||||||
|
# General Public License. As a special exception to the GNU General
|
||||||
|
# Public License, this file may be distributed as part of a program
|
||||||
|
# that contains a configuration script generated by Autoconf, under
|
||||||
|
# the same distribution terms as the rest of that program.
|
||||||
|
#
|
||||||
|
# Generated by gnulib-tool.
|
||||||
|
#
|
||||||
|
# This file represents the compiled summary of the specification in
|
||||||
|
# gnulib-cache.m4. It lists the computed macro invocations that need
|
||||||
|
# to be invoked from configure.ac.
|
||||||
|
# In projects using CVS, this file can be treated like other built files.
|
||||||
|
|
||||||
|
|
||||||
|
# This macro should be invoked from ./configure.ac, in the section
|
||||||
|
# "Checks for programs", right after AC_PROG_CC, and certainly before
|
||||||
|
# any checks for libraries, header files, types and library functions.
|
||||||
|
AC_DEFUN([gl_EARLY],
|
||||||
|
[
|
||||||
|
m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
|
||||||
|
m4_pattern_allow([^gl_ES$])dnl a valid locale name
|
||||||
|
m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
|
||||||
|
m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
|
||||||
|
AC_REQUIRE([AC_PROG_RANLIB])
|
||||||
|
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
|
||||||
|
])
|
||||||
|
|
||||||
|
# This macro should be invoked from ./configure.ac, in the section
|
||||||
|
# "Check for header files, types and library functions".
|
||||||
|
AC_DEFUN([gl_INIT],
|
||||||
|
[
|
||||||
|
m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
|
||||||
|
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
|
||||||
|
m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
|
||||||
|
AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
|
||||||
|
gl_cond_libtool=false
|
||||||
|
gl_libdeps=
|
||||||
|
gl_ltlibdeps=
|
||||||
|
gl_source_base='.'
|
||||||
|
gl_FUNC_ALLOCA
|
||||||
|
gl_HEADER_ARPA_INET
|
||||||
|
AC_PROG_MKDIR_P
|
||||||
|
gl_FLOAT_H
|
||||||
|
gl_GETADDRINFO
|
||||||
|
AC_SUBST([LIBINTL])
|
||||||
|
AC_SUBST([LTLIBINTL])
|
||||||
|
gl_INET_NTOP
|
||||||
|
gl_FUNC_MALLOC_POSIX
|
||||||
|
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
|
||||||
|
gl_HEADER_NETINET_IN
|
||||||
|
AC_PROG_MKDIR_P
|
||||||
|
gl_SIZE_MAX
|
||||||
|
gl_FUNC_SNPRINTF
|
||||||
|
gl_STDIO_MODULE_INDICATOR([snprintf])
|
||||||
|
gl_TYPE_SOCKLEN_T
|
||||||
|
AM_STDBOOL_H
|
||||||
|
gl_STDINT_H
|
||||||
|
gl_STDIO_H
|
||||||
|
gl_STDLIB_H
|
||||||
|
gl_FUNC_STRDUP
|
||||||
|
gl_STRING_MODULE_INDICATOR([strdup])
|
||||||
|
gl_HEADER_STRING_H
|
||||||
|
gl_HEADER_SYS_SOCKET
|
||||||
|
AC_PROG_MKDIR_P
|
||||||
|
gl_UNISTD_H
|
||||||
|
gl_FUNC_VASNPRINTF
|
||||||
|
gl_WCHAR_H
|
||||||
|
gl_XSIZE
|
||||||
|
LIBGNU_LIBDEPS="$gl_libdeps"
|
||||||
|
AC_SUBST([LIBGNU_LIBDEPS])
|
||||||
|
LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
|
||||||
|
AC_SUBST([LIBGNU_LTLIBDEPS])
|
||||||
|
m4_popdef([AC_LIBSOURCES])
|
||||||
|
m4_popdef([AC_REPLACE_FUNCS])
|
||||||
|
m4_popdef([AC_LIBOBJ])
|
||||||
|
AC_CONFIG_COMMANDS_PRE([
|
||||||
|
gl_libobjs=
|
||||||
|
gl_ltlibobjs=
|
||||||
|
if test -n "$gl_LIBOBJS"; then
|
||||||
|
# Remove the extension.
|
||||||
|
sed_drop_objext='s/\.o$//;s/\.obj$//'
|
||||||
|
for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
|
||||||
|
gl_libobjs="$gl_libobjs $i.$ac_objext"
|
||||||
|
gl_ltlibobjs="$gl_ltlibobjs $i.lo"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
|
||||||
|
AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Like AC_LIBOBJ, except that the module name goes
|
||||||
|
# into gl_LIBOBJS instead of into LIBOBJS.
|
||||||
|
AC_DEFUN([gl_LIBOBJ],
|
||||||
|
[gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"])
|
||||||
|
|
||||||
|
# Like AC_REPLACE_FUNCS, except that the module name goes
|
||||||
|
# into gl_LIBOBJS instead of into LIBOBJS.
|
||||||
|
AC_DEFUN([gl_REPLACE_FUNCS],
|
||||||
|
[AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])])
|
||||||
|
|
||||||
|
# Like AC_LIBSOURCES, except that it does nothing.
|
||||||
|
# We rely on EXTRA_lib..._SOURCES instead.
|
||||||
|
AC_DEFUN([gl_LIBSOURCES],
|
||||||
|
[])
|
||||||
|
|
||||||
|
# This macro records the list of files which have been installed by
|
||||||
|
# gnulib-tool and may be removed by future gnulib-tool invocations.
|
||||||
|
AC_DEFUN([gl_FILE_LIST], [
|
||||||
|
build-aux/link-warning.h
|
||||||
|
lib/alloca_.h
|
||||||
|
lib/asnprintf.c
|
||||||
|
lib/dummy.c
|
||||||
|
lib/float+.h
|
||||||
|
lib/float_.h
|
||||||
|
lib/gai_strerror.c
|
||||||
|
lib/getaddrinfo.c
|
||||||
|
lib/getaddrinfo.h
|
||||||
|
lib/gettext.h
|
||||||
|
lib/inet_ntop.c
|
||||||
|
lib/inet_ntop.h
|
||||||
|
lib/malloc.c
|
||||||
|
lib/netinet_in_.h
|
||||||
|
lib/printf-args.c
|
||||||
|
lib/printf-args.h
|
||||||
|
lib/printf-parse.c
|
||||||
|
lib/printf-parse.h
|
||||||
|
lib/size_max.h
|
||||||
|
lib/snprintf.c
|
||||||
|
lib/stdbool_.h
|
||||||
|
lib/stdint_.h
|
||||||
|
lib/stdio_.h
|
||||||
|
lib/stdlib_.h
|
||||||
|
lib/strdup.c
|
||||||
|
lib/string_.h
|
||||||
|
lib/sys_socket_.h
|
||||||
|
lib/unistd_.h
|
||||||
|
lib/vasnprintf.c
|
||||||
|
lib/vasnprintf.h
|
||||||
|
lib/wchar_.h
|
||||||
|
lib/xsize.h
|
||||||
|
m4/absolute-header.m4
|
||||||
|
m4/alloca.m4
|
||||||
|
m4/arpa_inet_h.m4
|
||||||
|
m4/eoverflow.m4
|
||||||
|
m4/extensions.m4
|
||||||
|
m4/float_h.m4
|
||||||
|
m4/getaddrinfo.m4
|
||||||
|
m4/gnulib-common.m4
|
||||||
|
m4/include_next.m4
|
||||||
|
m4/inet_ntop.m4
|
||||||
|
m4/intmax_t.m4
|
||||||
|
m4/inttypes_h.m4
|
||||||
|
m4/longlong.m4
|
||||||
|
m4/malloc.m4
|
||||||
|
m4/netinet_in_h.m4
|
||||||
|
m4/onceonly_2_57.m4
|
||||||
|
m4/size_max.m4
|
||||||
|
m4/snprintf.m4
|
||||||
|
m4/socklen.m4
|
||||||
|
m4/sockpfaf.m4
|
||||||
|
m4/stdbool.m4
|
||||||
|
m4/stdint.m4
|
||||||
|
m4/stdint_h.m4
|
||||||
|
m4/stdio_h.m4
|
||||||
|
m4/stdlib_h.m4
|
||||||
|
m4/strdup.m4
|
||||||
|
m4/string_h.m4
|
||||||
|
m4/sys_socket_h.m4
|
||||||
|
m4/ulonglong.m4
|
||||||
|
m4/unistd_h.m4
|
||||||
|
m4/vasnprintf.m4
|
||||||
|
m4/wchar.m4
|
||||||
|
m4/wchar_t.m4
|
||||||
|
m4/wint_t.m4
|
||||||
|
m4/xsize.m4
|
||||||
|
])
|
33
libgnu/m4/gnulib-tool.m4
Normal file
33
libgnu/m4/gnulib-tool.m4
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# gnulib-tool.m4 serial 1
|
||||||
|
dnl Copyright (C) 2004-2005 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl The following macros need not be invoked explicitly.
|
||||||
|
dnl Invoking them does nothing except to declare default arguments
|
||||||
|
dnl for "gnulib-tool --import".
|
||||||
|
|
||||||
|
dnl Usage: gl_MODULES([module1 module2 ...])
|
||||||
|
AC_DEFUN([gl_MODULES], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_AVOID([module1 module2 ...])
|
||||||
|
AC_DEFUN([gl_AVOID], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_SOURCE_BASE([DIR])
|
||||||
|
AC_DEFUN([gl_SOURCE_BASE], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_M4_BASE([DIR])
|
||||||
|
AC_DEFUN([gl_M4_BASE], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LIB([LIBNAME])
|
||||||
|
AC_DEFUN([gl_LIB], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LGPL
|
||||||
|
AC_DEFUN([gl_LGPL], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_LIBTOOL
|
||||||
|
AC_DEFUN([gl_LIBTOOL], [])
|
||||||
|
|
||||||
|
dnl Usage: gl_MACRO_PREFIX([PREFIX])
|
||||||
|
AC_DEFUN([gl_MACRO_PREFIX], [])
|
107
libgnu/m4/include_next.m4
Normal file
107
libgnu/m4/include_next.m4
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
# include_next.m4 serial 4
|
||||||
|
dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert and Derek Price.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_INCLUDE_NEXT],
|
||||||
|
[
|
||||||
|
AC_LANG_PREPROC_REQUIRE()
|
||||||
|
AC_CACHE_CHECK([whether the preprocessor supports include_next],
|
||||||
|
[gl_cv_have_include_next],
|
||||||
|
[rm -rf conftestd1 conftestd2
|
||||||
|
mkdir conftestd1 conftestd2
|
||||||
|
cat <<EOF > conftestd1/conftest.h
|
||||||
|
#define DEFINED_IN_CONFTESTD1
|
||||||
|
#include_next <conftest.h>
|
||||||
|
#ifdef DEFINED_IN_CONFTESTD2
|
||||||
|
int foo;
|
||||||
|
#else
|
||||||
|
#error "include_next doesn't work"
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
cat <<EOF > conftestd2/conftest.h
|
||||||
|
#ifndef DEFINED_IN_CONFTESTD1
|
||||||
|
#error "include_next test doesn't work"
|
||||||
|
#endif
|
||||||
|
#define DEFINED_IN_CONFTESTD2
|
||||||
|
EOF
|
||||||
|
save_CPPFLAGS="$CPPFLAGS"
|
||||||
|
CPPFLAGS="$CPPFLAGS -Iconftestd1 -Iconftestd2"
|
||||||
|
AC_COMPILE_IFELSE([#include <conftest.h>],
|
||||||
|
[gl_cv_have_include_next=yes],
|
||||||
|
[gl_cv_have_include_next=no])
|
||||||
|
CPPFLAGS="$save_CPPFLAGS"
|
||||||
|
rm -rf conftestd1 conftestd2
|
||||||
|
])
|
||||||
|
if test $gl_cv_have_include_next = yes; then
|
||||||
|
|
||||||
|
dnl FIXME: Remove HAVE_INCLUDE_NEXT and update everything that uses it
|
||||||
|
dnl to use @INCLUDE_NEXT@ instead.
|
||||||
|
AC_DEFINE([HAVE_INCLUDE_NEXT], 1,
|
||||||
|
[Define if your compiler supports the #include_next directive.])
|
||||||
|
|
||||||
|
INCLUDE_NEXT=include_next
|
||||||
|
else
|
||||||
|
INCLUDE_NEXT=include
|
||||||
|
fi
|
||||||
|
AC_SUBST([INCLUDE_NEXT])
|
||||||
|
])
|
||||||
|
|
||||||
|
# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
|
||||||
|
# ------------------------------------------
|
||||||
|
# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
|
||||||
|
# '<foo.h>'; otherwise define it to be
|
||||||
|
# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
|
||||||
|
# That way, a header file with the following line:
|
||||||
|
# #@INCLUDE_NEXT@ @NEXT_FOO_H@
|
||||||
|
# behaves (after sed substitution) as if it contained
|
||||||
|
# #include_next <foo.h>
|
||||||
|
# even if the compiler does not support include_next.
|
||||||
|
# The three "///" are to pacify Sun C 5.8, which otherwise would say
|
||||||
|
# "warning: #include of /usr/include/... may be non-portable".
|
||||||
|
# Use `""', not `<>', so that the /// cannot be confused with a C99 comment.
|
||||||
|
AC_DEFUN([gl_CHECK_NEXT_HEADERS],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_INCLUDE_NEXT])
|
||||||
|
AC_CHECK_HEADERS_ONCE([$1])
|
||||||
|
|
||||||
|
AC_FOREACH([gl_HEADER_NAME], [$1],
|
||||||
|
[AS_VAR_PUSHDEF([gl_next_header],
|
||||||
|
[gl_cv_next_]m4_quote(m4_defn([gl_HEADER_NAME])))
|
||||||
|
if test $gl_cv_have_include_next = yes; then
|
||||||
|
AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
|
||||||
|
else
|
||||||
|
AC_CACHE_CHECK(
|
||||||
|
[absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>],
|
||||||
|
m4_quote(m4_defn([gl_next_header])),
|
||||||
|
[AS_VAR_PUSHDEF([gl_header_exists],
|
||||||
|
[ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME])))
|
||||||
|
if test AS_VAR_GET(gl_header_exists) = yes; then
|
||||||
|
AC_LANG_CONFTEST(
|
||||||
|
[AC_LANG_SOURCE(
|
||||||
|
[[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
|
||||||
|
)])
|
||||||
|
dnl eval is necessary to expand ac_cpp.
|
||||||
|
dnl Ultrix and Pyramid sh refuse to redirect output of eval,
|
||||||
|
dnl so use subshell.
|
||||||
|
AS_VAR_SET([gl_next_header],
|
||||||
|
['"'`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
|
||||||
|
sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
|
||||||
|
s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
|
||||||
|
s#^/[^/]#//&#
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}'`'"'])
|
||||||
|
else
|
||||||
|
AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
|
||||||
|
fi
|
||||||
|
AS_VAR_POPDEF([gl_header_exists])])
|
||||||
|
fi
|
||||||
|
AC_SUBST(
|
||||||
|
AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))),
|
||||||
|
[AS_VAR_GET([gl_next_header])])
|
||||||
|
AS_VAR_POPDEF([gl_next_header])])
|
||||||
|
])
|
19
libgnu/m4/inet_ntop.m4
Normal file
19
libgnu/m4/inet_ntop.m4
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# inet_ntop.m4 serial 3
|
||||||
|
dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_INET_NTOP],
|
||||||
|
[
|
||||||
|
AC_REPLACE_FUNCS(inet_ntop)
|
||||||
|
gl_PREREQ_INET_NTOP
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/inet_ntop.h and lib/inet_ntop.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_INET_NTOP], [
|
||||||
|
AC_CHECK_HEADERS_ONCE([netinet/in.h arpa/inet.h])
|
||||||
|
AC_CHECK_DECLS([inet_ntop],,,[#include <arpa/inet.h>])
|
||||||
|
AC_REQUIRE([gl_SOCKET_FAMILIES])
|
||||||
|
AC_REQUIRE([AC_C_RESTRICT])
|
||||||
|
])
|
61
libgnu/m4/intmax_t.m4
Normal file
61
libgnu/m4/intmax_t.m4
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# intmax_t.m4 serial 5
|
||||||
|
dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
AC_PREREQ(2.13)
|
||||||
|
|
||||||
|
# Define intmax_t to 'long' or 'long long'
|
||||||
|
# if it is not already defined in <stdint.h> or <inttypes.h>.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_AC_TYPE_INTMAX_T],
|
||||||
|
[
|
||||||
|
dnl For simplicity, we assume that a header file defines 'intmax_t' if and
|
||||||
|
dnl only if it defines 'uintmax_t'.
|
||||||
|
AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
|
||||||
|
AC_REQUIRE([gl_AC_HEADER_STDINT_H])
|
||||||
|
if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
|
||||||
|
AC_REQUIRE([gl_AC_TYPE_LONG_LONG])
|
||||||
|
test $ac_cv_type_long_long = yes \
|
||||||
|
&& ac_type='long long' \
|
||||||
|
|| ac_type='long'
|
||||||
|
AC_DEFINE_UNQUOTED(intmax_t, $ac_type,
|
||||||
|
[Define to long or long long if <inttypes.h> and <stdint.h> don't define.])
|
||||||
|
else
|
||||||
|
AC_DEFINE(HAVE_INTMAX_T, 1,
|
||||||
|
[Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl An alternative would be to explicitly test for 'intmax_t'.
|
||||||
|
|
||||||
|
AC_DEFUN([gt_AC_TYPE_INTMAX_T],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
|
||||||
|
AC_REQUIRE([gl_AC_HEADER_STDINT_H])
|
||||||
|
AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
|
||||||
|
[AC_TRY_COMPILE([
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#if HAVE_STDINT_H_WITH_UINTMAX
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#if HAVE_INTTYPES_H_WITH_UINTMAX
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
], [intmax_t x = -1; return !x;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
|
||||||
|
if test $gt_cv_c_intmax_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_INTMAX_T, 1,
|
||||||
|
[Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
|
||||||
|
else
|
||||||
|
AC_REQUIRE([gl_AC_TYPE_LONG_LONG])
|
||||||
|
test $ac_cv_type_long_long = yes \
|
||||||
|
&& ac_type='long long' \
|
||||||
|
|| ac_type='long'
|
||||||
|
AC_DEFINE_UNQUOTED(intmax_t, $ac_type,
|
||||||
|
[Define to long or long long if <stdint.h> and <inttypes.h> don't define.])
|
||||||
|
fi
|
||||||
|
])
|
26
libgnu/m4/inttypes_h.m4
Normal file
26
libgnu/m4/inttypes_h.m4
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# inttypes_h.m4 serial 7
|
||||||
|
dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
|
||||||
|
# doesn't clash with <sys/types.h>, and declares uintmax_t.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
|
||||||
|
[AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>
|
||||||
|
#include <inttypes.h>],
|
||||||
|
[uintmax_t i = (uintmax_t) -1; return !i;],
|
||||||
|
gl_cv_header_inttypes_h=yes,
|
||||||
|
gl_cv_header_inttypes_h=no)])
|
||||||
|
if test $gl_cv_header_inttypes_h = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
|
||||||
|
[Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
|
||||||
|
and declares uintmax_t. ])
|
||||||
|
fi
|
||||||
|
])
|
72
libgnu/m4/longlong.m4
Normal file
72
libgnu/m4/longlong.m4
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# longlong.m4 serial 10
|
||||||
|
dnl Copyright (C) 1999-2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_LONG_LONG_INT if 'long long int' works.
|
||||||
|
# This fixes a bug in Autoconf 2.60, but can be removed once we
|
||||||
|
# assume 2.61 everywhere.
|
||||||
|
|
||||||
|
# Note: If the type 'long long int' exists but is only 32 bits large
|
||||||
|
# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
|
||||||
|
# defined. In this case you can treat 'long long int' like 'long int'.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_TYPE_LONG_LONG_INT],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
|
||||||
|
[AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[long long int ll = 9223372036854775807ll;
|
||||||
|
long long int nll = -9223372036854775807LL;
|
||||||
|
typedef int a[((-9223372036854775807LL < 0
|
||||||
|
&& 0 < 9223372036854775807ll)
|
||||||
|
? 1 : -1)];
|
||||||
|
int i = 63;]],
|
||||||
|
[[long long int llmax = 9223372036854775807ll;
|
||||||
|
return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
|
||||||
|
| (llmax / ll) | (llmax % ll));]])],
|
||||||
|
[dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
|
||||||
|
dnl If cross compiling, assume the bug isn't important, since
|
||||||
|
dnl nobody cross compiles for this platform as far as we know.
|
||||||
|
AC_RUN_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[@%:@include <limits.h>
|
||||||
|
@%:@ifndef LLONG_MAX
|
||||||
|
@%:@ define HALF \
|
||||||
|
(1LL << (sizeof (long long int) * CHAR_BIT - 2))
|
||||||
|
@%:@ define LLONG_MAX (HALF - 1 + HALF)
|
||||||
|
@%:@endif]],
|
||||||
|
[[long long int n = 1;
|
||||||
|
int i;
|
||||||
|
for (i = 0; ; i++)
|
||||||
|
{
|
||||||
|
long long int m = n << i;
|
||||||
|
if (m >> i != n)
|
||||||
|
return 1;
|
||||||
|
if (LLONG_MAX / 2 < m)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;]])],
|
||||||
|
[ac_cv_type_long_long_int=yes],
|
||||||
|
[ac_cv_type_long_long_int=no],
|
||||||
|
[ac_cv_type_long_long_int=yes])],
|
||||||
|
[ac_cv_type_long_long_int=no])])
|
||||||
|
if test $ac_cv_type_long_long_int = yes; then
|
||||||
|
AC_DEFINE([HAVE_LONG_LONG_INT], 1,
|
||||||
|
[Define to 1 if the system has the type `long long int'.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# This macro is obsolescent and should go away soon.
|
||||||
|
AC_DEFUN([gl_AC_TYPE_LONG_LONG],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
ac_cv_type_long_long=$ac_cv_type_long_long_int
|
||||||
|
if test $ac_cv_type_long_long = yes; then
|
||||||
|
AC_DEFINE(HAVE_LONG_LONG, 1,
|
||||||
|
[Define if you have the 'long long' type.])
|
||||||
|
fi
|
||||||
|
])
|
41
libgnu/m4/malloc.m4
Normal file
41
libgnu/m4/malloc.m4
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# malloc.m4 serial 8
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# gl_FUNC_MALLOC_POSIX
|
||||||
|
# --------------------
|
||||||
|
# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
|
||||||
|
# fails), and replace malloc if it is not.
|
||||||
|
AC_DEFUN([gl_FUNC_MALLOC_POSIX],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
|
||||||
|
if test $gl_cv_func_malloc_posix = yes; then
|
||||||
|
HAVE_MALLOC_POSIX=1
|
||||||
|
AC_DEFINE([HAVE_MALLOC_POSIX], 1,
|
||||||
|
[Define if the 'malloc' function is POSIX compliant.])
|
||||||
|
else
|
||||||
|
AC_LIBOBJ([malloc])
|
||||||
|
HAVE_MALLOC_POSIX=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_MALLOC_POSIX])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Test whether malloc, realloc, calloc are POSIX compliant,
|
||||||
|
# Set gl_cv_func_malloc_posix to yes or no accordingly.
|
||||||
|
AC_DEFUN([gl_CHECK_MALLOC_POSIX],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
|
||||||
|
[gl_cv_func_malloc_posix],
|
||||||
|
[
|
||||||
|
dnl It is too dangerous to try to allocate a large amount of memory:
|
||||||
|
dnl some systems go to their knees when you do that. So assume that
|
||||||
|
dnl all Unix implementations of the function are POSIX compliant.
|
||||||
|
AC_TRY_COMPILE([],
|
||||||
|
[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
|
choke me
|
||||||
|
#endif
|
||||||
|
], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no])
|
||||||
|
])
|
||||||
|
])
|
30
libgnu/m4/netinet_in_h.m4
Normal file
30
libgnu/m4/netinet_in_h.m4
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# netinet_in_h.m4 serial 3
|
||||||
|
dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_NETINET_IN],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([whether <netinet/in.h> is self-contained],
|
||||||
|
[gl_cv_header_netinet_in_h_selfcontained],
|
||||||
|
[
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <netinet/in.h>], [])],
|
||||||
|
[gl_cv_header_netinet_in_h_selfcontained=yes],
|
||||||
|
[gl_cv_header_netinet_in_h_selfcontained=no])
|
||||||
|
])
|
||||||
|
if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
|
||||||
|
NETINET_IN_H=''
|
||||||
|
else
|
||||||
|
NETINET_IN_H='netinet/in.h'
|
||||||
|
AC_CHECK_HEADERS([netinet/in.h])
|
||||||
|
gl_CHECK_NEXT_HEADERS([netinet/in.h])
|
||||||
|
if test $ac_cv_header_netinet_in_h = yes; then
|
||||||
|
HAVE_NETINET_IN_H=1
|
||||||
|
else
|
||||||
|
HAVE_NETINET_IN_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_NETINET_IN_H])
|
||||||
|
fi
|
||||||
|
AC_SUBST([NETINET_IN_H])
|
||||||
|
])
|
86
libgnu/m4/onceonly_2_57.m4
Normal file
86
libgnu/m4/onceonly_2_57.m4
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# onceonly_2_57.m4 serial 4
|
||||||
|
dnl Copyright (C) 2002-2003, 2005-2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl This file defines some "once only" variants of standard autoconf macros.
|
||||||
|
dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS
|
||||||
|
dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS
|
||||||
|
dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS
|
||||||
|
dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL
|
||||||
|
dnl The advantage is that the check for each of the headers/functions/decls
|
||||||
|
dnl will be put only once into the 'configure' file. It keeps the size of
|
||||||
|
dnl the 'configure' file down, and avoids redundant output when 'configure'
|
||||||
|
dnl is run.
|
||||||
|
dnl The drawback is that the checks cannot be conditionalized. If you write
|
||||||
|
dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
|
||||||
|
dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
|
||||||
|
dnl empty, and the check will be inserted before the body of the AC_DEFUNed
|
||||||
|
dnl function.
|
||||||
|
|
||||||
|
dnl This is like onceonly.m4, except that it uses diversions to named sections
|
||||||
|
dnl DEFAULTS and INIT_PREPARE in order to check all requested headers at once,
|
||||||
|
dnl thus reducing the size of 'configure'. Works with autoconf-2.57. The
|
||||||
|
dnl size reduction is ca. 9%.
|
||||||
|
|
||||||
|
dnl Autoconf version 2.57 or newer is recommended.
|
||||||
|
AC_PREREQ(2.57)
|
||||||
|
|
||||||
|
# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
|
||||||
|
# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
|
||||||
|
AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
|
||||||
|
:
|
||||||
|
AC_FOREACH([gl_HEADER_NAME], [$1], [
|
||||||
|
AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
|
||||||
|
[./-], [___])), [
|
||||||
|
m4_divert_text([INIT_PREPARE],
|
||||||
|
[gl_header_list="$gl_header_list gl_HEADER_NAME"])
|
||||||
|
gl_HEADERS_EXPANSION
|
||||||
|
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
|
||||||
|
[Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
|
||||||
|
])
|
||||||
|
AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
|
||||||
|
[./-], [___])))
|
||||||
|
])
|
||||||
|
])
|
||||||
|
m4_define([gl_HEADERS_EXPANSION], [
|
||||||
|
m4_divert_text([DEFAULTS], [gl_header_list=])
|
||||||
|
AC_CHECK_HEADERS([$gl_header_list])
|
||||||
|
m4_define([gl_HEADERS_EXPANSION], [])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
|
||||||
|
# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
|
||||||
|
AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
|
||||||
|
:
|
||||||
|
AC_FOREACH([gl_FUNC_NAME], [$1], [
|
||||||
|
AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
|
||||||
|
m4_divert_text([INIT_PREPARE],
|
||||||
|
[gl_func_list="$gl_func_list gl_FUNC_NAME"])
|
||||||
|
gl_FUNCS_EXPANSION
|
||||||
|
AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
|
||||||
|
[Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.])
|
||||||
|
])
|
||||||
|
AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
|
||||||
|
])
|
||||||
|
])
|
||||||
|
m4_define([gl_FUNCS_EXPANSION], [
|
||||||
|
m4_divert_text([DEFAULTS], [gl_func_list=])
|
||||||
|
AC_CHECK_FUNCS([$gl_func_list])
|
||||||
|
m4_define([gl_FUNCS_EXPANSION], [])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
|
||||||
|
# AC_CHECK_DECLS(DECL1, DECL2, ...).
|
||||||
|
AC_DEFUN([AC_CHECK_DECLS_ONCE], [
|
||||||
|
:
|
||||||
|
AC_FOREACH([gl_DECL_NAME], [$1], [
|
||||||
|
AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
|
||||||
|
AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
|
||||||
|
])
|
||||||
|
AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
|
||||||
|
])
|
||||||
|
])
|
68
libgnu/m4/size_max.m4
Normal file
68
libgnu/m4/size_max.m4
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# size_max.m4 serial 6
|
||||||
|
dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_SIZE_MAX],
|
||||||
|
[
|
||||||
|
AC_CHECK_HEADERS(stdint.h)
|
||||||
|
dnl First test whether the system already has SIZE_MAX.
|
||||||
|
AC_MSG_CHECKING([for SIZE_MAX])
|
||||||
|
AC_CACHE_VAL([gl_cv_size_max], [
|
||||||
|
gl_cv_size_max=
|
||||||
|
AC_EGREP_CPP([Found it], [
|
||||||
|
#include <limits.h>
|
||||||
|
#if HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#ifdef SIZE_MAX
|
||||||
|
Found it
|
||||||
|
#endif
|
||||||
|
], gl_cv_size_max=yes)
|
||||||
|
if test -z "$gl_cv_size_max"; then
|
||||||
|
dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
|
||||||
|
dnl than the type 'unsigned long'. Try hard to find a definition that can
|
||||||
|
dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
|
||||||
|
AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
|
||||||
|
[#include <stddef.h>
|
||||||
|
#include <limits.h>], size_t_bits_minus_1=)
|
||||||
|
AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
|
||||||
|
[#include <stddef.h>], fits_in_uint=)
|
||||||
|
if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
|
||||||
|
if test $fits_in_uint = 1; then
|
||||||
|
dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
|
||||||
|
dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
|
||||||
|
AC_TRY_COMPILE([#include <stddef.h>
|
||||||
|
extern size_t foo;
|
||||||
|
extern unsigned long foo;
|
||||||
|
], [], fits_in_uint=0)
|
||||||
|
fi
|
||||||
|
dnl We cannot use 'expr' to simplify this expression, because 'expr'
|
||||||
|
dnl works only with 'long' integers in the host environment, while we
|
||||||
|
dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
|
||||||
|
if test $fits_in_uint = 1; then
|
||||||
|
gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
|
||||||
|
else
|
||||||
|
gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dnl Shouldn't happen, but who knows...
|
||||||
|
gl_cv_size_max='((size_t)~(size_t)0)'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT([$gl_cv_size_max])
|
||||||
|
if test "$gl_cv_size_max" != yes; then
|
||||||
|
AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
|
||||||
|
[Define as the maximum value of type 'size_t', if the system doesn't define it.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
|
||||||
|
dnl Remove this when we can assume autoconf >= 2.61.
|
||||||
|
m4_ifdef([AC_COMPUTE_INT], [], [
|
||||||
|
AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
|
||||||
|
])
|
31
libgnu/m4/snprintf.m4
Normal file
31
libgnu/m4/snprintf.m4
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# snprintf.m4 serial 4
|
||||||
|
dnl Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_SNPRINTF],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
||||||
|
AC_CHECK_FUNCS([snprintf])
|
||||||
|
if test $ac_cv_func_snprintf = no; then
|
||||||
|
gl_REPLACE_SNPRINTF
|
||||||
|
fi
|
||||||
|
AC_CHECK_DECLS_ONCE([snprintf])
|
||||||
|
if test $ac_cv_have_decl_snprintf = no; then
|
||||||
|
HAVE_DECL_SNPRINTF=0
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_REPLACE_SNPRINTF],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
||||||
|
AC_LIBOBJ([snprintf])
|
||||||
|
if test $ac_cv_func_snprintf = yes; then
|
||||||
|
REPLACE_SNPRINTF=1
|
||||||
|
fi
|
||||||
|
gl_PREREQ_SNPRINTF
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/snprintf.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_SNPRINTF], [:])
|
52
libgnu/m4/socklen.m4
Normal file
52
libgnu/m4/socklen.m4
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# socklen.m4 serial 5
|
||||||
|
dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Albert Chin, Windows fixes from Simon Josefsson.
|
||||||
|
|
||||||
|
dnl Check for socklen_t: historically on BSD it is an int, and in
|
||||||
|
dnl POSIX 1g it is a type of its own, but some platforms use different
|
||||||
|
dnl types for the argument to getsockopt, getpeername, etc. So we
|
||||||
|
dnl have to test to find something that will work.
|
||||||
|
|
||||||
|
dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find
|
||||||
|
dnl it there first. That file is included by gnulib's sys_socket_.h, which
|
||||||
|
dnl all users of this module should include. Cygwin must not include
|
||||||
|
dnl ws2tcpip.h.
|
||||||
|
AC_DEFUN([gl_TYPE_SOCKLEN_T],
|
||||||
|
[AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl
|
||||||
|
AC_CHECK_TYPE([socklen_t], ,
|
||||||
|
[AC_MSG_CHECKING([for socklen_t equivalent])
|
||||||
|
AC_CACHE_VAL([gl_cv_socklen_t_equiv],
|
||||||
|
[# Systems have either "struct sockaddr *" or
|
||||||
|
# "void *" as the second argument to getpeername
|
||||||
|
gl_cv_socklen_t_equiv=
|
||||||
|
for arg2 in "struct sockaddr" void; do
|
||||||
|
for t in int size_t "unsigned int" "long int" "unsigned long int"; do
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
int getpeername (int, $arg2 *, $t *);],
|
||||||
|
[$t len;
|
||||||
|
getpeername (0, 0, &len);],
|
||||||
|
[gl_cv_socklen_t_equiv="$t"])
|
||||||
|
test "$gl_cv_socklen_t_equiv" != "" && break
|
||||||
|
done
|
||||||
|
test "$gl_cv_socklen_t_equiv" != "" && break
|
||||||
|
done
|
||||||
|
])
|
||||||
|
if test "$gl_cv_socklen_t_equiv" = ""; then
|
||||||
|
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$gl_cv_socklen_t_equiv])
|
||||||
|
AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv],
|
||||||
|
[type to use in place of socklen_t if not defined])],
|
||||||
|
[#include <sys/types.h>
|
||||||
|
#if HAVE_SYS_SOCKET_H
|
||||||
|
# include <sys/socket.h>
|
||||||
|
#elif HAVE_WS2TCPIP_H
|
||||||
|
# include <ws2tcpip.h>
|
||||||
|
#endif])])
|
58
libgnu/m4/sockpfaf.m4
Normal file
58
libgnu/m4/sockpfaf.m4
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# sockpfaf.m4 serial 5
|
||||||
|
dnl Copyright (C) 2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...)
|
||||||
|
dnl and some common address families (AF_INET, AF_INET6, ...).
|
||||||
|
dnl This test assumes that a system supports an address family if and only if
|
||||||
|
dnl it supports the corresponding protocol family.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_SOCKET_FAMILIES],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_SYS_SOCKET])
|
||||||
|
AC_CHECK_HEADERS_ONCE([netinet/in.h])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for IPv4 sockets)
|
||||||
|
AC_CACHE_VAL(gl_cv_socket_ipv4,
|
||||||
|
[AC_TRY_COMPILE([#include <sys/types.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif],
|
||||||
|
[int x = AF_INET; struct in_addr y; struct sockaddr_in z;
|
||||||
|
if (&x && &y && &z) return 0;],
|
||||||
|
gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)])
|
||||||
|
AC_MSG_RESULT($gl_cv_socket_ipv4)
|
||||||
|
if test $gl_cv_socket_ipv4 = yes; then
|
||||||
|
AC_DEFINE(HAVE_IPV4, 1, [Define to 1 if <sys/socket.h> defines AF_INET.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for IPv6 sockets)
|
||||||
|
AC_CACHE_VAL(gl_cv_socket_ipv6,
|
||||||
|
[AC_TRY_COMPILE([#include <sys/types.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif],
|
||||||
|
[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z;
|
||||||
|
if (&x && &y && &z) return 0;],
|
||||||
|
gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)])
|
||||||
|
AC_MSG_RESULT($gl_cv_socket_ipv6)
|
||||||
|
if test $gl_cv_socket_ipv6 = yes; then
|
||||||
|
AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if <sys/socket.h> defines AF_INET6.])
|
||||||
|
fi
|
||||||
|
])
|
115
libgnu/m4/stdbool.m4
Normal file
115
libgnu/m4/stdbool.m4
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# Check for stdbool.h that conforms to C99.
|
||||||
|
|
||||||
|
dnl Copyright (C) 2002-2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# Prepare for substituting <stdbool.h> if it is not supported.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_STDBOOL_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_HEADER_STDBOOL])
|
||||||
|
|
||||||
|
# Define two additional variables used in the Makefile substitution.
|
||||||
|
|
||||||
|
if test "$ac_cv_header_stdbool_h" = yes; then
|
||||||
|
STDBOOL_H=''
|
||||||
|
else
|
||||||
|
STDBOOL_H='stdbool.h'
|
||||||
|
fi
|
||||||
|
AC_SUBST([STDBOOL_H])
|
||||||
|
|
||||||
|
if test "$ac_cv_type__Bool" = yes; then
|
||||||
|
HAVE__BOOL=1
|
||||||
|
else
|
||||||
|
HAVE__BOOL=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE__BOOL])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
|
||||||
|
AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
|
||||||
|
|
||||||
|
# This macro is only needed in autoconf <= 2.59. Newer versions of autoconf
|
||||||
|
# have this macro built-in.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_HEADER_STDBOOL],
|
||||||
|
[AC_CACHE_CHECK([for stdbool.h that conforms to C99],
|
||||||
|
[ac_cv_header_stdbool_h],
|
||||||
|
[AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <stdbool.h>
|
||||||
|
#ifndef bool
|
||||||
|
"error: bool is not defined"
|
||||||
|
#endif
|
||||||
|
#ifndef false
|
||||||
|
"error: false is not defined"
|
||||||
|
#endif
|
||||||
|
#if false
|
||||||
|
"error: false is not 0"
|
||||||
|
#endif
|
||||||
|
#ifndef true
|
||||||
|
"error: true is not defined"
|
||||||
|
#endif
|
||||||
|
#if true != 1
|
||||||
|
"error: true is not 1"
|
||||||
|
#endif
|
||||||
|
#ifndef __bool_true_false_are_defined
|
||||||
|
"error: __bool_true_false_are_defined is not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct s { _Bool s: 1; _Bool t; } s;
|
||||||
|
|
||||||
|
char a[true == 1 ? 1 : -1];
|
||||||
|
char b[false == 0 ? 1 : -1];
|
||||||
|
char c[__bool_true_false_are_defined == 1 ? 1 : -1];
|
||||||
|
char d[(bool) 0.5 == true ? 1 : -1];
|
||||||
|
bool e = &s;
|
||||||
|
char f[(_Bool) 0.0 == false ? 1 : -1];
|
||||||
|
char g[true];
|
||||||
|
char h[sizeof (_Bool)];
|
||||||
|
char i[sizeof s.t];
|
||||||
|
enum { j = false, k = true, l = false * true, m = true * 256 };
|
||||||
|
_Bool n[m];
|
||||||
|
char o[sizeof n == m * sizeof n[0] ? 1 : -1];
|
||||||
|
char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
|
||||||
|
#if defined __xlc__ || defined __GNUC__
|
||||||
|
/* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
|
||||||
|
reported by James Lemley on 2005-10-05; see
|
||||||
|
http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
|
||||||
|
This test is not quite right, since xlc is allowed to
|
||||||
|
reject this program, as the initializer for xlcbug is
|
||||||
|
not one of the forms that C requires support for.
|
||||||
|
However, doing the test right would require a run-time
|
||||||
|
test, and that would make cross-compilation harder.
|
||||||
|
Let us hope that IBM fixes the xlc bug, and also adds
|
||||||
|
support for this kind of constant expression. In the
|
||||||
|
meantime, this test will reject xlc, which is OK, since
|
||||||
|
our stdbool.h substitute should suffice. We also test
|
||||||
|
this with GCC, where it should work, to detect more
|
||||||
|
quickly whether someone messes up the test in the
|
||||||
|
future. */
|
||||||
|
char digs[] = "0123456789";
|
||||||
|
int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
|
||||||
|
#endif
|
||||||
|
/* Catch a bug in an HP-UX C compiler. See
|
||||||
|
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
|
||||||
|
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
|
||||||
|
*/
|
||||||
|
_Bool q = true;
|
||||||
|
_Bool *pq = &q;
|
||||||
|
],
|
||||||
|
[
|
||||||
|
*pq |= q;
|
||||||
|
*pq |= ! q;
|
||||||
|
/* Refer to every declared value, to avoid compiler optimizations. */
|
||||||
|
return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
|
||||||
|
+ !m + !n + !o + !p + !q + !pq);
|
||||||
|
],
|
||||||
|
[ac_cv_header_stdbool_h=yes],
|
||||||
|
[ac_cv_header_stdbool_h=no])])
|
||||||
|
AC_CHECK_TYPES([_Bool])
|
||||||
|
if test $ac_cv_header_stdbool_h = yes; then
|
||||||
|
AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
|
||||||
|
fi])
|
395
libgnu/m4/stdint.m4
Normal file
395
libgnu/m4/stdint.m4
Normal file
@ -0,0 +1,395 @@
|
|||||||
|
# stdint.m4 serial 28
|
||||||
|
dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert and Bruno Haible.
|
||||||
|
dnl Test whether <stdint.h> is supported or must be substituted.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDINT_H],
|
||||||
|
[
|
||||||
|
AC_PREREQ(2.59)dnl
|
||||||
|
|
||||||
|
dnl Check for long long int and unsigned long long int.
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
if test $ac_cv_type_long_long_int = yes; then
|
||||||
|
HAVE_LONG_LONG_INT=1
|
||||||
|
else
|
||||||
|
HAVE_LONG_LONG_INT=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_LONG_LONG_INT])
|
||||||
|
AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
|
||||||
|
if test $ac_cv_type_unsigned_long_long_int = yes; then
|
||||||
|
HAVE_UNSIGNED_LONG_LONG_INT=1
|
||||||
|
else
|
||||||
|
HAVE_UNSIGNED_LONG_LONG_INT=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
|
||||||
|
|
||||||
|
dnl Check for <inttypes.h>.
|
||||||
|
dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
|
||||||
|
if test $ac_cv_header_inttypes_h = yes; then
|
||||||
|
HAVE_INTTYPES_H=1
|
||||||
|
else
|
||||||
|
HAVE_INTTYPES_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_INTTYPES_H])
|
||||||
|
|
||||||
|
dnl Check for <sys/types.h>.
|
||||||
|
dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
|
||||||
|
if test $ac_cv_header_sys_types_h = yes; then
|
||||||
|
HAVE_SYS_TYPES_H=1
|
||||||
|
else
|
||||||
|
HAVE_SYS_TYPES_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SYS_TYPES_H])
|
||||||
|
|
||||||
|
gl_CHECK_NEXT_HEADERS([stdint.h])
|
||||||
|
if test $ac_cv_header_stdint_h = yes; then
|
||||||
|
HAVE_STDINT_H=1
|
||||||
|
else
|
||||||
|
HAVE_STDINT_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_STDINT_H])
|
||||||
|
|
||||||
|
dnl Now see whether we need a substitute <stdint.h>.
|
||||||
|
if test $ac_cv_header_stdint_h = yes; then
|
||||||
|
AC_CACHE_CHECK([whether stdint.h conforms to C99],
|
||||||
|
[gl_cv_header_working_stdint_h],
|
||||||
|
[gl_cv_header_working_stdint_h=no
|
||||||
|
AC_COMPILE_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([[
|
||||||
|
#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
|
||||||
|
#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
|
||||||
|
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
|
||||||
|
#include <stdint.h>
|
||||||
|
/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */
|
||||||
|
#if !(defined WCHAR_MIN && defined WCHAR_MAX)
|
||||||
|
#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
|
||||||
|
#endif
|
||||||
|
]
|
||||||
|
gl_STDINT_INCLUDES
|
||||||
|
[
|
||||||
|
#ifdef INT8_MAX
|
||||||
|
int8_t a1 = INT8_MAX;
|
||||||
|
int8_t a1min = INT8_MIN;
|
||||||
|
#endif
|
||||||
|
#ifdef INT16_MAX
|
||||||
|
int16_t a2 = INT16_MAX;
|
||||||
|
int16_t a2min = INT16_MIN;
|
||||||
|
#endif
|
||||||
|
#ifdef INT32_MAX
|
||||||
|
int32_t a3 = INT32_MAX;
|
||||||
|
int32_t a3min = INT32_MIN;
|
||||||
|
#endif
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
int64_t a4 = INT64_MAX;
|
||||||
|
int64_t a4min = INT64_MIN;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT8_MAX
|
||||||
|
uint8_t b1 = UINT8_MAX;
|
||||||
|
#else
|
||||||
|
typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
|
||||||
|
#endif
|
||||||
|
#ifdef UINT16_MAX
|
||||||
|
uint16_t b2 = UINT16_MAX;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT32_MAX
|
||||||
|
uint32_t b3 = UINT32_MAX;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
uint64_t b4 = UINT64_MAX;
|
||||||
|
#endif
|
||||||
|
int_least8_t c1 = INT8_C (0x7f);
|
||||||
|
int_least8_t c1max = INT_LEAST8_MAX;
|
||||||
|
int_least8_t c1min = INT_LEAST8_MIN;
|
||||||
|
int_least16_t c2 = INT16_C (0x7fff);
|
||||||
|
int_least16_t c2max = INT_LEAST16_MAX;
|
||||||
|
int_least16_t c2min = INT_LEAST16_MIN;
|
||||||
|
int_least32_t c3 = INT32_C (0x7fffffff);
|
||||||
|
int_least32_t c3max = INT_LEAST32_MAX;
|
||||||
|
int_least32_t c3min = INT_LEAST32_MIN;
|
||||||
|
int_least64_t c4 = INT64_C (0x7fffffffffffffff);
|
||||||
|
int_least64_t c4max = INT_LEAST64_MAX;
|
||||||
|
int_least64_t c4min = INT_LEAST64_MIN;
|
||||||
|
uint_least8_t d1 = UINT8_C (0xff);
|
||||||
|
uint_least8_t d1max = UINT_LEAST8_MAX;
|
||||||
|
uint_least16_t d2 = UINT16_C (0xffff);
|
||||||
|
uint_least16_t d2max = UINT_LEAST16_MAX;
|
||||||
|
uint_least32_t d3 = UINT32_C (0xffffffff);
|
||||||
|
uint_least32_t d3max = UINT_LEAST32_MAX;
|
||||||
|
uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
|
||||||
|
uint_least64_t d4max = UINT_LEAST64_MAX;
|
||||||
|
int_fast8_t e1 = INT_FAST8_MAX;
|
||||||
|
int_fast8_t e1min = INT_FAST8_MIN;
|
||||||
|
int_fast16_t e2 = INT_FAST16_MAX;
|
||||||
|
int_fast16_t e2min = INT_FAST16_MIN;
|
||||||
|
int_fast32_t e3 = INT_FAST32_MAX;
|
||||||
|
int_fast32_t e3min = INT_FAST32_MIN;
|
||||||
|
int_fast64_t e4 = INT_FAST64_MAX;
|
||||||
|
int_fast64_t e4min = INT_FAST64_MIN;
|
||||||
|
uint_fast8_t f1 = UINT_FAST8_MAX;
|
||||||
|
uint_fast16_t f2 = UINT_FAST16_MAX;
|
||||||
|
uint_fast32_t f3 = UINT_FAST32_MAX;
|
||||||
|
uint_fast64_t f4 = UINT_FAST64_MAX;
|
||||||
|
#ifdef INTPTR_MAX
|
||||||
|
intptr_t g = INTPTR_MAX;
|
||||||
|
intptr_t gmin = INTPTR_MIN;
|
||||||
|
#endif
|
||||||
|
#ifdef UINTPTR_MAX
|
||||||
|
uintptr_t h = UINTPTR_MAX;
|
||||||
|
#endif
|
||||||
|
intmax_t i = INTMAX_MAX;
|
||||||
|
uintmax_t j = UINTMAX_MAX;
|
||||||
|
|
||||||
|
#include <limits.h> /* for CHAR_BIT */
|
||||||
|
#define TYPE_MINIMUM(t) \
|
||||||
|
((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
|
||||||
|
#define TYPE_MAXIMUM(t) \
|
||||||
|
((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
|
||||||
|
struct s {
|
||||||
|
int check_PTRDIFF:
|
||||||
|
PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
|
||||||
|
&& PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
|
||||||
|
? 1 : -1;
|
||||||
|
/* Detect bug in FreeBSD 6.0 / ia64. */
|
||||||
|
int check_SIG_ATOMIC:
|
||||||
|
SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
|
||||||
|
&& SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
|
||||||
|
? 1 : -1;
|
||||||
|
int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
|
||||||
|
int check_WCHAR:
|
||||||
|
WCHAR_MIN == TYPE_MINIMUM (wchar_t)
|
||||||
|
&& WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
|
||||||
|
? 1 : -1;
|
||||||
|
/* Detect bug in mingw. */
|
||||||
|
int check_WINT:
|
||||||
|
WINT_MIN == TYPE_MINIMUM (wint_t)
|
||||||
|
&& WINT_MAX == TYPE_MAXIMUM (wint_t)
|
||||||
|
? 1 : -1;
|
||||||
|
|
||||||
|
/* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
|
||||||
|
int check_UINT8_C:
|
||||||
|
(-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
|
||||||
|
int check_UINT16_C:
|
||||||
|
(-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
|
||||||
|
|
||||||
|
/* Detect bugs in OpenBSD 3.9 stdint.h. */
|
||||||
|
#ifdef UINT8_MAX
|
||||||
|
int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT16_MAX
|
||||||
|
int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT32_MAX
|
||||||
|
int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
|
||||||
|
#endif
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
|
||||||
|
#endif
|
||||||
|
int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
|
||||||
|
int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
|
||||||
|
int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
|
||||||
|
int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
|
||||||
|
int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
|
||||||
|
int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
|
||||||
|
int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
|
||||||
|
int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
|
||||||
|
int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
|
||||||
|
int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
|
||||||
|
int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
|
||||||
|
};
|
||||||
|
]])],
|
||||||
|
[gl_cv_header_working_stdint_h=yes])])
|
||||||
|
fi
|
||||||
|
if test "$gl_cv_header_working_stdint_h" = yes; then
|
||||||
|
STDINT_H=
|
||||||
|
else
|
||||||
|
dnl Check for <sys/inttypes.h>, and for
|
||||||
|
dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
|
||||||
|
AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
|
||||||
|
if test $ac_cv_header_sys_inttypes_h = yes; then
|
||||||
|
HAVE_SYS_INTTYPES_H=1
|
||||||
|
else
|
||||||
|
HAVE_SYS_INTTYPES_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SYS_INTTYPES_H])
|
||||||
|
if test $ac_cv_header_sys_bitypes_h = yes; then
|
||||||
|
HAVE_SYS_BITYPES_H=1
|
||||||
|
else
|
||||||
|
HAVE_SYS_BITYPES_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SYS_BITYPES_H])
|
||||||
|
|
||||||
|
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
|
||||||
|
dnl character support).
|
||||||
|
AC_CHECK_HEADERS_ONCE([wchar.h])
|
||||||
|
|
||||||
|
gl_STDINT_TYPE_PROPERTIES
|
||||||
|
STDINT_H=stdint.h
|
||||||
|
fi
|
||||||
|
AC_SUBST(STDINT_H)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
|
||||||
|
dnl Determine the size of each of the given types in bits.
|
||||||
|
AC_DEFUN([gl_STDINT_BITSIZEOF],
|
||||||
|
[
|
||||||
|
dnl Use a shell loop, to avoid bloating configure, and
|
||||||
|
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
|
||||||
|
dnl config.h.in,
|
||||||
|
dnl - extra AC_SUBST calls, so that the right substitutions are made.
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
|
||||||
|
[Define to the number of bits in type ']gltype['.])])
|
||||||
|
for gltype in $1 ; do
|
||||||
|
AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
|
||||||
|
[AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
|
||||||
|
[$2
|
||||||
|
#include <limits.h>], [result=unknown])
|
||||||
|
eval gl_cv_bitsizeof_${gltype}=\$result
|
||||||
|
])
|
||||||
|
eval result=\$gl_cv_bitsizeof_${gltype}
|
||||||
|
if test $result = unknown; then
|
||||||
|
dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
|
||||||
|
dnl do a syntax check even on unused #if conditions and give an error
|
||||||
|
dnl on valid C code like this:
|
||||||
|
dnl #if 0
|
||||||
|
dnl # if > 32
|
||||||
|
dnl # endif
|
||||||
|
dnl #endif
|
||||||
|
result=0
|
||||||
|
fi
|
||||||
|
GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
|
||||||
|
AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
|
||||||
|
eval BITSIZEOF_${GLTYPE}=\$result
|
||||||
|
done
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
|
||||||
|
dnl Determine the signedness of each of the given types.
|
||||||
|
dnl Define HAVE_SIGNED_TYPE if type is signed.
|
||||||
|
AC_DEFUN([gl_CHECK_TYPES_SIGNED],
|
||||||
|
[
|
||||||
|
dnl Use a shell loop, to avoid bloating configure, and
|
||||||
|
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
|
||||||
|
dnl config.h.in,
|
||||||
|
dnl - extra AC_SUBST calls, so that the right substitutions are made.
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
|
||||||
|
[Define to 1 if ']gltype[' is a signed integer type.])])
|
||||||
|
for gltype in $1 ; do
|
||||||
|
AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
|
||||||
|
[AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([$2[
|
||||||
|
int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
|
||||||
|
result=yes, result=no)
|
||||||
|
eval gl_cv_type_${gltype}_signed=\$result
|
||||||
|
])
|
||||||
|
eval result=\$gl_cv_type_${gltype}_signed
|
||||||
|
GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
|
||||||
|
if test "$result" = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], 1)
|
||||||
|
eval HAVE_SIGNED_${GLTYPE}=1
|
||||||
|
else
|
||||||
|
eval HAVE_SIGNED_${GLTYPE}=0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
|
||||||
|
dnl Determine the suffix to use for integer constants of the given types.
|
||||||
|
dnl Define t_SUFFIX for each such type.
|
||||||
|
AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
|
||||||
|
[
|
||||||
|
dnl Use a shell loop, to avoid bloating configure, and
|
||||||
|
dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
|
||||||
|
dnl config.h.in,
|
||||||
|
dnl - extra AC_SUBST calls, so that the right substitutions are made.
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
|
||||||
|
[Define to l, ll, u, ul, ull, etc., as suitable for
|
||||||
|
constants of type ']gltype['.])])
|
||||||
|
for gltype in $1 ; do
|
||||||
|
AC_CACHE_CHECK([for $gltype integer literal suffix],
|
||||||
|
[gl_cv_type_${gltype}_suffix],
|
||||||
|
[eval gl_cv_type_${gltype}_suffix=no
|
||||||
|
eval result=\$gl_cv_type_${gltype}_signed
|
||||||
|
if test "$result" = yes; then
|
||||||
|
glsufu=
|
||||||
|
else
|
||||||
|
glsufu=u
|
||||||
|
fi
|
||||||
|
for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
|
||||||
|
case $glsuf in
|
||||||
|
'') gltype1='int';;
|
||||||
|
l) gltype1='long int';;
|
||||||
|
ll) gltype1='long long int';;
|
||||||
|
i64) gltype1='__int64';;
|
||||||
|
u) gltype1='unsigned int';;
|
||||||
|
ul) gltype1='unsigned long int';;
|
||||||
|
ull) gltype1='unsigned long long int';;
|
||||||
|
ui64)gltype1='unsigned __int64';;
|
||||||
|
esac
|
||||||
|
AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([$2
|
||||||
|
extern $gltype foo;
|
||||||
|
extern $gltype1 foo;])],
|
||||||
|
[eval gl_cv_type_${gltype}_suffix=\$glsuf])
|
||||||
|
eval result=\$gl_cv_type_${gltype}_suffix
|
||||||
|
test "$result" != no && break
|
||||||
|
done])
|
||||||
|
GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
|
||||||
|
eval result=\$gl_cv_type_${gltype}_suffix
|
||||||
|
test "$result" = no && result=
|
||||||
|
eval ${GLTYPE}_SUFFIX=\$result
|
||||||
|
AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], $result)
|
||||||
|
done
|
||||||
|
AC_FOREACH([gltype], [$1],
|
||||||
|
[AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl gl_STDINT_INCLUDES
|
||||||
|
AC_DEFUN([gl_STDINT_INCLUDES],
|
||||||
|
[[
|
||||||
|
/* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
|
||||||
|
included before <wchar.h>. */
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#if HAVE_WCHAR_H
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <time.h>
|
||||||
|
# include <wchar.h>
|
||||||
|
#endif
|
||||||
|
]])
|
||||||
|
|
||||||
|
dnl gl_STDINT_TYPE_PROPERTIES
|
||||||
|
dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
|
||||||
|
dnl of interest to stdint_.h.
|
||||||
|
AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
|
||||||
|
[
|
||||||
|
gl_STDINT_BITSIZEOF([ptrdiff_t sig_atomic_t size_t wchar_t wint_t],
|
||||||
|
[gl_STDINT_INCLUDES])
|
||||||
|
gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
|
||||||
|
[gl_STDINT_INCLUDES])
|
||||||
|
gl_cv_type_ptrdiff_t_signed=yes
|
||||||
|
gl_cv_type_size_t_signed=no
|
||||||
|
gl_INTEGER_TYPE_SUFFIX([ptrdiff_t sig_atomic_t size_t wchar_t wint_t],
|
||||||
|
[gl_STDINT_INCLUDES])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
|
||||||
|
dnl Remove this when we can assume autoconf >= 2.61.
|
||||||
|
m4_ifdef([AC_COMPUTE_INT], [], [
|
||||||
|
AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Hey Emacs!
|
||||||
|
# Local Variables:
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# End:
|
26
libgnu/m4/stdint_h.m4
Normal file
26
libgnu/m4/stdint_h.m4
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# stdint_h.m4 serial 6
|
||||||
|
dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
|
||||||
|
# doesn't clash with <sys/types.h>, and declares uintmax_t.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_AC_HEADER_STDINT_H],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
|
||||||
|
[AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>
|
||||||
|
#include <stdint.h>],
|
||||||
|
[uintmax_t i = (uintmax_t) -1; return !i;],
|
||||||
|
gl_cv_header_stdint_h=yes,
|
||||||
|
gl_cv_header_stdint_h=no)])
|
||||||
|
if test $gl_cv_header_stdint_h = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
|
||||||
|
[Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
|
||||||
|
and declares uintmax_t. ])
|
||||||
|
fi
|
||||||
|
])
|
82
libgnu/m4/stdio_h.m4
Normal file
82
libgnu/m4/stdio_h.m4
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# stdio_h.m4 serial 7
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDIO_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
||||||
|
gl_CHECK_NEXT_HEADERS([stdio.h])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDIO_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX])
|
||||||
|
GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX])
|
||||||
|
GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF])
|
||||||
|
GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX])
|
||||||
|
GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX])
|
||||||
|
GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX])
|
||||||
|
GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF])
|
||||||
|
GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX])
|
||||||
|
GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF])
|
||||||
|
GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK])
|
||||||
|
GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO])
|
||||||
|
GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL])
|
||||||
|
GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO])
|
||||||
|
GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH])
|
||||||
|
GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM])
|
||||||
|
GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE])
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
|
||||||
|
REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF])
|
||||||
|
REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF])
|
||||||
|
REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF])
|
||||||
|
REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF])
|
||||||
|
HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF])
|
||||||
|
REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF])
|
||||||
|
HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
|
||||||
|
REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF])
|
||||||
|
REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF])
|
||||||
|
HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF])
|
||||||
|
REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF])
|
||||||
|
HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO])
|
||||||
|
REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO])
|
||||||
|
REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK])
|
||||||
|
HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO])
|
||||||
|
REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO])
|
||||||
|
REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL])
|
||||||
|
REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
|
||||||
|
HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM])
|
||||||
|
HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE])
|
||||||
|
REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Code shared by fseeko and ftello. Determine if large files are supported,
|
||||||
|
dnl but stdin does not start as a large file by default.
|
||||||
|
AC_DEFUN([gl_STDIN_LARGE_OFFSET],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([whether stdin defaults to large file offsets],
|
||||||
|
[gl_cv_var_stdin_large_offset],
|
||||||
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>],
|
||||||
|
[#if defined __SL64 && defined __SCLE /* cygwin */
|
||||||
|
/* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making
|
||||||
|
fseeko/ftello needlessly fail. This bug was fixed at the same time
|
||||||
|
that cygwin started exporting asnprintf (cygwin 1.7.0), so we use
|
||||||
|
that as a link-time test for cross-compiles rather than building
|
||||||
|
a runtime test. */
|
||||||
|
size_t s;
|
||||||
|
if (asnprintf (NULL, &s, ""))
|
||||||
|
return 0;
|
||||||
|
#endif])],
|
||||||
|
[gl_cv_var_stdin_large_offset=yes],
|
||||||
|
[gl_cv_var_stdin_large_offset=no])])
|
||||||
|
])
|
35
libgnu/m4/stdlib_h.m4
Normal file
35
libgnu/m4/stdlib_h.m4
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# stdlib_h.m4 serial 3
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDLIB_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||||
|
gl_CHECK_NEXT_HEADERS([stdlib.h])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STDLIB_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX])
|
||||||
|
GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
|
||||||
|
GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX])
|
||||||
|
GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT])
|
||||||
|
GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP])
|
||||||
|
GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP])
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX])
|
||||||
|
HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
|
||||||
|
HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX])
|
||||||
|
HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
|
||||||
|
HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX])
|
||||||
|
REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
|
||||||
|
])
|
22
libgnu/m4/strdup.m4
Normal file
22
libgnu/m4/strdup.m4
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# strdup.m4 serial 9
|
||||||
|
|
||||||
|
dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software
|
||||||
|
dnl Foundation, Inc.
|
||||||
|
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_STRDUP],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||||
|
AC_REPLACE_FUNCS(strdup)
|
||||||
|
AC_CHECK_DECLS_ONCE(strdup)
|
||||||
|
if test $ac_cv_have_decl_strdup = no; then
|
||||||
|
HAVE_DECL_STRDUP=0
|
||||||
|
fi
|
||||||
|
gl_PREREQ_STRDUP
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/strdup.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_STRDUP], [:])
|
77
libgnu/m4/string_h.m4
Normal file
77
libgnu/m4/string_h.m4
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Configure a GNU-like replacement for <string.h>.
|
||||||
|
|
||||||
|
# Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# Written by Paul Eggert.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRING_H],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default behavior below is expanded
|
||||||
|
dnl once only, before all statements that occur in other macros.
|
||||||
|
AC_REQUIRE([gl_HEADER_STRING_H_BODY])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRING_H_BODY],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_C_RESTRICT])
|
||||||
|
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||||
|
gl_CHECK_NEXT_HEADERS([string.h])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_STRING_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM])
|
||||||
|
GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY])
|
||||||
|
GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR])
|
||||||
|
GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY])
|
||||||
|
GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY])
|
||||||
|
GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL])
|
||||||
|
GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP])
|
||||||
|
GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP])
|
||||||
|
GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN])
|
||||||
|
GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK])
|
||||||
|
GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP])
|
||||||
|
GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR])
|
||||||
|
GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R])
|
||||||
|
GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN])
|
||||||
|
GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN])
|
||||||
|
GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR])
|
||||||
|
GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR])
|
||||||
|
GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR])
|
||||||
|
GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP])
|
||||||
|
GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
|
||||||
|
GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
|
||||||
|
GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR])
|
||||||
|
GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN])
|
||||||
|
GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK])
|
||||||
|
GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN])
|
||||||
|
GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP])
|
||||||
|
GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R])
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM])
|
||||||
|
HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY])
|
||||||
|
HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR])
|
||||||
|
HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY])
|
||||||
|
HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY])
|
||||||
|
HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP])
|
||||||
|
HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP])
|
||||||
|
HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL])
|
||||||
|
HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP])
|
||||||
|
HAVE_STRNDUP=1; AC_SUBST([HAVE_STRNDUP])
|
||||||
|
HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP])
|
||||||
|
HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN])
|
||||||
|
HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK])
|
||||||
|
HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP])
|
||||||
|
HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR])
|
||||||
|
HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R])
|
||||||
|
])
|
51
libgnu/m4/sys_socket_h.m4
Normal file
51
libgnu/m4/sys_socket_h.m4
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# sys_socket_h.m4 serial 4
|
||||||
|
dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Simon Josefsson.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_HEADER_SYS_SOCKET],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
|
||||||
|
[gl_cv_header_sys_socket_h_selfcontained],
|
||||||
|
[
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/socket.h>], [])],
|
||||||
|
[gl_cv_header_sys_socket_h_selfcontained=yes],
|
||||||
|
[gl_cv_header_sys_socket_h_selfcontained=no])
|
||||||
|
])
|
||||||
|
if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
|
||||||
|
SYS_SOCKET_H=''
|
||||||
|
else
|
||||||
|
SYS_SOCKET_H='sys/socket.h'
|
||||||
|
|
||||||
|
gl_CHECK_NEXT_HEADERS([sys/socket.h])
|
||||||
|
if test $ac_cv_header_sys_socket_h = yes; then
|
||||||
|
HAVE_SYS_SOCKET_H=1
|
||||||
|
HAVE_WINSOCK2_H=0
|
||||||
|
HAVE_WS2TCPIP_H=0
|
||||||
|
else
|
||||||
|
HAVE_SYS_SOCKET_H=0
|
||||||
|
dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
|
||||||
|
dnl the check for those headers unconditional; yet cygwin reports
|
||||||
|
dnl that the headers are present but cannot be compiled (since on
|
||||||
|
dnl cygwin, all socket information should come from sys/socket.h).
|
||||||
|
AC_CHECK_HEADERS([winsock2.h ws2tcpip.h])
|
||||||
|
if test $ac_cv_header_winsock2_h = yes; then
|
||||||
|
HAVE_WINSOCK2_H=1
|
||||||
|
else
|
||||||
|
HAVE_WINSOCK2_H=0
|
||||||
|
fi
|
||||||
|
if test $ac_cv_header_ws2tcpip_h = yes; then
|
||||||
|
HAVE_WS2TCPIP_H=1
|
||||||
|
else
|
||||||
|
HAVE_WS2TCPIP_H=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SYS_SOCKET_H])
|
||||||
|
AC_SUBST([HAVE_WINSOCK2_H])
|
||||||
|
AC_SUBST([HAVE_WS2TCPIP_H])
|
||||||
|
fi
|
||||||
|
AC_SUBST([SYS_SOCKET_H])
|
||||||
|
])
|
48
libgnu/m4/ulonglong.m4
Normal file
48
libgnu/m4/ulonglong.m4
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# ulonglong.m4 serial 6
|
||||||
|
dnl Copyright (C) 1999-2006 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
|
||||||
|
# This fixes a bug in Autoconf 2.60, but can be removed once we
|
||||||
|
# assume 2.61 everywhere.
|
||||||
|
|
||||||
|
# Note: If the type 'unsigned long long int' exists but is only 32 bits
|
||||||
|
# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
|
||||||
|
# will not be defined. In this case you can treat 'unsigned long long int'
|
||||||
|
# like 'unsigned long int'.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for unsigned long long int],
|
||||||
|
[ac_cv_type_unsigned_long_long_int],
|
||||||
|
[AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[unsigned long long int ull = 18446744073709551615ULL;
|
||||||
|
typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1
|
||||||
|
? 1 : -1)];
|
||||||
|
int i = 63;]],
|
||||||
|
[[unsigned long long int ullmax = 18446744073709551615ull;
|
||||||
|
return (ull << 63 | ull >> 63 | ull << i | ull >> i
|
||||||
|
| ullmax / ull | ullmax % ull);]])],
|
||||||
|
[ac_cv_type_unsigned_long_long_int=yes],
|
||||||
|
[ac_cv_type_unsigned_long_long_int=no])])
|
||||||
|
if test $ac_cv_type_unsigned_long_long_int = yes; then
|
||||||
|
AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
|
||||||
|
[Define to 1 if the system has the type `unsigned long long int'.])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# This macro is obsolescent and should go away soon.
|
||||||
|
AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
|
||||||
|
ac_cv_type_unsigned_long_long=$ac_cv_type_unsigned_long_long_int
|
||||||
|
if test $ac_cv_type_unsigned_long_long = yes; then
|
||||||
|
AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
|
||||||
|
[Define if you have the 'unsigned long long' type.])
|
||||||
|
fi
|
||||||
|
])
|
56
libgnu/m4/unistd_h.m4
Normal file
56
libgnu/m4/unistd_h.m4
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# unistd_h.m4 serial 9
|
||||||
|
dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl Written by Simon Josefsson, Bruno Haible.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_UNISTD_H],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default behavior below is expanded
|
||||||
|
dnl once only, before all statements that occur in other macros.
|
||||||
|
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
|
||||||
|
|
||||||
|
gl_CHECK_NEXT_HEADERS([unistd.h])
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS_ONCE([unistd.h])
|
||||||
|
if test $ac_cv_header_unistd_h = yes; then
|
||||||
|
HAVE_UNISTD_H=1
|
||||||
|
else
|
||||||
|
HAVE_UNISTD_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_UNISTD_H])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_UNISTD_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
|
||||||
|
GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
|
||||||
|
GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
|
||||||
|
GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
|
||||||
|
GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
|
||||||
|
GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R])
|
||||||
|
GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN])
|
||||||
|
GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK])
|
||||||
|
GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK])
|
||||||
|
GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP])
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_DUP2=1; AC_SUBST([HAVE_DUP2])
|
||||||
|
HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
|
||||||
|
HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
|
||||||
|
HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
|
||||||
|
HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
|
||||||
|
REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
|
||||||
|
REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR])
|
||||||
|
REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
|
||||||
|
REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
|
||||||
|
REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
|
||||||
|
])
|
197
libgnu/m4/vasnprintf.m4
Normal file
197
libgnu/m4/vasnprintf.m4
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
# vasnprintf.m4 serial 20
|
||||||
|
dnl Copyright (C) 2002-2004, 2006-2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_FUNC_VASNPRINTF],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_EOVERFLOW])
|
||||||
|
AC_CHECK_FUNCS_ONCE([vasnprintf])
|
||||||
|
if test $ac_cv_func_vasnprintf = no; then
|
||||||
|
gl_REPLACE_VASNPRINTF
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_REPLACE_VASNPRINTF],
|
||||||
|
[
|
||||||
|
AC_CHECK_FUNCS_ONCE([vasnprintf])
|
||||||
|
AC_LIBOBJ([vasnprintf])
|
||||||
|
AC_LIBOBJ([printf-args])
|
||||||
|
AC_LIBOBJ([printf-parse])
|
||||||
|
AC_LIBOBJ([asnprintf])
|
||||||
|
if test $ac_cv_func_vasnprintf = yes; then
|
||||||
|
AC_DEFINE([REPLACE_VASNPRINTF], 1,
|
||||||
|
[Define if vasnprintf exists but is overridden by gnulib.])
|
||||||
|
fi
|
||||||
|
gl_PREREQ_PRINTF_ARGS
|
||||||
|
gl_PREREQ_PRINTF_PARSE
|
||||||
|
gl_PREREQ_VASNPRINTF
|
||||||
|
gl_PREREQ_ASNPRINTF
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prequisites of lib/printf-args.h, lib/printf-args.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
AC_REQUIRE([gt_TYPE_WCHAR_T])
|
||||||
|
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prequisites of lib/printf-parse.h, lib/printf-parse.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
AC_REQUIRE([gt_TYPE_WCHAR_T])
|
||||||
|
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||||
|
AC_REQUIRE([AC_TYPE_SIZE_T])
|
||||||
|
AC_CHECK_TYPES(ptrdiff_t)
|
||||||
|
AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/vasnprintf.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_FUNC_ALLOCA])
|
||||||
|
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||||
|
AC_REQUIRE([gt_TYPE_WCHAR_T])
|
||||||
|
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||||
|
AC_CHECK_FUNCS(snprintf wcslen)
|
||||||
|
dnl Use the _snprintf function only if it is declared (because on NetBSD it
|
||||||
|
dnl is defined as a weak alias of snprintf; we prefer to use the latter).
|
||||||
|
AC_CHECK_DECLS([_snprintf], , , [#include <stdio.h>])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
|
||||||
|
# arguments.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
|
||||||
|
case "$gl_cv_func_printf_long_double" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for
|
||||||
|
'long double' arguments.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
|
||||||
|
# arguments.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_INFINITE])
|
||||||
|
case "$gl_cv_func_printf_infinite" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for
|
||||||
|
infinite 'double' arguments.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
|
||||||
|
# arguments.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
|
||||||
|
dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
|
||||||
|
dnl NEED_PRINTF_LONG_DOUBLE is already set.
|
||||||
|
AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
|
||||||
|
case "$gl_cv_func_printf_long_double" in
|
||||||
|
*yes)
|
||||||
|
case "$gl_cv_func_printf_infinite_long_double" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for
|
||||||
|
infinite 'long double' arguments.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
|
||||||
|
case "$gl_cv_func_printf_directive_a" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for
|
||||||
|
the 'a' and 'A' directives.])
|
||||||
|
AC_CHECK_FUNCS([nl_langinfo])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
|
||||||
|
case "$gl_cv_func_printf_directive_f" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for
|
||||||
|
the 'F' directive.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
|
||||||
|
case "$gl_cv_func_printf_flag_grouping" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for the
|
||||||
|
' flag.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
|
||||||
|
case "$gl_cv_func_printf_flag_zero" in
|
||||||
|
*yes)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_DEFINE([NEED_PRINTF_FLAG_ZERO], 1,
|
||||||
|
[Define if the vasnprintf implementation needs special code for the
|
||||||
|
0 flag.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
|
||||||
|
AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_PREREQ_VASNPRINTF])
|
||||||
|
gl_PREREQ_VASNPRINTF_LONG_DOUBLE
|
||||||
|
gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
|
||||||
|
gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
|
||||||
|
gl_PREREQ_VASNPRINTF_DIRECTIVE_A
|
||||||
|
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
|
||||||
|
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
|
||||||
|
gl_PREREQ_VASNPRINTF_FLAG_ZERO
|
||||||
|
])
|
||||||
|
|
||||||
|
# Prerequisites of lib/asnprintf.c.
|
||||||
|
AC_DEFUN([gl_PREREQ_ASNPRINTF],
|
||||||
|
[
|
||||||
|
])
|
54
libgnu/m4/wchar.m4
Normal file
54
libgnu/m4/wchar.m4
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
|
||||||
|
|
||||||
|
dnl Copyright (C) 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl Written by Eric Blake.
|
||||||
|
|
||||||
|
# wchar.m4 serial 4
|
||||||
|
|
||||||
|
AC_DEFUN([gl_WCHAR_H],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
|
||||||
|
AC_CACHE_CHECK([whether <wchar.h> is standalone],
|
||||||
|
[gl_cv_header_wchar_h_standalone],
|
||||||
|
[AC_COMPILE_IFELSE([[#include <wchar.h>
|
||||||
|
wchar_t w;]],
|
||||||
|
[gl_cv_header_wchar_h_standalone=yes],
|
||||||
|
[gl_cv_header_wchar_h_standalone=no])])
|
||||||
|
if test $gl_cv_header_wchar_h_standalone != yes; then
|
||||||
|
WCHAR_H=wchar.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Prepare for creating substitute <wchar.h>.
|
||||||
|
dnl Do it always: WCHAR_H may be empty here but can be set later.
|
||||||
|
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
|
||||||
|
dnl character support).
|
||||||
|
AC_CHECK_HEADERS_ONCE([wchar.h])
|
||||||
|
if test $ac_cv_header_wchar_h = yes; then
|
||||||
|
HAVE_WCHAR_H=1
|
||||||
|
else
|
||||||
|
HAVE_WCHAR_H=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_WCHAR_H])
|
||||||
|
gl_CHECK_NEXT_HEADERS([wchar.h])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
|
||||||
|
[
|
||||||
|
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||||
|
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
|
||||||
|
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([gl_WCHAR_H_DEFAULTS],
|
||||||
|
[
|
||||||
|
GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH])
|
||||||
|
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||||
|
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
|
||||||
|
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
|
||||||
|
WCHAR_H=
|
||||||
|
AC_SUBST([WCHAR_H])
|
||||||
|
])
|
20
libgnu/m4/wchar_t.m4
Normal file
20
libgnu/m4/wchar_t.m4
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# wchar_t.m4 serial 1 (gettext-0.12)
|
||||||
|
dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether <stddef.h> has the 'wchar_t' type.
|
||||||
|
dnl Prerequisite: AC_PROG_CC
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_WCHAR_T],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
|
||||||
|
[AC_TRY_COMPILE([#include <stddef.h>
|
||||||
|
wchar_t foo = (wchar_t)'\0';], ,
|
||||||
|
gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
|
||||||
|
if test $gt_cv_c_wchar_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
|
||||||
|
fi
|
||||||
|
])
|
28
libgnu/m4/wint_t.m4
Normal file
28
libgnu/m4/wint_t.m4
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# wint_t.m4 serial 2 (gettext-0.16.2)
|
||||||
|
dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether <wchar.h> has the 'wint_t' type.
|
||||||
|
dnl Prerequisite: AC_PROG_CC
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_WINT_T],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
|
||||||
|
[AC_TRY_COMPILE([
|
||||||
|
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
|
||||||
|
<wchar.h>.
|
||||||
|
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
|
||||||
|
before <wchar.h>. */
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
wint_t foo = (wchar_t)'\0';], ,
|
||||||
|
gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
|
||||||
|
if test $gt_cv_c_wint_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
|
||||||
|
fi
|
||||||
|
])
|
13
libgnu/m4/xsize.m4
Normal file
13
libgnu/m4/xsize.m4
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# xsize.m4 serial 3
|
||||||
|
dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_XSIZE],
|
||||||
|
[
|
||||||
|
dnl Prerequisites of lib/xsize.h.
|
||||||
|
AC_REQUIRE([gl_SIZE_MAX])
|
||||||
|
AC_REQUIRE([AC_C_INLINE])
|
||||||
|
AC_CHECK_HEADERS(stdint.h)
|
||||||
|
])
|
57
libgnu/malloc.c
Normal file
57
libgnu/malloc.c
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* malloc() function that is glibc compatible.
|
||||||
|
|
||||||
|
Copyright (C) 1997, 1998, 2006, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 Jim Meyering and Bruno Haible */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */
|
||||||
|
#ifdef malloc
|
||||||
|
# define NEED_MALLOC_GNU
|
||||||
|
# undef malloc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* Call the system's malloc below. */
|
||||||
|
#undef malloc
|
||||||
|
|
||||||
|
/* Allocate an N-byte block of memory from the heap.
|
||||||
|
If N is zero, allocate a 1-byte block. */
|
||||||
|
|
||||||
|
void *
|
||||||
|
rpl_malloc (size_t n)
|
||||||
|
{
|
||||||
|
void *result;
|
||||||
|
|
||||||
|
#ifdef NEED_MALLOC_GNU
|
||||||
|
if (n == 0)
|
||||||
|
n = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
result = malloc (n);
|
||||||
|
|
||||||
|
#if !HAVE_MALLOC_POSIX
|
||||||
|
if (result == NULL)
|
||||||
|
errno = ENOMEM;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
43
libgnu/netinet_in_.h
Normal file
43
libgnu/netinet_in_.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* Substitute for <netinet/in.h>.
|
||||||
|
Copyright (C) 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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@
|
||||||
|
|
||||||
|
/* 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 */
|
187
libgnu/printf-args.c
Normal file
187
libgnu/printf-args.c
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
/* Decomposed printf argument list.
|
||||||
|
Copyright (C) 1999, 2002-2003, 2005-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 can be parametrized with the following macros:
|
||||||
|
ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions.
|
||||||
|
PRINTF_FETCHARGS Name of the function to be defined.
|
||||||
|
STATIC Set to 'static' to declare the function static. */
|
||||||
|
|
||||||
|
#ifndef PRINTF_FETCHARGS
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#ifndef PRINTF_FETCHARGS
|
||||||
|
# include "printf-args.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
PRINTF_FETCHARGS (va_list args, arguments *a)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
argument *ap;
|
||||||
|
|
||||||
|
for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
|
||||||
|
switch (ap->type)
|
||||||
|
{
|
||||||
|
case TYPE_SCHAR:
|
||||||
|
ap->a.a_schar = va_arg (args, /*signed char*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_UCHAR:
|
||||||
|
ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_SHORT:
|
||||||
|
ap->a.a_short = va_arg (args, /*short*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_USHORT:
|
||||||
|
ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_INT:
|
||||||
|
ap->a.a_int = va_arg (args, int);
|
||||||
|
break;
|
||||||
|
case TYPE_UINT:
|
||||||
|
ap->a.a_uint = va_arg (args, unsigned int);
|
||||||
|
break;
|
||||||
|
case TYPE_LONGINT:
|
||||||
|
ap->a.a_longint = va_arg (args, long int);
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGINT:
|
||||||
|
ap->a.a_ulongint = va_arg (args, unsigned long int);
|
||||||
|
break;
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
case TYPE_LONGLONGINT:
|
||||||
|
ap->a.a_longlongint = va_arg (args, long long int);
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGLONGINT:
|
||||||
|
ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_DOUBLE:
|
||||||
|
ap->a.a_double = va_arg (args, double);
|
||||||
|
break;
|
||||||
|
case TYPE_LONGDOUBLE:
|
||||||
|
ap->a.a_longdouble = va_arg (args, long double);
|
||||||
|
break;
|
||||||
|
case TYPE_CHAR:
|
||||||
|
ap->a.a_char = va_arg (args, int);
|
||||||
|
break;
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
case TYPE_WIDE_CHAR:
|
||||||
|
/* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
|
||||||
|
default argument promotions", this is not the case in mingw32,
|
||||||
|
where wint_t is 'unsigned short'. */
|
||||||
|
ap->a.a_wide_char =
|
||||||
|
(sizeof (wint_t) < sizeof (int)
|
||||||
|
? va_arg (args, int)
|
||||||
|
: va_arg (args, wint_t));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_STRING:
|
||||||
|
ap->a.a_string = va_arg (args, const char *);
|
||||||
|
/* A null pointer is an invalid argument for "%s", but in practice
|
||||||
|
it occurs quite frequently in printf statements that produce
|
||||||
|
debug output. Use a fallback in this case. */
|
||||||
|
if (ap->a.a_string == NULL)
|
||||||
|
ap->a.a_string = "(NULL)";
|
||||||
|
break;
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
case TYPE_WIDE_STRING:
|
||||||
|
ap->a.a_wide_string = va_arg (args, const wchar_t *);
|
||||||
|
/* A null pointer is an invalid argument for "%ls", but in practice
|
||||||
|
it occurs quite frequently in printf statements that produce
|
||||||
|
debug output. Use a fallback in this case. */
|
||||||
|
if (ap->a.a_wide_string == NULL)
|
||||||
|
{
|
||||||
|
static const wchar_t wide_null_string[] =
|
||||||
|
{
|
||||||
|
(wchar_t)'(',
|
||||||
|
(wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
|
||||||
|
(wchar_t)')',
|
||||||
|
(wchar_t)0
|
||||||
|
};
|
||||||
|
ap->a.a_wide_string = wide_null_string;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_POINTER:
|
||||||
|
ap->a.a_pointer = va_arg (args, void *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_SCHAR_POINTER:
|
||||||
|
ap->a.a_count_schar_pointer = va_arg (args, signed char *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_SHORT_POINTER:
|
||||||
|
ap->a.a_count_short_pointer = va_arg (args, short *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_INT_POINTER:
|
||||||
|
ap->a.a_count_int_pointer = va_arg (args, int *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_LONGINT_POINTER:
|
||||||
|
ap->a.a_count_longint_pointer = va_arg (args, long int *);
|
||||||
|
break;
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
case TYPE_COUNT_LONGLONGINT_POINTER:
|
||||||
|
ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
/* The unistdio extensions. */
|
||||||
|
case TYPE_U8_STRING:
|
||||||
|
ap->a.a_u8_string = va_arg (args, const uint8_t *);
|
||||||
|
/* A null pointer is an invalid argument for "%U", but in practice
|
||||||
|
it occurs quite frequently in printf statements that produce
|
||||||
|
debug output. Use a fallback in this case. */
|
||||||
|
if (ap->a.a_u8_string == NULL)
|
||||||
|
{
|
||||||
|
static const uint8_t u8_null_string[] =
|
||||||
|
{ '(', 'N', 'U', 'L', 'L', ')', 0 };
|
||||||
|
ap->a.a_u8_string = u8_null_string;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_U16_STRING:
|
||||||
|
ap->a.a_u16_string = va_arg (args, const uint16_t *);
|
||||||
|
/* A null pointer is an invalid argument for "%lU", but in practice
|
||||||
|
it occurs quite frequently in printf statements that produce
|
||||||
|
debug output. Use a fallback in this case. */
|
||||||
|
if (ap->a.a_u16_string == NULL)
|
||||||
|
{
|
||||||
|
static const uint16_t u16_null_string[] =
|
||||||
|
{ '(', 'N', 'U', 'L', 'L', ')', 0 };
|
||||||
|
ap->a.a_u16_string = u16_null_string;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_U32_STRING:
|
||||||
|
ap->a.a_u32_string = va_arg (args, const uint32_t *);
|
||||||
|
/* A null pointer is an invalid argument for "%llU", but in practice
|
||||||
|
it occurs quite frequently in printf statements that produce
|
||||||
|
debug output. Use a fallback in this case. */
|
||||||
|
if (ap->a.a_u32_string == NULL)
|
||||||
|
{
|
||||||
|
static const uint32_t u32_null_string[] =
|
||||||
|
{ '(', 'N', 'U', 'L', 'L', ')', 0 };
|
||||||
|
ap->a.a_u32_string = u32_null_string;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
/* Unknown type. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
154
libgnu/printf-args.h
Normal file
154
libgnu/printf-args.h
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
/* Decomposed printf argument list.
|
||||||
|
Copyright (C) 1999, 2002-2003, 2006-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _PRINTF_ARGS_H
|
||||||
|
#define _PRINTF_ARGS_H
|
||||||
|
|
||||||
|
/* This file can be parametrized with the following macros:
|
||||||
|
ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions.
|
||||||
|
PRINTF_FETCHARGS Name of the function to be declared.
|
||||||
|
STATIC Set to 'static' to declare the function static. */
|
||||||
|
|
||||||
|
/* Default parameters. */
|
||||||
|
#ifndef PRINTF_FETCHARGS
|
||||||
|
# define PRINTF_FETCHARGS printf_fetchargs
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get wchar_t. */
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
# include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get wint_t. */
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
# include <wchar.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Argument types */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TYPE_NONE,
|
||||||
|
TYPE_SCHAR,
|
||||||
|
TYPE_UCHAR,
|
||||||
|
TYPE_SHORT,
|
||||||
|
TYPE_USHORT,
|
||||||
|
TYPE_INT,
|
||||||
|
TYPE_UINT,
|
||||||
|
TYPE_LONGINT,
|
||||||
|
TYPE_ULONGINT,
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
TYPE_LONGLONGINT,
|
||||||
|
TYPE_ULONGLONGINT,
|
||||||
|
#endif
|
||||||
|
TYPE_DOUBLE,
|
||||||
|
TYPE_LONGDOUBLE,
|
||||||
|
TYPE_CHAR,
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
TYPE_WIDE_CHAR,
|
||||||
|
#endif
|
||||||
|
TYPE_STRING,
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
TYPE_WIDE_STRING,
|
||||||
|
#endif
|
||||||
|
TYPE_POINTER,
|
||||||
|
TYPE_COUNT_SCHAR_POINTER,
|
||||||
|
TYPE_COUNT_SHORT_POINTER,
|
||||||
|
TYPE_COUNT_INT_POINTER,
|
||||||
|
TYPE_COUNT_LONGINT_POINTER
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
, TYPE_COUNT_LONGLONGINT_POINTER
|
||||||
|
#endif
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
/* The unistdio extensions. */
|
||||||
|
, TYPE_U8_STRING
|
||||||
|
, TYPE_U16_STRING
|
||||||
|
, TYPE_U32_STRING
|
||||||
|
#endif
|
||||||
|
} arg_type;
|
||||||
|
|
||||||
|
/* Polymorphic argument */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
arg_type type;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
signed char a_schar;
|
||||||
|
unsigned char a_uchar;
|
||||||
|
short a_short;
|
||||||
|
unsigned short a_ushort;
|
||||||
|
int a_int;
|
||||||
|
unsigned int a_uint;
|
||||||
|
long int a_longint;
|
||||||
|
unsigned long int a_ulongint;
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
long long int a_longlongint;
|
||||||
|
unsigned long long int a_ulonglongint;
|
||||||
|
#endif
|
||||||
|
float a_float;
|
||||||
|
double a_double;
|
||||||
|
long double a_longdouble;
|
||||||
|
int a_char;
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
wint_t a_wide_char;
|
||||||
|
#endif
|
||||||
|
const char* a_string;
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
const wchar_t* a_wide_string;
|
||||||
|
#endif
|
||||||
|
void* a_pointer;
|
||||||
|
signed char * a_count_schar_pointer;
|
||||||
|
short * a_count_short_pointer;
|
||||||
|
int * a_count_int_pointer;
|
||||||
|
long int * a_count_longint_pointer;
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
long long int * a_count_longlongint_pointer;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
/* The unistdio extensions. */
|
||||||
|
const uint8_t * a_u8_string;
|
||||||
|
const uint16_t * a_u16_string;
|
||||||
|
const uint32_t * a_u32_string;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
a;
|
||||||
|
}
|
||||||
|
argument;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
argument *arg;
|
||||||
|
}
|
||||||
|
arguments;
|
||||||
|
|
||||||
|
|
||||||
|
/* Fetch the arguments, putting them into a. */
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#else
|
||||||
|
extern
|
||||||
|
#endif
|
||||||
|
int PRINTF_FETCHARGS (va_list args, arguments *a);
|
||||||
|
|
||||||
|
#endif /* _PRINTF_ARGS_H */
|
576
libgnu/printf-parse.c
Normal file
576
libgnu/printf-parse.c
Normal file
@ -0,0 +1,576 @@
|
|||||||
|
/* Formatted output to strings.
|
||||||
|
Copyright (C) 1999-2000, 2002-2003, 2006-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 can be parametrized with the following macros:
|
||||||
|
CHAR_T The element type of the format string.
|
||||||
|
CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
|
||||||
|
in the format string are ASCII.
|
||||||
|
DIRECTIVE Structure denoting a format directive.
|
||||||
|
Depends on CHAR_T.
|
||||||
|
DIRECTIVES Structure denoting the set of format directives of a
|
||||||
|
format string. Depends on CHAR_T.
|
||||||
|
PRINTF_PARSE Function that parses a format string.
|
||||||
|
Depends on CHAR_T.
|
||||||
|
STATIC Set to 'static' to declare the function static.
|
||||||
|
ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */
|
||||||
|
|
||||||
|
#ifndef PRINTF_PARSE
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#ifndef PRINTF_PARSE
|
||||||
|
# include "printf-parse.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Default parameters. */
|
||||||
|
#ifndef PRINTF_PARSE
|
||||||
|
# define PRINTF_PARSE printf_parse
|
||||||
|
# define CHAR_T char
|
||||||
|
# define DIRECTIVE char_directive
|
||||||
|
# define DIRECTIVES char_directives
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get size_t, NULL. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get intmax_t. */
|
||||||
|
#ifdef IN_LIBINTL
|
||||||
|
# if HAVE_STDINT_H_WITH_UINTMAX
|
||||||
|
# include <stdint.h>
|
||||||
|
# endif
|
||||||
|
# if HAVE_INTTYPES_H_WITH_UINTMAX
|
||||||
|
# include <inttypes.h>
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* malloc(), realloc(), free(). */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Checked size_t computations. */
|
||||||
|
#include "xsize.h"
|
||||||
|
|
||||||
|
#if CHAR_T_ONLY_ASCII
|
||||||
|
/* c_isascii(). */
|
||||||
|
# include "c-ctype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
|
||||||
|
{
|
||||||
|
const CHAR_T *cp = format; /* pointer into format */
|
||||||
|
size_t arg_posn = 0; /* number of regular arguments consumed */
|
||||||
|
size_t d_allocated; /* allocated elements of d->dir */
|
||||||
|
size_t a_allocated; /* allocated elements of a->arg */
|
||||||
|
size_t max_width_length = 0;
|
||||||
|
size_t max_precision_length = 0;
|
||||||
|
|
||||||
|
d->count = 0;
|
||||||
|
d_allocated = 1;
|
||||||
|
d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE));
|
||||||
|
if (d->dir == NULL)
|
||||||
|
/* Out of memory. */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
a->count = 0;
|
||||||
|
a_allocated = 0;
|
||||||
|
a->arg = NULL;
|
||||||
|
|
||||||
|
#define REGISTER_ARG(_index_,_type_) \
|
||||||
|
{ \
|
||||||
|
size_t n = (_index_); \
|
||||||
|
if (n >= a_allocated) \
|
||||||
|
{ \
|
||||||
|
size_t memory_size; \
|
||||||
|
argument *memory; \
|
||||||
|
\
|
||||||
|
a_allocated = xtimes (a_allocated, 2); \
|
||||||
|
if (a_allocated <= n) \
|
||||||
|
a_allocated = xsum (n, 1); \
|
||||||
|
memory_size = xtimes (a_allocated, sizeof (argument)); \
|
||||||
|
if (size_overflow_p (memory_size)) \
|
||||||
|
/* Overflow, would lead to out of memory. */ \
|
||||||
|
goto error; \
|
||||||
|
memory = (argument *) (a->arg \
|
||||||
|
? realloc (a->arg, memory_size) \
|
||||||
|
: malloc (memory_size)); \
|
||||||
|
if (memory == NULL) \
|
||||||
|
/* Out of memory. */ \
|
||||||
|
goto error; \
|
||||||
|
a->arg = memory; \
|
||||||
|
} \
|
||||||
|
while (a->count <= n) \
|
||||||
|
a->arg[a->count++].type = TYPE_NONE; \
|
||||||
|
if (a->arg[n].type == TYPE_NONE) \
|
||||||
|
a->arg[n].type = (_type_); \
|
||||||
|
else if (a->arg[n].type != (_type_)) \
|
||||||
|
/* Ambiguous type for positional argument. */ \
|
||||||
|
goto error; \
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*cp != '\0')
|
||||||
|
{
|
||||||
|
CHAR_T c = *cp++;
|
||||||
|
if (c == '%')
|
||||||
|
{
|
||||||
|
size_t arg_index = ARG_NONE;
|
||||||
|
DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
|
||||||
|
|
||||||
|
/* Initialize the next directive. */
|
||||||
|
dp->dir_start = cp - 1;
|
||||||
|
dp->flags = 0;
|
||||||
|
dp->width_start = NULL;
|
||||||
|
dp->width_end = NULL;
|
||||||
|
dp->width_arg_index = ARG_NONE;
|
||||||
|
dp->precision_start = NULL;
|
||||||
|
dp->precision_end = NULL;
|
||||||
|
dp->precision_arg_index = ARG_NONE;
|
||||||
|
dp->arg_index = ARG_NONE;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory later. */
|
||||||
|
goto error;
|
||||||
|
arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the flags. */
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*cp == '\'')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_GROUP;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '-')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_LEFT;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '+')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_SHOWSIGN;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == ' ')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_SPACE;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '#')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_ALT;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '0')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_ZERO;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the field width. */
|
||||||
|
if (*cp == '*')
|
||||||
|
{
|
||||||
|
dp->width_start = cp;
|
||||||
|
cp++;
|
||||||
|
dp->width_end = cp;
|
||||||
|
if (max_width_length < 1)
|
||||||
|
max_width_length = 1;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory later. */
|
||||||
|
goto error;
|
||||||
|
dp->width_arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dp->width_arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->width_arg_index = arg_posn++;
|
||||||
|
if (dp->width_arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->width_arg_index, TYPE_INT);
|
||||||
|
}
|
||||||
|
else if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
size_t width_length;
|
||||||
|
|
||||||
|
dp->width_start = cp;
|
||||||
|
for (; *cp >= '0' && *cp <= '9'; cp++)
|
||||||
|
;
|
||||||
|
dp->width_end = cp;
|
||||||
|
width_length = dp->width_end - dp->width_start;
|
||||||
|
if (max_width_length < width_length)
|
||||||
|
max_width_length = width_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the precision. */
|
||||||
|
if (*cp == '.')
|
||||||
|
{
|
||||||
|
cp++;
|
||||||
|
if (*cp == '*')
|
||||||
|
{
|
||||||
|
dp->precision_start = cp - 1;
|
||||||
|
cp++;
|
||||||
|
dp->precision_end = cp;
|
||||||
|
if (max_precision_length < 2)
|
||||||
|
max_precision_length = 2;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory
|
||||||
|
later. */
|
||||||
|
goto error;
|
||||||
|
dp->precision_arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dp->precision_arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->precision_arg_index = arg_posn++;
|
||||||
|
if (dp->precision_arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t precision_length;
|
||||||
|
|
||||||
|
dp->precision_start = cp - 1;
|
||||||
|
for (; *cp >= '0' && *cp <= '9'; cp++)
|
||||||
|
;
|
||||||
|
dp->precision_end = cp;
|
||||||
|
precision_length = dp->precision_end - dp->precision_start;
|
||||||
|
if (max_precision_length < precision_length)
|
||||||
|
max_precision_length = precision_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
arg_type type;
|
||||||
|
|
||||||
|
/* Parse argument type/size specifiers. */
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*cp == 'h')
|
||||||
|
{
|
||||||
|
flags |= (1 << (flags & 1));
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'L')
|
||||||
|
{
|
||||||
|
flags |= 4;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'l')
|
||||||
|
{
|
||||||
|
flags += 8;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'j')
|
||||||
|
{
|
||||||
|
if (sizeof (intmax_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* intmax_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (intmax_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* intmax_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'z' || *cp == 'Z')
|
||||||
|
{
|
||||||
|
/* 'z' is standardized in ISO C 99, but glibc uses 'Z'
|
||||||
|
because the warning facility in gcc-2.95.2 understands
|
||||||
|
only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
|
||||||
|
if (sizeof (size_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* size_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (size_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* size_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 't')
|
||||||
|
{
|
||||||
|
if (sizeof (ptrdiff_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* ptrdiff_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (ptrdiff_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* ptrdiff_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the conversion character. */
|
||||||
|
c = *cp++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'd': case 'i':
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
/* If 'long long' exists and is larger than 'long': */
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_LONGLONGINT;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
/* If 'long long' exists and is the same as 'long', we parse
|
||||||
|
"lld" into TYPE_LONGINT. */
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_LONGINT;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_SCHAR;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_SHORT;
|
||||||
|
else
|
||||||
|
type = TYPE_INT;
|
||||||
|
break;
|
||||||
|
case 'o': case 'u': case 'x': case 'X':
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
/* If 'long long' exists and is larger than 'long': */
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_ULONGLONGINT;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
/* If 'unsigned long long' exists and is the same as
|
||||||
|
'unsigned long', we parse "llu" into TYPE_ULONGINT. */
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_ULONGINT;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_UCHAR;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_USHORT;
|
||||||
|
else
|
||||||
|
type = TYPE_UINT;
|
||||||
|
break;
|
||||||
|
case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
|
||||||
|
case 'a': case 'A':
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_LONGDOUBLE;
|
||||||
|
else
|
||||||
|
type = TYPE_DOUBLE;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
if (flags >= 8)
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
type = TYPE_WIDE_CHAR;
|
||||||
|
#else
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
type = TYPE_CHAR;
|
||||||
|
break;
|
||||||
|
#if HAVE_WINT_T
|
||||||
|
case 'C':
|
||||||
|
type = TYPE_WIDE_CHAR;
|
||||||
|
c = 'c';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case 's':
|
||||||
|
if (flags >= 8)
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
type = TYPE_WIDE_STRING;
|
||||||
|
#else
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
type = TYPE_STRING;
|
||||||
|
break;
|
||||||
|
#if HAVE_WCHAR_T
|
||||||
|
case 'S':
|
||||||
|
type = TYPE_WIDE_STRING;
|
||||||
|
c = 's';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case 'p':
|
||||||
|
type = TYPE_POINTER;
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
#if HAVE_LONG_LONG_INT
|
||||||
|
/* If 'long long' exists and is larger than 'long': */
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_COUNT_LONGLONGINT_POINTER;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
/* If 'long long' exists and is the same as 'long', we parse
|
||||||
|
"lln" into TYPE_COUNT_LONGINT_POINTER. */
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_COUNT_LONGINT_POINTER;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_COUNT_SCHAR_POINTER;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_COUNT_SHORT_POINTER;
|
||||||
|
else
|
||||||
|
type = TYPE_COUNT_INT_POINTER;
|
||||||
|
break;
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
/* The unistdio extensions. */
|
||||||
|
case 'U':
|
||||||
|
if (flags >= 16)
|
||||||
|
type = TYPE_U32_STRING;
|
||||||
|
else if (flags >= 8)
|
||||||
|
type = TYPE_U16_STRING;
|
||||||
|
else
|
||||||
|
type = TYPE_U8_STRING;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case '%':
|
||||||
|
type = TYPE_NONE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Unknown conversion character. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != TYPE_NONE)
|
||||||
|
{
|
||||||
|
dp->arg_index = arg_index;
|
||||||
|
if (dp->arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->arg_index = arg_posn++;
|
||||||
|
if (dp->arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->arg_index, type);
|
||||||
|
}
|
||||||
|
dp->conversion = c;
|
||||||
|
dp->dir_end = cp;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->count++;
|
||||||
|
if (d->count >= d_allocated)
|
||||||
|
{
|
||||||
|
size_t memory_size;
|
||||||
|
DIRECTIVE *memory;
|
||||||
|
|
||||||
|
d_allocated = xtimes (d_allocated, 2);
|
||||||
|
memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
|
||||||
|
if (size_overflow_p (memory_size))
|
||||||
|
/* Overflow, would lead to out of memory. */
|
||||||
|
goto error;
|
||||||
|
memory = (DIRECTIVE *) realloc (d->dir, memory_size);
|
||||||
|
if (memory == NULL)
|
||||||
|
/* Out of memory. */
|
||||||
|
goto error;
|
||||||
|
d->dir = memory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if CHAR_T_ONLY_ASCII
|
||||||
|
else if (!c_isascii (c))
|
||||||
|
{
|
||||||
|
/* Non-ASCII character. Not supported. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
d->dir[d->count].dir_start = cp;
|
||||||
|
|
||||||
|
d->max_width_length = max_width_length;
|
||||||
|
d->max_precision_length = max_precision_length;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (a->arg)
|
||||||
|
free (a->arg);
|
||||||
|
if (d->dir)
|
||||||
|
free (d->dir);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef PRINTF_PARSE
|
||||||
|
#undef DIRECTIVES
|
||||||
|
#undef DIRECTIVE
|
||||||
|
#undef CHAR_T_ONLY_ASCII
|
||||||
|
#undef CHAR_T
|
179
libgnu/printf-parse.h
Normal file
179
libgnu/printf-parse.h
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
/* Parse printf format string.
|
||||||
|
Copyright (C) 1999, 2002-2003, 2005, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _PRINTF_PARSE_H
|
||||||
|
#define _PRINTF_PARSE_H
|
||||||
|
|
||||||
|
/* This file can be parametrized with the following macros:
|
||||||
|
ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions.
|
||||||
|
STATIC Set to 'static' to declare the function static. */
|
||||||
|
|
||||||
|
#include "printf-args.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
#define FLAG_GROUP 1 /* ' flag */
|
||||||
|
#define FLAG_LEFT 2 /* - flag */
|
||||||
|
#define FLAG_SHOWSIGN 4 /* + flag */
|
||||||
|
#define FLAG_SPACE 8 /* space flag */
|
||||||
|
#define FLAG_ALT 16 /* # flag */
|
||||||
|
#define FLAG_ZERO 32
|
||||||
|
|
||||||
|
/* arg_index value indicating that no argument is consumed. */
|
||||||
|
#define ARG_NONE (~(size_t)0)
|
||||||
|
|
||||||
|
/* xxx_directive: A parsed directive.
|
||||||
|
xxx_directives: A parsed format string. */
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char* dir_start;
|
||||||
|
const char* dir_end;
|
||||||
|
int flags;
|
||||||
|
const char* width_start;
|
||||||
|
const char* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const char* precision_start;
|
||||||
|
const char* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
char_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
char_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
char_directives;
|
||||||
|
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const uint8_t* dir_start;
|
||||||
|
const uint8_t* dir_end;
|
||||||
|
int flags;
|
||||||
|
const uint8_t* width_start;
|
||||||
|
const uint8_t* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const uint8_t* precision_start;
|
||||||
|
const uint8_t* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
u8_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
u8_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
u8_directives;
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const uint16_t* dir_start;
|
||||||
|
const uint16_t* dir_end;
|
||||||
|
int flags;
|
||||||
|
const uint16_t* width_start;
|
||||||
|
const uint16_t* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const uint16_t* precision_start;
|
||||||
|
const uint16_t* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
u16_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
u16_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
u16_directives;
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const uint32_t* dir_start;
|
||||||
|
const uint32_t* dir_end;
|
||||||
|
int flags;
|
||||||
|
const uint32_t* width_start;
|
||||||
|
const uint32_t* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const uint32_t* precision_start;
|
||||||
|
const uint32_t* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
u32_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
u32_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
u32_directives;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Parses the format string. Fills in the number N of directives, and fills
|
||||||
|
in directives[0], ..., directives[N-1], and sets directives[N].dir_start
|
||||||
|
to the end of the format string. Also fills in the arg_type fields of the
|
||||||
|
arguments and the needed count of arguments. */
|
||||||
|
#if ENABLE_UNISTDIO
|
||||||
|
extern int
|
||||||
|
ulc_printf_parse (const char *format, char_directives *d, arguments *a);
|
||||||
|
extern int
|
||||||
|
u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
|
||||||
|
extern int
|
||||||
|
u16_printf_parse (const uint16_t *format, u16_directives *d,
|
||||||
|
arguments *a);
|
||||||
|
extern int
|
||||||
|
u32_printf_parse (const uint32_t *format, u32_directives *d,
|
||||||
|
arguments *a);
|
||||||
|
#else
|
||||||
|
# ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
# else
|
||||||
|
extern
|
||||||
|
# endif
|
||||||
|
int printf_parse (const char *format, char_directives *d, arguments *a);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _PRINTF_PARSE_H */
|
31
libgnu/size_max.h
Normal file
31
libgnu/size_max.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* size_max.h -- declare SIZE_MAX through system headers
|
||||||
|
Copyright (C) 2005-2006 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 GNULIB_SIZE_MAX_H
|
||||||
|
#define GNULIB_SIZE_MAX_H
|
||||||
|
|
||||||
|
/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */
|
||||||
|
# include <limits.h>
|
||||||
|
/* Get SIZE_MAX declaration on systems like glibc 2. */
|
||||||
|
# if HAVE_STDINT_H
|
||||||
|
# include <stdint.h>
|
||||||
|
# endif
|
||||||
|
/* On systems where these include files don't define it, SIZE_MAX is defined
|
||||||
|
in config.h. */
|
||||||
|
|
||||||
|
#endif /* GNULIB_SIZE_MAX_H */
|
77
libgnu/snprintf.c
Normal file
77
libgnu/snprintf.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/* Formatted output to strings.
|
||||||
|
Copyright (C) 2004, 2006-2007 Free Software Foundation, Inc.
|
||||||
|
Written by Simon Josefsson and Paul Eggert.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "vasnprintf.h"
|
||||||
|
|
||||||
|
/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */
|
||||||
|
#ifndef EOVERFLOW
|
||||||
|
# define EOVERFLOW E2BIG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Print formatted output to string STR. Similar to sprintf, but
|
||||||
|
additional length SIZE limit how much is written into STR. Returns
|
||||||
|
string length of formatted string (which may be larger than SIZE).
|
||||||
|
STR may be NULL, in which case nothing will be written. On error,
|
||||||
|
return a negative value. */
|
||||||
|
int
|
||||||
|
snprintf (char *str, size_t size, const char *format, ...)
|
||||||
|
{
|
||||||
|
char *output;
|
||||||
|
size_t len;
|
||||||
|
size_t lenbuf = size;
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
output = vasnprintf (str, &lenbuf, format, args);
|
||||||
|
len = lenbuf;
|
||||||
|
va_end (args);
|
||||||
|
|
||||||
|
if (!output)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (output != str)
|
||||||
|
{
|
||||||
|
if (size)
|
||||||
|
{
|
||||||
|
size_t pruned_len = (len < size ? len : size - 1);
|
||||||
|
memcpy (str, output, pruned_len);
|
||||||
|
str[pruned_len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
free (output);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (INT_MAX < len)
|
||||||
|
{
|
||||||
|
errno = EOVERFLOW;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
118
libgnu/stdbool_.h
Normal file
118
libgnu/stdbool_.h
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/* Copyright (C) 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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_STDBOOL_H
|
||||||
|
#define _GL_STDBOOL_H
|
||||||
|
|
||||||
|
/* ISO C 99 <stdbool.h> for platforms that lack it. */
|
||||||
|
|
||||||
|
/* Usage suggestions:
|
||||||
|
|
||||||
|
Programs that use <stdbool.h> should be aware of some limitations
|
||||||
|
and standards compliance issues.
|
||||||
|
|
||||||
|
Standards compliance:
|
||||||
|
|
||||||
|
- <stdbool.h> must be #included before 'bool', 'false', 'true'
|
||||||
|
can be used.
|
||||||
|
|
||||||
|
- You cannot assume that sizeof (bool) == 1.
|
||||||
|
|
||||||
|
- Programs should not undefine the macros bool, true, and false,
|
||||||
|
as C99 lists that as an "obsolescent feature".
|
||||||
|
|
||||||
|
Limitations of this substitute, when used in a C89 environment:
|
||||||
|
|
||||||
|
- <stdbool.h> must be #included before the '_Bool' type can be used.
|
||||||
|
|
||||||
|
- You cannot assume that _Bool is a typedef; it might be a macro.
|
||||||
|
|
||||||
|
- Bit-fields of type 'bool' are not supported. Portable code
|
||||||
|
should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
|
||||||
|
|
||||||
|
- In C99, casts and automatic conversions to '_Bool' or 'bool' are
|
||||||
|
performed in such a way that every nonzero value gets converted
|
||||||
|
to 'true', and zero gets converted to 'false'. This doesn't work
|
||||||
|
with this substitute. With this substitute, only the values 0 and 1
|
||||||
|
give the expected result when converted to _Bool' or 'bool'.
|
||||||
|
|
||||||
|
Also, it is suggested that programs use 'bool' rather than '_Bool';
|
||||||
|
this isn't required, but 'bool' is more common. */
|
||||||
|
|
||||||
|
|
||||||
|
/* 7.16. Boolean type and values */
|
||||||
|
|
||||||
|
/* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same
|
||||||
|
definitions below, but temporarily we have to #undef them. */
|
||||||
|
#ifdef __BEOS__
|
||||||
|
# include <OS.h> /* defines bool but not _Bool */
|
||||||
|
# undef false
|
||||||
|
# undef true
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For the sake of symbolic names in gdb, we define true and false as
|
||||||
|
enum constants, not only as macros.
|
||||||
|
It is tempting to write
|
||||||
|
typedef enum { false = 0, true = 1 } _Bool;
|
||||||
|
so that gdb prints values of type 'bool' symbolically. But if we do
|
||||||
|
this, values of type '_Bool' may promote to 'int' or 'unsigned int'
|
||||||
|
(see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
|
||||||
|
(see ISO C 99 6.3.1.1.(2)). So we add a negative value to the
|
||||||
|
enum; this ensures that '_Bool' promotes to 'int'. */
|
||||||
|
#if defined __cplusplus || defined __BEOS__
|
||||||
|
/* A compiler known to have 'bool'. */
|
||||||
|
/* If the compiler already has both 'bool' and '_Bool', we can assume they
|
||||||
|
are the same types. */
|
||||||
|
# if !@HAVE__BOOL@
|
||||||
|
typedef bool _Bool;
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# if !defined __GNUC__
|
||||||
|
/* If @HAVE__BOOL@:
|
||||||
|
Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
|
||||||
|
the built-in _Bool type is used. See
|
||||||
|
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
|
||||||
|
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
|
||||||
|
http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
|
||||||
|
Similar bugs are likely with other compilers as well; this file
|
||||||
|
wouldn't be used if <stdbool.h> was working.
|
||||||
|
So we override the _Bool type.
|
||||||
|
If !@HAVE__BOOL@:
|
||||||
|
Need to define _Bool ourselves. As 'signed char' or as an enum type?
|
||||||
|
Use of a typedef, with SunPRO C, leads to a stupid
|
||||||
|
"warning: _Bool is a keyword in ISO C99".
|
||||||
|
Use of an enum type, with IRIX cc, leads to a stupid
|
||||||
|
"warning(1185): enumerated type mixed with another type".
|
||||||
|
The only benefit of the enum type, debuggability, is not important
|
||||||
|
with these compilers. So use 'signed char' and no typedef. */
|
||||||
|
# define _Bool signed char
|
||||||
|
enum { false = 0, true = 1 };
|
||||||
|
# else
|
||||||
|
/* With this compiler, trust the _Bool type if the compiler has it. */
|
||||||
|
# if !@HAVE__BOOL@
|
||||||
|
typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define bool _Bool
|
||||||
|
|
||||||
|
/* The other macros must be usable in preprocessor directives. */
|
||||||
|
#define false 0
|
||||||
|
#define true 1
|
||||||
|
#define __bool_true_false_are_defined 1
|
||||||
|
|
||||||
|
#endif /* _GL_STDBOOL_H */
|
508
libgnu/stdint_.h
Normal file
508
libgnu/stdint_.h
Normal file
@ -0,0 +1,508 @@
|
|||||||
|
/* Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc.
|
||||||
|
Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
|
||||||
|
This file is part of gnulib.
|
||||||
|
|
||||||
|
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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ISO C 99 <stdint.h> for platforms that lack it.
|
||||||
|
* <http://www.opengroup.org/susv3xbd/stdint.h.html>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _GL_STDINT_H
|
||||||
|
|
||||||
|
/* Get those types that are already defined in other system include
|
||||||
|
files, so that we can "#define int8_t signed char" below without
|
||||||
|
worrying about a later system include file containing a "typedef
|
||||||
|
signed char int8_t;" that will get messed up by our macro. Our
|
||||||
|
macros should all be consistent with the system versions, except
|
||||||
|
for the "fast" types and macros, which we recommend against using
|
||||||
|
in public interfaces due to compiler differences. */
|
||||||
|
|
||||||
|
#if @HAVE_STDINT_H@
|
||||||
|
# if defined __sgi && ! defined __c99
|
||||||
|
/* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
|
||||||
|
with "This header file is to be used only for c99 mode compilations"
|
||||||
|
diagnostics. */
|
||||||
|
# define __STDINT_H__
|
||||||
|
# endif
|
||||||
|
/* Other systems may have an incomplete or buggy <stdint.h>.
|
||||||
|
Include it before <inttypes.h>, since any "#include <stdint.h>"
|
||||||
|
in <inttypes.h> would reinclude us, skipping our contents because
|
||||||
|
_GL_STDINT_H is defined.
|
||||||
|
The include_next requires a split double-inclusion guard. */
|
||||||
|
# @INCLUDE_NEXT@ @NEXT_STDINT_H@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
|
||||||
|
#define _GL_STDINT_H
|
||||||
|
|
||||||
|
/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
|
||||||
|
IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
|
||||||
|
AIX 5.2 <sys/types.h> isn't needed and causes troubles.
|
||||||
|
MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
|
||||||
|
relies on the system <stdint.h> definitions, so include
|
||||||
|
<sys/types.h> after @NEXT_STDINT_H@. */
|
||||||
|
#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#if @HAVE_INTTYPES_H@
|
||||||
|
/* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
|
||||||
|
int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
|
||||||
|
<inttypes.h> also defines intptr_t and uintptr_t. */
|
||||||
|
# define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
|
||||||
|
# include <inttypes.h>
|
||||||
|
# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
|
||||||
|
#elif @HAVE_SYS_INTTYPES_H@
|
||||||
|
/* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
|
||||||
|
the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */
|
||||||
|
# include <sys/inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
|
||||||
|
/* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
|
||||||
|
int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is
|
||||||
|
included by <sys/types.h>. */
|
||||||
|
# include <sys/bitypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
|
||||||
|
|
||||||
|
/* Get WCHAR_MIN, WCHAR_MAX. */
|
||||||
|
# if ! (defined WCHAR_MIN && defined WCHAR_MAX)
|
||||||
|
# include <wchar.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Minimum and maximum values for a integer type under the usual assumption.
|
||||||
|
Return an unspecified value if BITS == 0, adding a check to pacify
|
||||||
|
picky compilers. */
|
||||||
|
|
||||||
|
#define _STDINT_MIN(signed, bits, zero) \
|
||||||
|
((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
|
||||||
|
|
||||||
|
#define _STDINT_MAX(signed, bits, zero) \
|
||||||
|
((signed) \
|
||||||
|
? ~ _STDINT_MIN (signed, bits, zero) \
|
||||||
|
: ((((zero) + 1) << ((bits) ? (bits) - 1 : 0)) - 1) * 2 + 1)
|
||||||
|
|
||||||
|
/* 7.18.1.1. Exact-width integer types */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. */
|
||||||
|
|
||||||
|
#undef int8_t
|
||||||
|
#undef uint8_t
|
||||||
|
#define int8_t signed char
|
||||||
|
#define uint8_t unsigned char
|
||||||
|
|
||||||
|
#undef int16_t
|
||||||
|
#undef uint16_t
|
||||||
|
#define int16_t short int
|
||||||
|
#define uint16_t unsigned short int
|
||||||
|
|
||||||
|
#undef int32_t
|
||||||
|
#undef uint32_t
|
||||||
|
#define int32_t int
|
||||||
|
#define uint32_t unsigned int
|
||||||
|
|
||||||
|
/* Do not undefine int64_t if gnulib is not being used with 64-bit
|
||||||
|
types, since otherwise it breaks platforms like Tandem/NSK. */
|
||||||
|
#if LONG_MAX >> 31 >> 31 == 1
|
||||||
|
# undef int64_t
|
||||||
|
# define int64_t long int
|
||||||
|
# define GL_INT64_T
|
||||||
|
#elif defined _MSC_VER
|
||||||
|
# undef int64_t
|
||||||
|
# define int64_t __int64
|
||||||
|
# define GL_INT64_T
|
||||||
|
#elif @HAVE_LONG_LONG_INT@
|
||||||
|
# undef int64_t
|
||||||
|
# define int64_t long long int
|
||||||
|
# define GL_INT64_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ULONG_MAX >> 31 >> 31 >> 1 == 1
|
||||||
|
# undef uint64_t
|
||||||
|
# define uint64_t unsigned long int
|
||||||
|
# define GL_UINT64_T
|
||||||
|
#elif defined _MSC_VER
|
||||||
|
# undef uint64_t
|
||||||
|
# define uint64_t unsigned __int64
|
||||||
|
# define GL_UINT64_T
|
||||||
|
#elif @HAVE_UNSIGNED_LONG_LONG_INT@
|
||||||
|
# undef uint64_t
|
||||||
|
# define uint64_t unsigned long long int
|
||||||
|
# define GL_UINT64_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */
|
||||||
|
#define _UINT8_T
|
||||||
|
#define _UINT32_T
|
||||||
|
#define _UINT64_T
|
||||||
|
|
||||||
|
|
||||||
|
/* 7.18.1.2. Minimum-width integer types */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
|
||||||
|
are the same as the corresponding N_t types. */
|
||||||
|
|
||||||
|
#undef int_least8_t
|
||||||
|
#undef uint_least8_t
|
||||||
|
#undef int_least16_t
|
||||||
|
#undef uint_least16_t
|
||||||
|
#undef int_least32_t
|
||||||
|
#undef uint_least32_t
|
||||||
|
#undef int_least64_t
|
||||||
|
#undef uint_least64_t
|
||||||
|
#define int_least8_t int8_t
|
||||||
|
#define uint_least8_t uint8_t
|
||||||
|
#define int_least16_t int16_t
|
||||||
|
#define uint_least16_t uint16_t
|
||||||
|
#define int_least32_t int32_t
|
||||||
|
#define uint_least32_t uint32_t
|
||||||
|
#ifdef GL_INT64_T
|
||||||
|
# define int_least64_t int64_t
|
||||||
|
#endif
|
||||||
|
#ifdef GL_UINT64_T
|
||||||
|
# define uint_least64_t uint64_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.1.3. Fastest minimum-width integer types */
|
||||||
|
|
||||||
|
/* Note: Other <stdint.h> substitutes may define these types differently.
|
||||||
|
It is not recommended to use these types in public header files. */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
|
||||||
|
are taken from the same list of types. Assume that 'long int'
|
||||||
|
is fast enough for all narrower integers. */
|
||||||
|
|
||||||
|
#undef int_fast8_t
|
||||||
|
#undef uint_fast8_t
|
||||||
|
#undef int_fast16_t
|
||||||
|
#undef uint_fast16_t
|
||||||
|
#undef int_fast32_t
|
||||||
|
#undef uint_fast32_t
|
||||||
|
#undef int_fast64_t
|
||||||
|
#undef uint_fast64_t
|
||||||
|
#define int_fast8_t long int
|
||||||
|
#define uint_fast8_t unsigned int_fast8_t
|
||||||
|
#define int_fast16_t long int
|
||||||
|
#define uint_fast16_t unsigned int_fast16_t
|
||||||
|
#define int_fast32_t long int
|
||||||
|
#define uint_fast32_t unsigned int_fast32_t
|
||||||
|
#ifdef GL_INT64_T
|
||||||
|
# define int_fast64_t int64_t
|
||||||
|
#endif
|
||||||
|
#ifdef GL_UINT64_T
|
||||||
|
# define uint_fast64_t uint64_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.1.4. Integer types capable of holding object pointers */
|
||||||
|
|
||||||
|
#undef intptr_t
|
||||||
|
#undef uintptr_t
|
||||||
|
#define intptr_t long int
|
||||||
|
#define uintptr_t unsigned long int
|
||||||
|
|
||||||
|
/* 7.18.1.5. Greatest-width integer types */
|
||||||
|
|
||||||
|
/* Note: These types are compiler dependent. It may be unwise to use them in
|
||||||
|
public header files. */
|
||||||
|
|
||||||
|
#undef intmax_t
|
||||||
|
#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
|
||||||
|
# define intmax_t long long int
|
||||||
|
#elif defined GL_INT64_T
|
||||||
|
# define intmax_t int64_t
|
||||||
|
#else
|
||||||
|
# define intmax_t long int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef uintmax_t
|
||||||
|
#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
|
||||||
|
# define uintmax_t unsigned long long int
|
||||||
|
#elif defined GL_UINT64_T
|
||||||
|
# define uintmax_t uint64_t
|
||||||
|
#else
|
||||||
|
# define uintmax_t unsigned long int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.2. Limits of specified-width integer types */
|
||||||
|
|
||||||
|
#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
|
||||||
|
|
||||||
|
/* 7.18.2.1. Limits of exact-width integer types */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. */
|
||||||
|
|
||||||
|
#undef INT8_MIN
|
||||||
|
#undef INT8_MAX
|
||||||
|
#undef UINT8_MAX
|
||||||
|
#define INT8_MIN (~ INT8_MAX)
|
||||||
|
#define INT8_MAX 127
|
||||||
|
#define UINT8_MAX 255
|
||||||
|
|
||||||
|
#undef INT16_MIN
|
||||||
|
#undef INT16_MAX
|
||||||
|
#undef UINT16_MAX
|
||||||
|
#define INT16_MIN (~ INT16_MAX)
|
||||||
|
#define INT16_MAX 32767
|
||||||
|
#define UINT16_MAX 65535
|
||||||
|
|
||||||
|
#undef INT32_MIN
|
||||||
|
#undef INT32_MAX
|
||||||
|
#undef UINT32_MAX
|
||||||
|
#define INT32_MIN (~ INT32_MAX)
|
||||||
|
#define INT32_MAX 2147483647
|
||||||
|
#define UINT32_MAX 4294967295U
|
||||||
|
|
||||||
|
#undef INT64_MIN
|
||||||
|
#undef INT64_MAX
|
||||||
|
#ifdef GL_INT64_T
|
||||||
|
/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
|
||||||
|
evaluates the latter incorrectly in preprocessor expressions. */
|
||||||
|
# define INT64_MIN (- INTMAX_C (1) << 63)
|
||||||
|
# define INT64_MAX INTMAX_C (9223372036854775807)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UINT64_MAX
|
||||||
|
#ifdef GL_UINT64_T
|
||||||
|
# define UINT64_MAX UINTMAX_C (18446744073709551615)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.2.2. Limits of minimum-width integer types */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
|
||||||
|
are the same as the corresponding N_t types. */
|
||||||
|
|
||||||
|
#undef INT_LEAST8_MIN
|
||||||
|
#undef INT_LEAST8_MAX
|
||||||
|
#undef UINT_LEAST8_MAX
|
||||||
|
#define INT_LEAST8_MIN INT8_MIN
|
||||||
|
#define INT_LEAST8_MAX INT8_MAX
|
||||||
|
#define UINT_LEAST8_MAX UINT8_MAX
|
||||||
|
|
||||||
|
#undef INT_LEAST16_MIN
|
||||||
|
#undef INT_LEAST16_MAX
|
||||||
|
#undef UINT_LEAST16_MAX
|
||||||
|
#define INT_LEAST16_MIN INT16_MIN
|
||||||
|
#define INT_LEAST16_MAX INT16_MAX
|
||||||
|
#define UINT_LEAST16_MAX UINT16_MAX
|
||||||
|
|
||||||
|
#undef INT_LEAST32_MIN
|
||||||
|
#undef INT_LEAST32_MAX
|
||||||
|
#undef UINT_LEAST32_MAX
|
||||||
|
#define INT_LEAST32_MIN INT32_MIN
|
||||||
|
#define INT_LEAST32_MAX INT32_MAX
|
||||||
|
#define UINT_LEAST32_MAX UINT32_MAX
|
||||||
|
|
||||||
|
#undef INT_LEAST64_MIN
|
||||||
|
#undef INT_LEAST64_MAX
|
||||||
|
#ifdef GL_INT64_T
|
||||||
|
# define INT_LEAST64_MIN INT64_MIN
|
||||||
|
# define INT_LEAST64_MAX INT64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UINT_LEAST64_MAX
|
||||||
|
#ifdef GL_UINT64_T
|
||||||
|
# define UINT_LEAST64_MAX UINT64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.2.3. Limits of fastest minimum-width integer types */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
|
||||||
|
are taken from the same list of types. */
|
||||||
|
|
||||||
|
#undef INT_FAST8_MIN
|
||||||
|
#undef INT_FAST8_MAX
|
||||||
|
#undef UINT_FAST8_MAX
|
||||||
|
#define INT_FAST8_MIN LONG_MIN
|
||||||
|
#define INT_FAST8_MAX LONG_MAX
|
||||||
|
#define UINT_FAST8_MAX ULONG_MAX
|
||||||
|
|
||||||
|
#undef INT_FAST16_MIN
|
||||||
|
#undef INT_FAST16_MAX
|
||||||
|
#undef UINT_FAST16_MAX
|
||||||
|
#define INT_FAST16_MIN LONG_MIN
|
||||||
|
#define INT_FAST16_MAX LONG_MAX
|
||||||
|
#define UINT_FAST16_MAX ULONG_MAX
|
||||||
|
|
||||||
|
#undef INT_FAST32_MIN
|
||||||
|
#undef INT_FAST32_MAX
|
||||||
|
#undef UINT_FAST32_MAX
|
||||||
|
#define INT_FAST32_MIN LONG_MIN
|
||||||
|
#define INT_FAST32_MAX LONG_MAX
|
||||||
|
#define UINT_FAST32_MAX ULONG_MAX
|
||||||
|
|
||||||
|
#undef INT_FAST64_MIN
|
||||||
|
#undef INT_FAST64_MAX
|
||||||
|
#ifdef GL_INT64_T
|
||||||
|
# define INT_FAST64_MIN INT64_MIN
|
||||||
|
# define INT_FAST64_MAX INT64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UINT_FAST64_MAX
|
||||||
|
#ifdef GL_UINT64_T
|
||||||
|
# define UINT_FAST64_MAX UINT64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.2.4. Limits of integer types capable of holding object pointers */
|
||||||
|
|
||||||
|
#undef INTPTR_MIN
|
||||||
|
#undef INTPTR_MAX
|
||||||
|
#undef UINTPTR_MAX
|
||||||
|
#define INTPTR_MIN LONG_MIN
|
||||||
|
#define INTPTR_MAX LONG_MAX
|
||||||
|
#define UINTPTR_MAX ULONG_MAX
|
||||||
|
|
||||||
|
/* 7.18.2.5. Limits of greatest-width integer types */
|
||||||
|
|
||||||
|
#undef INTMAX_MIN
|
||||||
|
#undef INTMAX_MAX
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
# define INTMAX_MIN INT64_MIN
|
||||||
|
# define INTMAX_MAX INT64_MAX
|
||||||
|
#else
|
||||||
|
# define INTMAX_MIN INT32_MIN
|
||||||
|
# define INTMAX_MAX INT32_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UINTMAX_MAX
|
||||||
|
#ifdef UINT64_MAX
|
||||||
|
# define UINTMAX_MAX UINT64_MAX
|
||||||
|
#else
|
||||||
|
# define UINTMAX_MAX UINT32_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.3. Limits of other integer types */
|
||||||
|
|
||||||
|
/* ptrdiff_t limits */
|
||||||
|
#undef PTRDIFF_MIN
|
||||||
|
#undef PTRDIFF_MAX
|
||||||
|
#define PTRDIFF_MIN \
|
||||||
|
_STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
||||||
|
#define PTRDIFF_MAX \
|
||||||
|
_STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
|
||||||
|
|
||||||
|
/* sig_atomic_t limits */
|
||||||
|
#undef SIG_ATOMIC_MIN
|
||||||
|
#undef SIG_ATOMIC_MAX
|
||||||
|
#define SIG_ATOMIC_MIN \
|
||||||
|
_STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
||||||
|
0@SIG_ATOMIC_T_SUFFIX@)
|
||||||
|
#define SIG_ATOMIC_MAX \
|
||||||
|
_STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
|
||||||
|
0@SIG_ATOMIC_T_SUFFIX@)
|
||||||
|
|
||||||
|
|
||||||
|
/* size_t limit */
|
||||||
|
#undef SIZE_MAX
|
||||||
|
#define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
|
||||||
|
|
||||||
|
/* wchar_t limits */
|
||||||
|
#undef WCHAR_MIN
|
||||||
|
#undef WCHAR_MAX
|
||||||
|
#define WCHAR_MIN \
|
||||||
|
_STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||||
|
#define WCHAR_MAX \
|
||||||
|
_STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
|
||||||
|
|
||||||
|
/* wint_t limits */
|
||||||
|
#undef WINT_MIN
|
||||||
|
#undef WINT_MAX
|
||||||
|
#define WINT_MIN \
|
||||||
|
_STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||||
|
#define WINT_MAX \
|
||||||
|
_STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
|
||||||
|
|
||||||
|
#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
|
||||||
|
|
||||||
|
/* 7.18.4. Macros for integer constants */
|
||||||
|
|
||||||
|
#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
|
||||||
|
|
||||||
|
/* 7.18.4.1. Macros for minimum-width integer constants */
|
||||||
|
/* According to ISO C 99 Technical Corrigendum 1 */
|
||||||
|
|
||||||
|
/* Here we assume a standard architecture where the hardware integer
|
||||||
|
types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */
|
||||||
|
|
||||||
|
#undef INT8_C
|
||||||
|
#undef UINT8_C
|
||||||
|
#define INT8_C(x) x
|
||||||
|
#define UINT8_C(x) x
|
||||||
|
|
||||||
|
#undef INT16_C
|
||||||
|
#undef UINT16_C
|
||||||
|
#define INT16_C(x) x
|
||||||
|
#define UINT16_C(x) x
|
||||||
|
|
||||||
|
#undef INT32_C
|
||||||
|
#undef UINT32_C
|
||||||
|
#define INT32_C(x) x
|
||||||
|
#define UINT32_C(x) x ## U
|
||||||
|
|
||||||
|
#undef INT64_C
|
||||||
|
#undef UINT64_C
|
||||||
|
#if LONG_MAX >> 31 >> 31 == 1
|
||||||
|
# define INT64_C(x) x##L
|
||||||
|
#elif defined _MSC_VER
|
||||||
|
# define INT64_C(x) x##i64
|
||||||
|
#elif @HAVE_LONG_LONG_INT@
|
||||||
|
# define INT64_C(x) x##LL
|
||||||
|
#endif
|
||||||
|
#if ULONG_MAX >> 31 >> 31 >> 1 == 1
|
||||||
|
# define UINT64_C(x) x##UL
|
||||||
|
#elif defined _MSC_VER
|
||||||
|
# define UINT64_C(x) x##ui64
|
||||||
|
#elif @HAVE_UNSIGNED_LONG_LONG_INT@
|
||||||
|
# define UINT64_C(x) x##ULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 7.18.4.2. Macros for greatest-width integer constants */
|
||||||
|
|
||||||
|
#undef INTMAX_C
|
||||||
|
#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
|
||||||
|
# define INTMAX_C(x) x##LL
|
||||||
|
#elif defined GL_INT64_T
|
||||||
|
# define INTMAX_C(x) INT64_C(x)
|
||||||
|
#else
|
||||||
|
# define INTMAX_C(x) x##L
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef UINTMAX_C
|
||||||
|
#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
|
||||||
|
# define UINTMAX_C(x) x##ULL
|
||||||
|
#elif defined GL_UINT64_T
|
||||||
|
# define UINTMAX_C(x) UINT64_C(x)
|
||||||
|
#else
|
||||||
|
# define UINTMAX_C(x) x##UL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
|
||||||
|
|
||||||
|
#endif /* _GL_STDINT_H */
|
||||||
|
#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
|
353
libgnu/stdio_.h
Normal file
353
libgnu/stdio_.h
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
/* A GNU-like <stdio.h>.
|
||||||
|
|
||||||
|
Copyright (C) 2004, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#if defined __need_FILE || defined __need___FILE
|
||||||
|
/* Special invocation convention inside glibc header files. */
|
||||||
|
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STDIO_H@
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* Normal invocation convention. */
|
||||||
|
|
||||||
|
#ifndef _GL_STDIO_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STDIO_H@
|
||||||
|
|
||||||
|
#ifndef _GL_STDIO_H
|
||||||
|
#define _GL_STDIO_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) \
|
||||||
|
|| (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) \
|
||||||
|
|| (@GNULIB_GETDELIM@ && !@HAVE_DECL_GETDELIM@) \
|
||||||
|
|| (@GNULIB_GETLINE@ && (!@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@))
|
||||||
|
/* Get off_t and ssize_t. */
|
||||||
|
# include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __attribute__
|
||||||
|
/* This feature is available in gcc versions 2.5 and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
|
||||||
|
# define __attribute__(Spec) /* empty */
|
||||||
|
# endif
|
||||||
|
/* The __-protected variants of `format' and `printf' attributes
|
||||||
|
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
||||||
|
# define __format__ format
|
||||||
|
# define __printf__ printf
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FPRINTF_POSIX@
|
||||||
|
# if @REPLACE_FPRINTF@
|
||||||
|
# define fprintf rpl_fprintf
|
||||||
|
extern int fprintf (FILE *fp, const char *format, ...)
|
||||||
|
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fprintf
|
||||||
|
# define fprintf \
|
||||||
|
(GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \
|
||||||
|
"use gnulib module fprintf-posix for portable " \
|
||||||
|
"POSIX compliance"), \
|
||||||
|
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)));
|
||||||
|
# endif
|
||||||
|
#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 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 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)));
|
||||||
|
# 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_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_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_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_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
|
||||||
|
# if defined GNULIB_POSIXCHECK
|
||||||
|
# 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"), \
|
||||||
|
rpl_fseek (f, o, w))
|
||||||
|
# else
|
||||||
|
# define fseek rpl_fseek
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# ifndef 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"), \
|
||||||
|
fseek (f, o, w))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_FTELLO@
|
||||||
|
# if @REPLACE_FTELLO@
|
||||||
|
# define ftello rpl_ftello
|
||||||
|
extern off_t ftello (FILE *fp);
|
||||||
|
# define ftell(fp) ftello (fp)
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef ftello
|
||||||
|
# define ftello(f) \
|
||||||
|
(GL_LINK_WARNING ("ftello is unportable - " \
|
||||||
|
"use gnulib module ftello for portability"), \
|
||||||
|
ftello (f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_FTELL@ && @REPLACE_FTELL@
|
||||||
|
extern long rpl_ftell (FILE *fp);
|
||||||
|
# undef ftell
|
||||||
|
# if GNULIB_POSIXCHECK
|
||||||
|
# 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"), \
|
||||||
|
rpl_ftell (f))
|
||||||
|
# else
|
||||||
|
# define ftell rpl_ftell
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# ifndef 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"), \
|
||||||
|
ftell (f))
|
||||||
|
# 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);
|
||||||
|
# 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_GETDELIM@
|
||||||
|
# if !@HAVE_DECL_GETDELIM@
|
||||||
|
/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
|
||||||
|
NUL-terminate it). *LINEPTR is a pointer returned from malloc (or
|
||||||
|
NULL), pointing to *N characters of space. It is realloc'ed as
|
||||||
|
necessary. Returns the number of characters read (not including
|
||||||
|
the null terminator), or -1 on error or EOF. */
|
||||||
|
extern ssize_t getdelim (char **, size_t *, int delim, FILE *);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef getdelim
|
||||||
|
# define getdelim(l, s, d, f) \
|
||||||
|
(GL_LINK_WARNING ("getdelim is unportable - " \
|
||||||
|
"use gnulib module getdelim for portability"), \
|
||||||
|
getdelim (l, s, d, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_GETLINE@
|
||||||
|
# if @REPLACE_GETLINE@
|
||||||
|
# undef getline
|
||||||
|
# define getline rpl_getline
|
||||||
|
# endif
|
||||||
|
# if !@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@
|
||||||
|
/* Read up to (and including) a newline from FP into *LINEPTR (and
|
||||||
|
NUL-terminate it). *LINEPTR is a pointer returned from malloc (or
|
||||||
|
NULL), pointing to *N characters of space. It is realloc'ed as
|
||||||
|
necessary. Returns the number of characters read (not including
|
||||||
|
the null terminator), or -1 on error or EOF. */
|
||||||
|
extern ssize_t getline (char **, size_t *, FILE *);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef getline
|
||||||
|
# define getline(l, s, f) \
|
||||||
|
(GL_LINK_WARNING ("getline is unportable - " \
|
||||||
|
"use gnulib module getline for portability"), \
|
||||||
|
getline (l, s, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_STDIO_H */
|
||||||
|
#endif /* _GL_STDIO_H */
|
||||||
|
#endif
|
177
libgnu/stdlib_.h
Normal file
177
libgnu/stdlib_.h
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
/* A GNU-like <stdlib.h>.
|
||||||
|
|
||||||
|
Copyright (C) 1995, 2001-2002, 2006-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
#if defined __need_malloc_and_calloc
|
||||||
|
/* Special invocation convention inside glibc header files. */
|
||||||
|
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* Normal invocation convention. */
|
||||||
|
|
||||||
|
#ifndef _GL_STDLIB_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
|
||||||
|
|
||||||
|
#ifndef _GL_STDLIB_H
|
||||||
|
#define _GL_STDLIB_H
|
||||||
|
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Some systems do not define EXIT_*, despite otherwise supporting C89. */
|
||||||
|
#ifndef EXIT_SUCCESS
|
||||||
|
# define EXIT_SUCCESS 0
|
||||||
|
#endif
|
||||||
|
/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
|
||||||
|
with proper operation of xargs. */
|
||||||
|
#ifndef EXIT_FAILURE
|
||||||
|
# define EXIT_FAILURE 1
|
||||||
|
#elif EXIT_FAILURE != 1
|
||||||
|
# undef EXIT_FAILURE
|
||||||
|
# define EXIT_FAILURE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#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_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
|
||||||
|
# define calloc rpl_calloc
|
||||||
|
extern void * calloc (size_t nmemb, size_t size);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef calloc
|
||||||
|
# define calloc(n,s) \
|
||||||
|
(GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \
|
||||||
|
"use gnulib module calloc-posix for portability"), \
|
||||||
|
calloc (n, s))
|
||||||
|
#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.
|
||||||
|
If the first element refers to a "token" that is member of the given
|
||||||
|
NULL-terminated array of tokens:
|
||||||
|
- It replaces the comma with a NUL byte, updates *OPTIONP to point past
|
||||||
|
the first option and the comma, sets *VALUEP to the value of the
|
||||||
|
element (or NULL if it doesn't contain an "=" sign),
|
||||||
|
- It returns the index of the "token" in the given array of tokens.
|
||||||
|
Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
|
||||||
|
For more details see the POSIX:2001 specification.
|
||||||
|
http://www.opengroup.org/susv3xsh/getsubopt.html */
|
||||||
|
# if !@HAVE_GETSUBOPT@
|
||||||
|
extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef getsubopt
|
||||||
|
# define getsubopt(o,t,v) \
|
||||||
|
(GL_LINK_WARNING ("getsubopt is unportable - " \
|
||||||
|
"use gnulib module getsubopt for portability"), \
|
||||||
|
getsubopt (o, t, v))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_MKDTEMP@
|
||||||
|
# if !@HAVE_MKDTEMP@
|
||||||
|
/* Create a unique temporary directory from TEMPLATE.
|
||||||
|
The last six characters of TEMPLATE must be "XXXXXX";
|
||||||
|
they are replaced with a string that makes the directory name unique.
|
||||||
|
Returns TEMPLATE, or a null pointer if it cannot get a unique name.
|
||||||
|
The directory is created mode 700. */
|
||||||
|
extern char * mkdtemp (char * /*template*/);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mkdtemp
|
||||||
|
# define mkdtemp(t) \
|
||||||
|
(GL_LINK_WARNING ("mkdtemp is unportable - " \
|
||||||
|
"use gnulib module mkdtemp for portability"), \
|
||||||
|
mkdtemp (t))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_MKSTEMP@
|
||||||
|
# if @REPLACE_MKSTEMP@
|
||||||
|
/* 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 file is then created, 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. */
|
||||||
|
# define mkstemp rpl_mkstemp
|
||||||
|
extern int mkstemp (char * /*template*/);
|
||||||
|
# else
|
||||||
|
/* On MacOS X 10.3, only <unistd.h> declares mkstemp. */
|
||||||
|
# include <unistd.h>
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mkstemp
|
||||||
|
# define mkstemp(t) \
|
||||||
|
(GL_LINK_WARNING ("mkstemp is unportable - " \
|
||||||
|
"use gnulib module mkstemp for portability"), \
|
||||||
|
mkstemp (t))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_STDLIB_H */
|
||||||
|
#endif /* _GL_STDLIB_H */
|
||||||
|
#endif
|
55
libgnu/strdup.c
Normal file
55
libgnu/strdup.c
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007 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
|
||||||
|
it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _LIBC
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get specification. */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#undef __strdup
|
||||||
|
#ifdef _LIBC
|
||||||
|
# undef strdup
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef weak_alias
|
||||||
|
# define __strdup strdup
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Duplicate S, returning an identical malloc'd string. */
|
||||||
|
char *
|
||||||
|
__strdup (const char *s)
|
||||||
|
{
|
||||||
|
size_t len = strlen (s) + 1;
|
||||||
|
void *new = malloc (len);
|
||||||
|
|
||||||
|
if (new == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (char *) memcpy (new, s, len);
|
||||||
|
}
|
||||||
|
#ifdef libc_hidden_def
|
||||||
|
libc_hidden_def (__strdup)
|
||||||
|
#endif
|
||||||
|
#ifdef weak_alias
|
||||||
|
weak_alias (__strdup, strdup)
|
||||||
|
#endif
|
548
libgnu/string_.h
Normal file
548
libgnu/string_.h
Normal file
@ -0,0 +1,548 @@
|
|||||||
|
/* A GNU-like <string.h>.
|
||||||
|
|
||||||
|
Copyright (C) 1995-1996, 2001-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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_STRING_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#@INCLUDE_NEXT@ @NEXT_STRING_H@
|
||||||
|
|
||||||
|
#ifndef _GL_STRING_H
|
||||||
|
#define _GL_STRING_H
|
||||||
|
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Return the first occurrence of NEEDLE in HAYSTACK. */
|
||||||
|
#if @GNULIB_MEMMEM@
|
||||||
|
# if ! @HAVE_DECL_MEMMEM@
|
||||||
|
extern void *memmem (void const *__haystack, size_t __haystack_len,
|
||||||
|
void const *__needle, size_t __needle_len);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef memmem
|
||||||
|
# define memmem(a,al,b,bl) \
|
||||||
|
(GL_LINK_WARNING ("memmem is unportable - " \
|
||||||
|
"use gnulib module memmem for portability"), \
|
||||||
|
memmem (a, al, b, bl))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Copy N bytes of SRC to DEST, return pointer to bytes after the
|
||||||
|
last written byte. */
|
||||||
|
#if @GNULIB_MEMPCPY@
|
||||||
|
# if ! @HAVE_MEMPCPY@
|
||||||
|
extern void *mempcpy (void *restrict __dest, void const *restrict __src,
|
||||||
|
size_t __n);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mempcpy
|
||||||
|
# define mempcpy(a,b,n) \
|
||||||
|
(GL_LINK_WARNING ("mempcpy is unportable - " \
|
||||||
|
"use gnulib module mempcpy for portability"), \
|
||||||
|
mempcpy (a, b, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Search backwards through a block for a byte (specified as an int). */
|
||||||
|
#if @GNULIB_MEMRCHR@
|
||||||
|
# if ! @HAVE_DECL_MEMRCHR@
|
||||||
|
extern void *memrchr (void const *, int, size_t);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef memrchr
|
||||||
|
# define memrchr(a,b,c) \
|
||||||
|
(GL_LINK_WARNING ("memrchr is unportable - " \
|
||||||
|
"use gnulib module memrchr for portability"), \
|
||||||
|
memrchr (a, b, c))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
|
||||||
|
#if @GNULIB_STPCPY@
|
||||||
|
# if ! @HAVE_STPCPY@
|
||||||
|
extern char *stpcpy (char *restrict __dst, char const *restrict __src);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef stpcpy
|
||||||
|
# define stpcpy(a,b) \
|
||||||
|
(GL_LINK_WARNING ("stpcpy is unportable - " \
|
||||||
|
"use gnulib module stpcpy for portability"), \
|
||||||
|
stpcpy (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Copy no more than N bytes of SRC to DST, returning a pointer past the
|
||||||
|
last non-NUL byte written into DST. */
|
||||||
|
#if @GNULIB_STPNCPY@
|
||||||
|
# if ! @HAVE_STPNCPY@
|
||||||
|
# define stpncpy gnu_stpncpy
|
||||||
|
extern char *stpncpy (char *restrict __dst, char const *restrict __src,
|
||||||
|
size_t __n);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef stpncpy
|
||||||
|
# define stpncpy(a,b,n) \
|
||||||
|
(GL_LINK_WARNING ("stpncpy is unportable - " \
|
||||||
|
"use gnulib module stpncpy for portability"), \
|
||||||
|
stpncpy (a, b, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Compare strings S1 and S2, ignoring case, returning less than, equal to or
|
||||||
|
greater than zero if S1 is lexicographically less than, equal to or greater
|
||||||
|
than S2.
|
||||||
|
Note: This function does not work in multibyte locales. */
|
||||||
|
#if ! @HAVE_STRCASECMP@
|
||||||
|
extern int strcasecmp (char const *s1, char const *s2);
|
||||||
|
#endif
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strcasecmp() does not work with multibyte strings:
|
||||||
|
POSIX says that it operates on "strings", and "string" in POSIX is defined
|
||||||
|
as a sequence of bytes, not of characters. */
|
||||||
|
# undef strcasecmp
|
||||||
|
# define strcasecmp(a,b) \
|
||||||
|
(GL_LINK_WARNING ("strcasecmp cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbscasecmp if you care about " \
|
||||||
|
"internationalization, or use c_strcasecmp (from " \
|
||||||
|
"gnulib module c-strcase) if you want a locale " \
|
||||||
|
"independent function"), \
|
||||||
|
strcasecmp (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Compare no more than N bytes of strings S1 and S2, ignoring case,
|
||||||
|
returning less than, equal to or greater than zero if S1 is
|
||||||
|
lexicographically less than, equal to or greater than S2.
|
||||||
|
Note: This function cannot work correctly in multibyte locales. */
|
||||||
|
#if ! @HAVE_DECL_STRNCASECMP@
|
||||||
|
extern int strncasecmp (char const *s1, char const *s2, size_t n);
|
||||||
|
#endif
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strncasecmp() does not work with multibyte strings:
|
||||||
|
POSIX says that it operates on "strings", and "string" in POSIX is defined
|
||||||
|
as a sequence of bytes, not of characters. */
|
||||||
|
# undef strncasecmp
|
||||||
|
# define strncasecmp(a,b,n) \
|
||||||
|
(GL_LINK_WARNING ("strncasecmp cannot work correctly on character " \
|
||||||
|
"strings in multibyte locales - " \
|
||||||
|
"use mbsncasecmp or mbspcasecmp if you care about " \
|
||||||
|
"internationalization, or use c_strncasecmp (from " \
|
||||||
|
"gnulib module c-strcase) if you want a locale " \
|
||||||
|
"independent function"), \
|
||||||
|
strncasecmp (a, b, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strchr() does not work with multibyte strings if the locale encoding is
|
||||||
|
GB18030 and the character to be searched is a digit. */
|
||||||
|
# undef strchr
|
||||||
|
# define strchr(s,c) \
|
||||||
|
(GL_LINK_WARNING ("strchr cannot work correctly on character strings " \
|
||||||
|
"in some multibyte locales - " \
|
||||||
|
"use mbschr if you care about internationalization"), \
|
||||||
|
strchr (s, c))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Find the first occurrence of C in S or the final NUL byte. */
|
||||||
|
#if @GNULIB_STRCHRNUL@
|
||||||
|
# if ! @HAVE_STRCHRNUL@
|
||||||
|
extern char *strchrnul (char const *__s, int __c_in);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strchrnul
|
||||||
|
# define strchrnul(a,b) \
|
||||||
|
(GL_LINK_WARNING ("strchrnul is unportable - " \
|
||||||
|
"use gnulib module strchrnul for portability"), \
|
||||||
|
strchrnul (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Duplicate S, returning an identical malloc'd string. */
|
||||||
|
#if @GNULIB_STRDUP@
|
||||||
|
# if ! @HAVE_DECL_STRDUP@ && ! defined strdup
|
||||||
|
extern char *strdup (char const *__s);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strdup
|
||||||
|
# define strdup(a) \
|
||||||
|
(GL_LINK_WARNING ("strdup is unportable - " \
|
||||||
|
"use gnulib module strdup for portability"), \
|
||||||
|
strdup (a))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Return a newly allocated copy of at most N bytes of STRING. */
|
||||||
|
#if @GNULIB_STRNDUP@
|
||||||
|
# if ! @HAVE_STRNDUP@
|
||||||
|
# undef strndup
|
||||||
|
# define strndup rpl_strndup
|
||||||
|
# endif
|
||||||
|
# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
|
||||||
|
extern char *strndup (char const *__string, size_t __n);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strndup
|
||||||
|
# define strndup(a,n) \
|
||||||
|
(GL_LINK_WARNING ("strndup is unportable - " \
|
||||||
|
"use gnulib module strndup for portability"), \
|
||||||
|
strndup (a, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Find the length (number of bytes) of STRING, but scan at most
|
||||||
|
MAXLEN bytes. If no '\0' terminator is found in that many bytes,
|
||||||
|
return MAXLEN. */
|
||||||
|
#if @GNULIB_STRNLEN@
|
||||||
|
# if ! @HAVE_DECL_STRNLEN@
|
||||||
|
extern size_t strnlen (char const *__string, size_t __maxlen);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strnlen
|
||||||
|
# define strnlen(a,n) \
|
||||||
|
(GL_LINK_WARNING ("strnlen is unportable - " \
|
||||||
|
"use gnulib module strnlen for portability"), \
|
||||||
|
strnlen (a, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strcspn() assumes the second argument is a list of single-byte characters.
|
||||||
|
Even in this simple case, it does not work with multibyte strings if the
|
||||||
|
locale encoding is GB18030 and one of the characters to be searched is a
|
||||||
|
digit. */
|
||||||
|
# undef strcspn
|
||||||
|
# define strcspn(s,a) \
|
||||||
|
(GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbscspn if you care about internationalization"), \
|
||||||
|
strcspn (s, a))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Find the first occurrence in S of any character in ACCEPT. */
|
||||||
|
#if @GNULIB_STRPBRK@
|
||||||
|
# if ! @HAVE_STRPBRK@
|
||||||
|
extern char *strpbrk (char const *__s, char const *__accept);
|
||||||
|
# endif
|
||||||
|
# if defined GNULIB_POSIXCHECK
|
||||||
|
/* strpbrk() assumes the second argument is a list of single-byte characters.
|
||||||
|
Even in this simple case, it does not work with multibyte strings if the
|
||||||
|
locale encoding is GB18030 and one of the characters to be searched is a
|
||||||
|
digit. */
|
||||||
|
# undef strpbrk
|
||||||
|
# define strpbrk(s,a) \
|
||||||
|
(GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbspbrk if you care about internationalization"), \
|
||||||
|
strpbrk (s, a))
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strpbrk
|
||||||
|
# define strpbrk(s,a) \
|
||||||
|
(GL_LINK_WARNING ("strpbrk is unportable - " \
|
||||||
|
"use gnulib module strpbrk for portability"), \
|
||||||
|
strpbrk (s, a))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strspn() assumes the second argument is a list of single-byte characters.
|
||||||
|
Even in this simple case, it cannot work with multibyte strings. */
|
||||||
|
# undef strspn
|
||||||
|
# define strspn(s,a) \
|
||||||
|
(GL_LINK_WARNING ("strspn cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbsspn if you care about internationalization"), \
|
||||||
|
strspn (s, a))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strrchr() does not work with multibyte strings if the locale encoding is
|
||||||
|
GB18030 and the character to be searched is a digit. */
|
||||||
|
# undef strrchr
|
||||||
|
# define strrchr(s,c) \
|
||||||
|
(GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \
|
||||||
|
"in some multibyte locales - " \
|
||||||
|
"use mbsrchr if you care about internationalization"), \
|
||||||
|
strrchr (s, c))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
|
||||||
|
If one is found, overwrite it with a NUL, and advance *STRINGP
|
||||||
|
to point to the next char after it. Otherwise, set *STRINGP to NULL.
|
||||||
|
If *STRINGP was already NULL, nothing happens.
|
||||||
|
Return the old value of *STRINGP.
|
||||||
|
|
||||||
|
This is a variant of strtok() that is multithread-safe and supports
|
||||||
|
empty fields.
|
||||||
|
|
||||||
|
Caveat: It modifies the original string.
|
||||||
|
Caveat: These functions cannot be used on constant strings.
|
||||||
|
Caveat: The identity of the delimiting character is lost.
|
||||||
|
Caveat: It doesn't work with multibyte strings unless all of the delimiter
|
||||||
|
characters are ASCII characters < 0x30.
|
||||||
|
|
||||||
|
See also strtok_r(). */
|
||||||
|
#if @GNULIB_STRSEP@
|
||||||
|
# if ! @HAVE_STRSEP@
|
||||||
|
extern char *strsep (char **restrict __stringp, char const *restrict __delim);
|
||||||
|
# endif
|
||||||
|
# if defined GNULIB_POSIXCHECK
|
||||||
|
# undef strsep
|
||||||
|
# define strsep(s,d) \
|
||||||
|
(GL_LINK_WARNING ("strsep cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbssep if you care about internationalization"), \
|
||||||
|
strsep (s, d))
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strsep
|
||||||
|
# define strsep(s,d) \
|
||||||
|
(GL_LINK_WARNING ("strsep is unportable - " \
|
||||||
|
"use gnulib module strsep for portability"), \
|
||||||
|
strsep (s, d))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strstr() does not work with multibyte strings if the locale encoding is
|
||||||
|
different from UTF-8:
|
||||||
|
POSIX says that it operates on "strings", and "string" in POSIX is defined
|
||||||
|
as a sequence of bytes, not of characters. */
|
||||||
|
# undef strstr
|
||||||
|
# define strstr(a,b) \
|
||||||
|
(GL_LINK_WARNING ("strstr cannot work correctly on character strings " \
|
||||||
|
"in most multibyte locales - " \
|
||||||
|
"use mbsstr if you care about internationalization"), \
|
||||||
|
strstr (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
|
||||||
|
comparison. */
|
||||||
|
#if ! @HAVE_STRCASESTR@
|
||||||
|
extern char *strcasestr (const char *haystack, const char *needle);
|
||||||
|
#endif
|
||||||
|
#if defined GNULIB_POSIXCHECK
|
||||||
|
/* strcasestr() does not work with multibyte strings:
|
||||||
|
It is a glibc extension, and glibc implements it only for unibyte
|
||||||
|
locales. */
|
||||||
|
# undef strcasestr
|
||||||
|
# define strcasestr(a,b) \
|
||||||
|
(GL_LINK_WARNING ("strcasestr does work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbscasestr if you care about " \
|
||||||
|
"internationalization, or use c-strcasestr if you want " \
|
||||||
|
"a locale independent function"), \
|
||||||
|
strcasestr (a, b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Parse S into tokens separated by characters in DELIM.
|
||||||
|
If S is NULL, the saved pointer in SAVE_PTR is used as
|
||||||
|
the next starting point. For example:
|
||||||
|
char s[] = "-abc-=-def";
|
||||||
|
char *sp;
|
||||||
|
x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
|
||||||
|
x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
|
||||||
|
x = strtok_r(NULL, "=", &sp); // x = NULL
|
||||||
|
// s = "abc\0-def\0"
|
||||||
|
|
||||||
|
This is a variant of strtok() that is multithread-safe.
|
||||||
|
|
||||||
|
For the POSIX documentation for this function, see:
|
||||||
|
http://www.opengroup.org/susv3xsh/strtok.html
|
||||||
|
|
||||||
|
Caveat: It modifies the original string.
|
||||||
|
Caveat: These functions cannot be used on constant strings.
|
||||||
|
Caveat: The identity of the delimiting character is lost.
|
||||||
|
Caveat: It doesn't work with multibyte strings unless all of the delimiter
|
||||||
|
characters are ASCII characters < 0x30.
|
||||||
|
|
||||||
|
See also strsep(). */
|
||||||
|
#if @GNULIB_STRTOK_R@
|
||||||
|
# if ! @HAVE_DECL_STRTOK_R@
|
||||||
|
extern char *strtok_r (char *restrict s, char const *restrict delim,
|
||||||
|
char **restrict save_ptr);
|
||||||
|
# endif
|
||||||
|
# if defined GNULIB_POSIXCHECK
|
||||||
|
# undef strtok_r
|
||||||
|
# define strtok_r(s,d,p) \
|
||||||
|
(GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \
|
||||||
|
"in multibyte locales - " \
|
||||||
|
"use mbstok_r if you care about internationalization"), \
|
||||||
|
strtok_r (s, d, p))
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef strtok_r
|
||||||
|
# define strtok_r(s,d,p) \
|
||||||
|
(GL_LINK_WARNING ("strtok_r is unportable - " \
|
||||||
|
"use gnulib module strtok_r for portability"), \
|
||||||
|
strtok_r (s, d, p))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* The following functions are not specified by POSIX. They are gnulib
|
||||||
|
extensions. */
|
||||||
|
|
||||||
|
#if @GNULIB_MBSLEN@
|
||||||
|
/* Return the number of multibyte characters in the character string STRING.
|
||||||
|
This considers multibyte characters, unlike strlen, which counts bytes. */
|
||||||
|
extern size_t mbslen (const char *string);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSNLEN@
|
||||||
|
/* Return the number of multibyte characters in the character string starting
|
||||||
|
at STRING and ending at STRING + LEN. */
|
||||||
|
extern size_t mbsnlen (const char *string, size_t len);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSCHR@
|
||||||
|
/* Locate the first single-byte character C in the character string STRING,
|
||||||
|
and return a pointer to it. Return NULL if C is not found in STRING.
|
||||||
|
Unlike strchr(), this function works correctly in multibyte locales with
|
||||||
|
encodings such as GB18030. */
|
||||||
|
# define mbschr rpl_mbschr /* avoid collision with HP-UX function */
|
||||||
|
extern char * mbschr (const char *string, int c);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSRCHR@
|
||||||
|
/* Locate the last single-byte character C in the character string STRING,
|
||||||
|
and return a pointer to it. Return NULL if C is not found in STRING.
|
||||||
|
Unlike strrchr(), this function works correctly in multibyte locales with
|
||||||
|
encodings such as GB18030. */
|
||||||
|
# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
|
||||||
|
extern char * mbsrchr (const char *string, int c);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSSTR@
|
||||||
|
/* Find the first occurrence of the character string NEEDLE in the character
|
||||||
|
string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK.
|
||||||
|
Unlike strstr(), this function works correctly in multibyte locales with
|
||||||
|
encodings different from UTF-8. */
|
||||||
|
extern char * mbsstr (const char *haystack, const char *needle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSCASECMP@
|
||||||
|
/* Compare the character strings S1 and S2, ignoring case, returning less than,
|
||||||
|
equal to or greater than zero if S1 is lexicographically less than, equal to
|
||||||
|
or greater than S2.
|
||||||
|
Note: This function may, in multibyte locales, return 0 for strings of
|
||||||
|
different lengths!
|
||||||
|
Unlike strcasecmp(), this function works correctly in multibyte locales. */
|
||||||
|
extern int mbscasecmp (const char *s1, const char *s2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSNCASECMP@
|
||||||
|
/* Compare the initial segment of the character string S1 consisting of at most
|
||||||
|
N characters with the initial segment of the character string S2 consisting
|
||||||
|
of at most N characters, ignoring case, returning less than, equal to or
|
||||||
|
greater than zero if the initial segment of S1 is lexicographically less
|
||||||
|
than, equal to or greater than the initial segment of S2.
|
||||||
|
Note: This function may, in multibyte locales, return 0 for initial segments
|
||||||
|
of different lengths!
|
||||||
|
Unlike strncasecmp(), this function works correctly in multibyte locales.
|
||||||
|
But beware that N is not a byte count but a character count! */
|
||||||
|
extern int mbsncasecmp (const char *s1, const char *s2, size_t n);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSPCASECMP@
|
||||||
|
/* Compare the initial segment of the character string STRING consisting of
|
||||||
|
at most mbslen (PREFIX) characters with the character string PREFIX,
|
||||||
|
ignoring case, returning less than, equal to or greater than zero if this
|
||||||
|
initial segment is lexicographically less than, equal to or greater than
|
||||||
|
PREFIX.
|
||||||
|
Note: This function may, in multibyte locales, return 0 if STRING is of
|
||||||
|
smaller length than PREFIX!
|
||||||
|
Unlike strncasecmp(), this function works correctly in multibyte
|
||||||
|
locales. */
|
||||||
|
extern char * mbspcasecmp (const char *string, const char *prefix);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSCASESTR@
|
||||||
|
/* Find the first occurrence of the character string NEEDLE in the character
|
||||||
|
string HAYSTACK, using case-insensitive comparison.
|
||||||
|
Note: This function may, in multibyte locales, return success even if
|
||||||
|
strlen (haystack) < strlen (needle) !
|
||||||
|
Unlike strcasestr(), this function works correctly in multibyte locales. */
|
||||||
|
extern char * mbscasestr (const char *haystack, const char *needle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSCSPN@
|
||||||
|
/* Find the first occurrence in the character string STRING of any character
|
||||||
|
in the character string ACCEPT. Return the number of bytes from the
|
||||||
|
beginning of the string to this occurrence, or to the end of the string
|
||||||
|
if none exists.
|
||||||
|
Unlike strcspn(), this function works correctly in multibyte locales. */
|
||||||
|
extern size_t mbscspn (const char *string, const char *accept);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSPBRK@
|
||||||
|
/* Find the first occurrence in the character string STRING of any character
|
||||||
|
in the character string ACCEPT. Return the pointer to it, or NULL if none
|
||||||
|
exists.
|
||||||
|
Unlike strpbrk(), this function works correctly in multibyte locales. */
|
||||||
|
# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
|
||||||
|
extern char * mbspbrk (const char *string, const char *accept);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSSPN@
|
||||||
|
/* Find the first occurrence in the character string STRING of any character
|
||||||
|
not in the character string REJECT. Return the number of bytes from the
|
||||||
|
beginning of the string to this occurrence, or to the end of the string
|
||||||
|
if none exists.
|
||||||
|
Unlike strspn(), this function works correctly in multibyte locales. */
|
||||||
|
extern size_t mbsspn (const char *string, const char *reject);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSSEP@
|
||||||
|
/* Search the next delimiter (multibyte character listed in the character
|
||||||
|
string DELIM) starting at the character string *STRINGP.
|
||||||
|
If one is found, overwrite it with a NUL, and advance *STRINGP to point
|
||||||
|
to the next multibyte character after it. Otherwise, set *STRINGP to NULL.
|
||||||
|
If *STRINGP was already NULL, nothing happens.
|
||||||
|
Return the old value of *STRINGP.
|
||||||
|
|
||||||
|
This is a variant of mbstok_r() that supports empty fields.
|
||||||
|
|
||||||
|
Caveat: It modifies the original string.
|
||||||
|
Caveat: These functions cannot be used on constant strings.
|
||||||
|
Caveat: The identity of the delimiting character is lost.
|
||||||
|
|
||||||
|
See also mbstok_r(). */
|
||||||
|
extern char * mbssep (char **stringp, const char *delim);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MBSTOK_R@
|
||||||
|
/* Parse the character string STRING into tokens separated by characters in
|
||||||
|
the character string DELIM.
|
||||||
|
If STRING is NULL, the saved pointer in SAVE_PTR is used as
|
||||||
|
the next starting point. For example:
|
||||||
|
char s[] = "-abc-=-def";
|
||||||
|
char *sp;
|
||||||
|
x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def"
|
||||||
|
x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL
|
||||||
|
x = mbstok_r(NULL, "=", &sp); // x = NULL
|
||||||
|
// s = "abc\0-def\0"
|
||||||
|
|
||||||
|
Caveat: It modifies the original string.
|
||||||
|
Caveat: These functions cannot be used on constant strings.
|
||||||
|
Caveat: The identity of the delimiting character is lost.
|
||||||
|
|
||||||
|
See also mbssep(). */
|
||||||
|
extern char * mbstok_r (char *string, const char *delim, char **save_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_STRING_H */
|
||||||
|
#endif /* _GL_STRING_H */
|
91
libgnu/sys_socket_.h
Normal file
91
libgnu/sys_socket_.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/* Provide a sys/socket header file for systems lacking it (read: MinGW).
|
||||||
|
Copyright (C) 2005, 2006, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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>
|
||||||
|
and on platforms where <sys/socket.h> cannot be included standalone.
|
||||||
|
It is intended to provide definitions and prototypes needed by an
|
||||||
|
application. */
|
||||||
|
|
||||||
|
#ifndef _GL_SYS_SOCKET_H
|
||||||
|
|
||||||
|
#if @HAVE_SYS_SOCKET_H@
|
||||||
|
|
||||||
|
/* 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_SYS_SOCKET_H@
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
# if defined _WIN32 || defined __WIN32__
|
||||||
|
# define ENOTSOCK WSAENOTSOCK
|
||||||
|
# define EADDRINUSE WSAEADDRINUSE
|
||||||
|
# define ENETRESET WSAENETRESET
|
||||||
|
# define ECONNABORTED WSAECONNABORTED
|
||||||
|
# define ECONNRESET WSAECONNRESET
|
||||||
|
# define ENOTCONN WSAENOTCONN
|
||||||
|
# define ESHUTDOWN WSAESHUTDOWN
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif /* HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
#endif /* _GL_SYS_SOCKET_H */
|
||||||
|
#endif /* _GL_SYS_SOCKET_H */
|
262
libgnu/unistd_.h
Normal file
262
libgnu/unistd_.h
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
/* Substitute for and wrapper around <unistd.h>.
|
||||||
|
Copyright (C) 2004-2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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_UNISTD_H
|
||||||
|
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#if @HAVE_UNISTD_H@
|
||||||
|
# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _GL_UNISTD_H
|
||||||
|
#define _GL_UNISTD_H
|
||||||
|
|
||||||
|
/* mingw doesn't define the SEEK_* macros in <unistd.h>. */
|
||||||
|
#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
|
||||||
|
# include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* mingw fails to declare _exit in <unistd.h>. */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Declare overridden functions. */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_CHOWN@
|
||||||
|
# if @REPLACE_CHOWN@
|
||||||
|
# ifndef REPLACE_CHOWN
|
||||||
|
# define REPLACE_CHOWN 1
|
||||||
|
# endif
|
||||||
|
# if REPLACE_CHOWN
|
||||||
|
/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
|
||||||
|
to GID (if GID is not -1). Follow symbolic links.
|
||||||
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/chown.html>. */
|
||||||
|
# define chown rpl_chown
|
||||||
|
extern int chown (const char *file, uid_t uid, gid_t gid);
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef chown
|
||||||
|
# define chown(f,u,g) \
|
||||||
|
(GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
|
||||||
|
"doesn't treat a uid or gid of -1 on some systems - " \
|
||||||
|
"use gnulib module chown for portability"), \
|
||||||
|
chown (f, u, g))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_DUP2@
|
||||||
|
# if !@HAVE_DUP2@
|
||||||
|
/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
|
||||||
|
NEWFD = OLDFD, otherwise close NEWFD first if it is open.
|
||||||
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/dup2.html>. */
|
||||||
|
extern int dup2 (int oldfd, int newfd);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef dup2
|
||||||
|
# define dup2(o,n) \
|
||||||
|
(GL_LINK_WARNING ("dup2 is unportable - " \
|
||||||
|
"use gnulib module dup2 for portability"), \
|
||||||
|
dup2 (o, n))
|
||||||
|
#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.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/fchdir.html>. */
|
||||||
|
extern int fchdir (int /*fd*/);
|
||||||
|
|
||||||
|
# define close rpl_close
|
||||||
|
extern int close (int);
|
||||||
|
# define dup rpl_dup
|
||||||
|
extern int dup (int);
|
||||||
|
# define dup2 rpl_dup2
|
||||||
|
extern int dup2 (int, int);
|
||||||
|
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fchdir
|
||||||
|
# define fchdir(f) \
|
||||||
|
(GL_LINK_WARNING ("fchdir is unportable - " \
|
||||||
|
"use gnulib module fchdir for portability"), \
|
||||||
|
fchdir (f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FTRUNCATE@
|
||||||
|
# if !@HAVE_FTRUNCATE@
|
||||||
|
/* Change the size of the file to which FD is opened to become equal to LENGTH.
|
||||||
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/ftruncate.html>. */
|
||||||
|
extern int ftruncate (int fd, off_t length);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef ftruncate
|
||||||
|
# define ftruncate(f,l) \
|
||||||
|
(GL_LINK_WARNING ("ftruncate is unportable - " \
|
||||||
|
"use gnulib module ftruncate for portability"), \
|
||||||
|
ftruncate (f, l))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_GETCWD@
|
||||||
|
/* Include the headers that might declare getcwd so that they will not
|
||||||
|
cause confusion if included after this file. */
|
||||||
|
# include <stdlib.h>
|
||||||
|
# if @REPLACE_GETCWD@
|
||||||
|
/* Get the name of the current working directory, and put it in SIZE bytes
|
||||||
|
of BUF.
|
||||||
|
Return BUF if successful, or NULL if the directory couldn't be determined
|
||||||
|
or SIZE was too small.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/getcwd.html>.
|
||||||
|
Additionally, the gnulib module 'getcwd' guarantees the following GNU
|
||||||
|
extension: If BUF is NULL, an array is allocated with 'malloc'; the array
|
||||||
|
is SIZE bytes long, unless SIZE == 0, in which case it is as big as
|
||||||
|
necessary. */
|
||||||
|
# define getcwd rpl_getcwd
|
||||||
|
extern char * getcwd (char *buf, size_t size);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef getcwd
|
||||||
|
# define getcwd(b,s) \
|
||||||
|
(GL_LINK_WARNING ("getcwd is unportable - " \
|
||||||
|
"use gnulib module getcwd for portability"), \
|
||||||
|
getcwd (b, s))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_GETLOGIN_R@
|
||||||
|
/* Copies the user's login name to NAME.
|
||||||
|
The array pointed to by NAME has room for SIZE bytes.
|
||||||
|
|
||||||
|
Returns 0 if successful. Upon error, an error number is returned, or -1 in
|
||||||
|
the case that the login name cannot be found but no specific error is
|
||||||
|
provided (this case is hopefully rare but is left open by the POSIX spec).
|
||||||
|
|
||||||
|
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
|
||||||
|
# undef getlogin_r
|
||||||
|
# define getlogin_r(n,s) \
|
||||||
|
(GL_LINK_WARNING ("getlogin_r is unportable - " \
|
||||||
|
"use gnulib module getlogin_r for portability"), \
|
||||||
|
getlogin_r (n, s))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_LCHOWN@
|
||||||
|
# if @REPLACE_LCHOWN@
|
||||||
|
/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
|
||||||
|
to GID (if GID is not -1). Do not follow symbolic links.
|
||||||
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/lchown.html>. */
|
||||||
|
# define lchown rpl_lchown
|
||||||
|
extern int lchown (char const *file, uid_t owner, gid_t group);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef lchown
|
||||||
|
# define lchown(f,u,g) \
|
||||||
|
(GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
|
||||||
|
"systems - use gnulib module lchown for portability"), \
|
||||||
|
lchown (f, u, g))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_LSEEK@
|
||||||
|
# if @REPLACE_LSEEK@
|
||||||
|
/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
|
||||||
|
Return the new offset if successful, otherwise -1 and errno set.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/lseek.html>. */
|
||||||
|
# define lseek rpl_lseek
|
||||||
|
extern off_t lseek (int fd, off_t offset, int whence);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef lseek
|
||||||
|
# define lseek(f,o,w) \
|
||||||
|
(GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
|
||||||
|
"systems - use gnulib module lseek for portability"), \
|
||||||
|
lseek (f, o, w))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_READLINK@
|
||||||
|
/* 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);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef readlink
|
||||||
|
# define readlink(f,b,s) \
|
||||||
|
(GL_LINK_WARNING ("readlink is unportable - " \
|
||||||
|
"use gnulib module readlink for portability"), \
|
||||||
|
readlink (f, b, s))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_SLEEP@
|
||||||
|
/* Pause the execution of the current thread for N seconds.
|
||||||
|
Returns the number of seconds left to sleep.
|
||||||
|
See the POSIX:2001 specification
|
||||||
|
<http://www.opengroup.org/susv3xsh/sleep.html>. */
|
||||||
|
# if !@HAVE_SLEEP@
|
||||||
|
extern unsigned int sleep (unsigned int n);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef sleep
|
||||||
|
# define sleep(n) \
|
||||||
|
(GL_LINK_WARNING ("sleep is unportable - " \
|
||||||
|
"use gnulib module sleep for portability"), \
|
||||||
|
sleep (n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _GL_UNISTD_H */
|
||||||
|
#endif /* _GL_UNISTD_H */
|
3966
libgnu/vasnprintf.c
Normal file
3966
libgnu/vasnprintf.c
Normal file
File diff suppressed because it is too large
Load Diff
81
libgnu/vasnprintf.h
Normal file
81
libgnu/vasnprintf.h
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* vsprintf with automatic memory allocation.
|
||||||
|
Copyright (C) 2002-2004, 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _VASNPRINTF_H
|
||||||
|
#define _VASNPRINTF_H
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef __attribute__
|
||||||
|
/* This feature is available in gcc versions 2.5 and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
|
||||||
|
# define __attribute__(Spec) /* empty */
|
||||||
|
# endif
|
||||||
|
/* The __-protected variants of `format' and `printf' attributes
|
||||||
|
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
||||||
|
# define __format__ format
|
||||||
|
# define __printf__ printf
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Write formatted output to a string dynamically allocated with malloc().
|
||||||
|
You can pass a preallocated buffer for the result in RESULTBUF and its
|
||||||
|
size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
|
||||||
|
If successful, return the address of the string (this may be = RESULTBUF
|
||||||
|
if no dynamic memory allocation was necessary) and set *LENGTHP to the
|
||||||
|
number of resulting bytes, excluding the trailing NUL. Upon error, set
|
||||||
|
errno and return NULL.
|
||||||
|
|
||||||
|
When dynamic memory allocation occurs, the preallocated buffer is left
|
||||||
|
alone (with possibly modified contents). This makes it possible to use
|
||||||
|
a statically allocated or stack-allocated buffer, like this:
|
||||||
|
|
||||||
|
char buf[100];
|
||||||
|
size_t len = sizeof (buf);
|
||||||
|
char *output = vasnprintf (buf, &len, format, args);
|
||||||
|
if (output == NULL)
|
||||||
|
... error handling ...;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
... use the output string ...;
|
||||||
|
if (output != buf)
|
||||||
|
free (output);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
#if REPLACE_VASNPRINTF
|
||||||
|
# define asnprintf rpl_asnprintf
|
||||||
|
# define vasnprintf rpl_vasnprintf
|
||||||
|
#endif
|
||||||
|
extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
|
||||||
|
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||||
|
extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
|
||||||
|
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _VASNPRINTF_H */
|
82
libgnu/wchar_.h
Normal file
82
libgnu/wchar_.h
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
|
||||||
|
|
||||||
|
Copyright (C) 2007 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ISO C 99 <wchar.h> for platforms that have issues.
|
||||||
|
* <http://www.opengroup.org/susv3xbd/wchar.h.html>
|
||||||
|
*
|
||||||
|
* For now, this just ensures proper prerequisite inclusion order and
|
||||||
|
* the declaration of wcwidth().
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _GL_WCHAR_H
|
||||||
|
|
||||||
|
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
|
||||||
|
<wchar.h>.
|
||||||
|
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
|
||||||
|
included before <wchar.h>. */
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
/* Include the original <wchar.h> if it exists.
|
||||||
|
Some builds of uClibc lack it. */
|
||||||
|
/* The include_next requires a split double-inclusion guard. */
|
||||||
|
#if @HAVE_WCHAR_H@
|
||||||
|
# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _GL_WCHAR_H
|
||||||
|
#define _GL_WCHAR_H
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the number of screen columns needed for WC. */
|
||||||
|
#if @GNULIB_WCWIDTH@
|
||||||
|
# if @REPLACE_WCWIDTH@
|
||||||
|
# undef wcwidth
|
||||||
|
# define wcwidth rpl_wcwidth
|
||||||
|
extern int wcwidth (wchar_t);
|
||||||
|
# else
|
||||||
|
# if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
|
||||||
|
/* wcwidth exists but is not declared. */
|
||||||
|
extern int wcwidth (int /* actually wchar_t */);
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef wcwidth
|
||||||
|
# define wcwidth(w) \
|
||||||
|
(GL_LINK_WARNING ("wcwidth is unportable - " \
|
||||||
|
"use gnulib module wcwidth for portability"), \
|
||||||
|
wcwidth (w))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_WCHAR_H */
|
||||||
|
#endif /* _GL_WCHAR_H */
|
108
libgnu/xsize.h
Normal file
108
libgnu/xsize.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/* xsize.h -- Checked size_t computations.
|
||||||
|
|
||||||
|
Copyright (C) 2003 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 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU 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 _XSIZE_H
|
||||||
|
#define _XSIZE_H
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get SIZE_MAX. */
|
||||||
|
#include <limits.h>
|
||||||
|
#if HAVE_STDINT_H
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The size of memory objects is often computed through expressions of
|
||||||
|
type size_t. Example:
|
||||||
|
void* p = malloc (header_size + n * element_size).
|
||||||
|
These computations can lead to overflow. When this happens, malloc()
|
||||||
|
returns a piece of memory that is way too small, and the program then
|
||||||
|
crashes while attempting to fill the memory.
|
||||||
|
To avoid this, the functions and macros in this file check for overflow.
|
||||||
|
The convention is that SIZE_MAX represents overflow.
|
||||||
|
malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
|
||||||
|
implementation that uses mmap --, it's recommended to use size_overflow_p()
|
||||||
|
or size_in_bounds_p() before invoking malloc().
|
||||||
|
The example thus becomes:
|
||||||
|
size_t size = xsum (header_size, xtimes (n, element_size));
|
||||||
|
void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Convert an arbitrary value >= 0 to type size_t. */
|
||||||
|
#define xcast_size_t(N) \
|
||||||
|
((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
|
||||||
|
|
||||||
|
/* Sum of two sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum (size_t size1, size_t size2)
|
||||||
|
{
|
||||||
|
size_t sum = size1 + size2;
|
||||||
|
return (sum >= size1 ? sum : SIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sum of three sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum3 (size_t size1, size_t size2, size_t size3)
|
||||||
|
{
|
||||||
|
return xsum (xsum (size1, size2), size3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sum of four sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
|
||||||
|
{
|
||||||
|
return xsum (xsum (xsum (size1, size2), size3), size4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Maximum of two sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xmax (size_t size1, size_t size2)
|
||||||
|
{
|
||||||
|
/* No explicit check is needed here, because for any n:
|
||||||
|
max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
|
||||||
|
return (size1 >= size2 ? size1 : size2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multiplication of a count with an element size, with overflow check.
|
||||||
|
The count must be >= 0 and the element size must be > 0.
|
||||||
|
This is a macro, not an inline function, so that it works correctly even
|
||||||
|
when N is of a wider tupe and N > SIZE_MAX. */
|
||||||
|
#define xtimes(N, ELSIZE) \
|
||||||
|
((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
|
||||||
|
|
||||||
|
/* Check for overflow. */
|
||||||
|
#define size_overflow_p(SIZE) \
|
||||||
|
((SIZE) == SIZE_MAX)
|
||||||
|
/* Check against overflow. */
|
||||||
|
#define size_in_bounds_p(SIZE) \
|
||||||
|
((SIZE) != SIZE_MAX)
|
||||||
|
|
||||||
|
#endif /* _XSIZE_H */
|
@ -126,9 +126,9 @@ conky_SOURCES = \
|
|||||||
$(xmms2) \
|
$(xmms2) \
|
||||||
$(smapi)
|
$(smapi)
|
||||||
|
|
||||||
conky_LDFLAGS = \
|
conky_LDFLAGS = \
|
||||||
$(PTHREAD_LIBS) \
|
$(PTHREAD_LIBS) \
|
||||||
$(top_builddir)/libgnu/libgnu.la
|
$(top_builddir)/libgnu/libgnu.a \
|
||||||
-lm
|
-lm
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
|
Loading…
Reference in New Issue
Block a user