mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-17 18:45:10 +00:00
remove older gnulib files
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@1205 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
parent
72f416212f
commit
6a4923ddd5
@ -1,4 +1,4 @@
|
|||||||
.\" -*- coding: us-ascii -*-
|
'\" -*- coding: us-ascii -*-
|
||||||
.if \n(.g .ds T< \\FC
|
.if \n(.g .ds T< \\FC
|
||||||
.if \n(.g .ds T> \\F[\n[.fam]]
|
.if \n(.g .ds T> \\F[\n[.fam]]
|
||||||
.de URL
|
.de URL
|
||||||
|
@ -1,417 +0,0 @@
|
|||||||
## 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=libgnu --m4-base=libgnu/m4 --doc-base=libgnu/doc --aux-dir=libgnu/aux --lgpl --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_LTLIBRARIES += libgnu.la
|
|
||||||
|
|
||||||
libgnu_la_SOURCES =
|
|
||||||
libgnu_la_LIBADD = $(gl_LTLIBOBJS)
|
|
||||||
libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
|
|
||||||
EXTRA_libgnu_la_SOURCES =
|
|
||||||
libgnu_la_LDFLAGS = $(AM_LDFLAGS)
|
|
||||||
|
|
||||||
## 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_la_SOURCES += gai_strerror.c getaddrinfo.c
|
|
||||||
|
|
||||||
## end gnulib module getaddrinfo
|
|
||||||
|
|
||||||
## begin gnulib module gettext-h
|
|
||||||
|
|
||||||
libgnu_la_SOURCES += gettext.h
|
|
||||||
|
|
||||||
## end gnulib module gettext-h
|
|
||||||
|
|
||||||
## begin gnulib module inet_ntop
|
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += inet_ntop.c inet_ntop.h
|
|
||||||
|
|
||||||
EXTRA_libgnu_la_SOURCES += inet_ntop.c
|
|
||||||
|
|
||||||
## end gnulib module inet_ntop
|
|
||||||
|
|
||||||
## begin gnulib module link-warning
|
|
||||||
|
|
||||||
LINK_WARNING_H=$(top_srcdir)/libgnu/aux/link-warning.h
|
|
||||||
|
|
||||||
## end gnulib module link-warning
|
|
||||||
|
|
||||||
## 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_la_SOURCES += size_max.h
|
|
||||||
|
|
||||||
## end gnulib module size_max
|
|
||||||
|
|
||||||
## begin gnulib module snprintf
|
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += snprintf.c
|
|
||||||
|
|
||||||
EXTRA_libgnu_la_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|@''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 '/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 strdup
|
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += strdup.c
|
|
||||||
|
|
||||||
EXTRA_libgnu_la_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 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_la_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' \
|
|
||||||
< $(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_la_SOURCES += xsize.h
|
|
||||||
|
|
||||||
## end gnulib module xsize
|
|
||||||
|
|
||||||
## begin gnulib module dummy
|
|
||||||
|
|
||||||
libgnu_la_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; \
|
|
||||||
:
|
|
@ -1,54 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published
|
|
||||||
by the Free Software Foundation; either version 2.1, 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 Lesser General Public
|
|
||||||
License along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
/* 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 */
|
|
@ -1,35 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
/* 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
|
|
@ -1,44 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
/* 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
148
libgnu/float+.h
@ -1,148 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
@ -1,59 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _GL_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 */
|
|
@ -1,78 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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
|
|
@ -1,418 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -1,155 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef 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
270
libgnu/gettext.h
@ -1,270 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
@ -1,238 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 1996-1999 by Internet Software Consortium.
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
|
||||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
|
||||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
|
||||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
|
||||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
/* Specification. */
|
|
||||||
#include "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
|
|
@ -1,42 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#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
|
|
@ -1,50 +0,0 @@
|
|||||||
# 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], [:])
|
|
@ -1,18 +0,0 @@
|
|||||||
# 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)
|
|
||||||
])
|
|
@ -1,70 +0,0 @@
|
|||||||
# 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])])
|
|
||||||
])
|
|
@ -1,58 +0,0 @@
|
|||||||
# serial 4 -*- Autoconf -*-
|
|
||||||
# Enable extensions on systems that normally disable them.
|
|
||||||
|
|
||||||
# Copyright (C) 2003, 2006 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.61 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.
|
|
||||||
AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS],
|
|
||||||
[
|
|
||||||
AC_BEFORE([$0], [AC_COMPILE_IFELSE])
|
|
||||||
AC_BEFORE([$0], [AC_RUN_IFELSE])
|
|
||||||
|
|
||||||
AC_REQUIRE([AC_GNU_SOURCE])
|
|
||||||
AC_REQUIRE([AC_AIX])
|
|
||||||
AC_REQUIRE([AC_MINIX])
|
|
||||||
|
|
||||||
AH_VERBATIM([__EXTENSIONS__],
|
|
||||||
[/* Enable extensions on Solaris. */
|
|
||||||
#ifndef __EXTENSIONS__
|
|
||||||
# undef __EXTENSIONS__
|
|
||||||
#endif
|
|
||||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
# undef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
#endif
|
|
||||||
#ifndef _TANDEM_SOURCE
|
|
||||||
# undef _TANDEM_SOURCE
|
|
||||||
#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([_POSIX_PTHREAD_SEMANTICS])
|
|
||||||
AC_DEFINE([_TANDEM_SOURCE])
|
|
||||||
])
|
|
||||||
|
|
||||||
# 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])])
|
|
@ -1,19 +0,0 @@
|
|||||||
# 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])
|
|
||||||
])
|
|
@ -1,113 +0,0 @@
|
|||||||
# getaddrinfo.m4 serial 12
|
|
||||||
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_GNU_SOURCE])
|
|
||||||
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
|
|
||||||
])
|
|
||||||
])
|
|
@ -1,32 +0,0 @@
|
|||||||
# 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=libgnu --m4-base=libgnu/m4 --doc-base=libgnu/doc --aux-dir=libgnu/aux --lgpl --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([libgnu])
|
|
||||||
gl_M4_BASE([libgnu/m4])
|
|
||||||
gl_DOC_BASE([libgnu/doc])
|
|
||||||
gl_TESTS_BASE([tests])
|
|
||||||
gl_LIB([libgnu])
|
|
||||||
gl_LGPL
|
|
||||||
gl_MAKEFILE_NAME([])
|
|
||||||
gl_LIBTOOL
|
|
||||||
gl_MACRO_PREFIX([gl])
|
|
@ -1,22 +0,0 @@
|
|||||||
# 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])])])
|
|
@ -1,164 +0,0 @@
|
|||||||
# 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([AC_GNU_SOURCE])
|
|
||||||
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], [true])
|
|
||||||
gl_cond_libtool=true
|
|
||||||
gl_source_base='libgnu'
|
|
||||||
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_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_FUNC_STRDUP
|
|
||||||
gl_STRING_MODULE_INDICATOR([strdup])
|
|
||||||
gl_HEADER_STRING_H
|
|
||||||
gl_HEADER_SYS_SOCKET
|
|
||||||
AC_PROG_MKDIR_P
|
|
||||||
gl_FUNC_VASNPRINTF
|
|
||||||
gl_WCHAR_H
|
|
||||||
gl_XSIZE
|
|
||||||
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/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/strdup.c
|
|
||||||
lib/string_.h
|
|
||||||
lib/sys_socket_.h
|
|
||||||
lib/vasnprintf.c
|
|
||||||
lib/vasnprintf.h
|
|
||||||
lib/wchar_.h
|
|
||||||
lib/xsize.h
|
|
||||||
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/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/strdup.m4
|
|
||||||
m4/string_h.m4
|
|
||||||
m4/sys_socket_h.m4
|
|
||||||
m4/ulonglong.m4
|
|
||||||
m4/vasnprintf.m4
|
|
||||||
m4/wchar.m4
|
|
||||||
m4/wchar_t.m4
|
|
||||||
m4/wint_t.m4
|
|
||||||
m4/xsize.m4
|
|
||||||
])
|
|
@ -1,33 +0,0 @@
|
|||||||
# 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], [])
|
|
@ -1,85 +0,0 @@
|
|||||||
# include_next.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.
|
|
||||||
|
|
||||||
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],
|
|
||||||
[AC_PREPROC_IFELSE([#include_next <stddef.h>],
|
|
||||||
[gl_cv_have_include_next=yes],
|
|
||||||
[gl_cv_have_include_next=no])])
|
|
||||||
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])])
|
|
||||||
])
|
|
@ -1,19 +0,0 @@
|
|||||||
# 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])
|
|
||||||
])
|
|
@ -1,61 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,26 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,72 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,30 +0,0 @@
|
|||||||
# 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])
|
|
||||||
])
|
|
@ -1,86 +0,0 @@
|
|||||||
# 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]))
|
|
||||||
])
|
|
||||||
])
|
|
@ -1,68 +0,0 @@
|
|||||||
# 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])])
|
|
||||||
])
|
|
@ -1,31 +0,0 @@
|
|||||||
# 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], [:])
|
|
@ -1,52 +0,0 @@
|
|||||||
# 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])])
|
|
@ -1,58 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,115 +0,0 @@
|
|||||||
# 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])
|
|
@ -1,389 +0,0 @@
|
|||||||
# stdint.m4 serial 27
|
|
||||||
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([gl_STDINT_INCLUDES
|
|
||||||
[
|
|
||||||
#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>
|
|
||||||
#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:
|
|
@ -1,26 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,77 +0,0 @@
|
|||||||
# 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])
|
|
||||||
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])
|
|
||||||
])
|
|
||||||
|
|
||||||
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])])
|
|
||||||
])
|
|
@ -1,22 +0,0 @@
|
|||||||
# 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], [:])
|
|
@ -1,77 +0,0 @@
|
|||||||
# 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])
|
|
||||||
])
|
|
@ -1,51 +0,0 @@
|
|||||||
# 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])
|
|
||||||
])
|
|
@ -1,48 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,197 +0,0 @@
|
|||||||
# 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],
|
|
||||||
[
|
|
||||||
])
|
|
@ -1,36 +0,0 @@
|
|||||||
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 3
|
|
||||||
|
|
||||||
AC_DEFUN([gl_WCHAR_H],
|
|
||||||
[
|
|
||||||
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=
|
|
||||||
else
|
|
||||||
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])
|
|
||||||
WCHAR_H=wchar.h
|
|
||||||
fi
|
|
||||||
AC_SUBST([WCHAR_H])
|
|
||||||
])
|
|
@ -1,20 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,28 +0,0 @@
|
|||||||
# 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
|
|
||||||
])
|
|
@ -1,13 +0,0 @@
|
|||||||
# 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)
|
|
||||||
])
|
|
@ -1,43 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _GL_NETINET_IN_H
|
|
||||||
|
|
||||||
#if @HAVE_NETINET_IN_H@
|
|
||||||
|
|
||||||
/* On many platforms, <netinet/in.h> assumes prior inclusion of
|
|
||||||
<sys/types.h>. */
|
|
||||||
# include <sys/types.h>
|
|
||||||
|
|
||||||
/* The include_next requires a split double-inclusion guard. */
|
|
||||||
# @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _GL_NETINET_IN_H
|
|
||||||
#define _GL_NETINET_IN_H
|
|
||||||
|
|
||||||
#if !@HAVE_NETINET_IN_H@
|
|
||||||
|
|
||||||
/* A platform that lacks <netinet/in.h>. */
|
|
||||||
|
|
||||||
# include <sys/socket.h>
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _GL_NETINET_IN_H */
|
|
||||||
#endif /* _GL_NETINET_IN_H */
|
|
@ -1,187 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* This file 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)
|
|
||||||
? (int) va_arg (args, int)
|
|
||||||
: (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;
|
|
||||||
}
|
|
@ -1,154 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
@ -1,576 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* This file 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
|
|
@ -1,179 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
@ -1,31 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef 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 */
|
|
@ -1,77 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -1,118 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _GL_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
508
libgnu/stdint_.h
@ -1,508 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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_ABSOLUTE_INTTYPES_H
|
|
||||||
# include <inttypes.h>
|
|
||||||
# undef _GL_JUST_INCLUDE_ABSOLUTE_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 */
|
|
312
libgnu/stdio_.h
312
libgnu/stdio_.h
@ -1,312 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#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@)
|
|
||||||
/* Get off_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
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _GL_STDIO_H */
|
|
||||||
#endif /* _GL_STDIO_H */
|
|
||||||
#endif
|
|
@ -1,55 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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
548
libgnu/string_.h
@ -1,548 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _GL_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 */
|
|
@ -1,91 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* This file is supposed to be used on platforms that lack <sys/socket.h>
|
|
||||||
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 */
|
|
3966
libgnu/vasnprintf.c
3966
libgnu/vasnprintf.c
File diff suppressed because it is too large
Load Diff
@ -1,81 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
@ -1,49 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* Written by Eric Blake. */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
#endif /* _GL_WCHAR_H */
|
|
||||||
#endif /* _GL_WCHAR_H */
|
|
108
libgnu/xsize.h
108
libgnu/xsize.h
@ -1,108 +0,0 @@
|
|||||||
/* 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 Lesser General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2.1, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _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 */
|
|
Loading…
Reference in New Issue
Block a user