* Makefile.in (GNULIB_MODULES): Add strtoumax.
This commit is contained in:
parent
d78050d6ba
commit
a8a2bb29e2
25 changed files with 6388 additions and 2 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2011-04-21 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* Makefile.in (GNULIB_MODULES): Add strtoumax.
|
||||
This is needed for the new integer-reading code in lread.c.
|
||||
It automatically pulls in the following gnulib files, which
|
||||
are used on old-fashioned platforms that don't have strtoumax:
|
||||
lib/inttypes.h, lib/inttypes.in.h, lib/strtoimax.c, lib/strtol.c,
|
||||
lib/strtoll.c, lib/strtoul.c, lib/strtoull.c, lib/strtoumax.c,
|
||||
lib/verify.h, lib/wchar.h, lib/wchar.in.h, m4/inttypes-pri.m4,
|
||||
m4/inttypes.m4, m4/strtoimax.m4, m4/strtol.m4, m4/strtoll.m4,
|
||||
m4/strtoul.m4, m4/strtoull.m4, m4/strtoumax.m4, m4/wchar_h.m4,
|
||||
m4/wint_t.m4.
|
||||
|
||||
2011-04-20 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* configure.in (use_mmap_for_buffers): Set to yes on Cygwin.
|
||||
|
|
|
@ -333,7 +333,7 @@ DOS_gnulib_comp.m4 = gl-comp.m4
|
|||
GNULIB_MODULES = \
|
||||
careadlinkat crypto/md5 dtoastr filemode getloadavg getopt-gnu \
|
||||
ignore-value intprops lstat mktime readlink \
|
||||
socklen stdio strftime symlink sys_stat
|
||||
socklen stdio strftime strtoumax symlink sys_stat
|
||||
GNULIB_TOOL_FLAGS = \
|
||||
--import --no-changelog --no-vc-files --makefile-name=gnulib.mk
|
||||
sync-from-gnulib: $(gnulib_srcdir)
|
||||
|
|
224
lib/gnulib.mk
224
lib/gnulib.mk
|
@ -9,7 +9,7 @@
|
|||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files careadlinkat crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value intprops lstat mktime readlink socklen stdio strftime symlink sys_stat
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=. --makefile-name=gnulib.mk --no-libtool --macro-prefix=gl --no-vc-files careadlinkat crypto/md5 dtoastr filemode getloadavg getopt-gnu ignore-value intprops lstat mktime readlink socklen stdio strftime strtoumax symlink sys_stat
|
||||
|
||||
|
||||
MOSTLYCLEANFILES += core *.stackdump
|
||||
|
@ -174,6 +174,48 @@ EXTRA_DIST += intprops.h
|
|||
|
||||
## end gnulib module intprops
|
||||
|
||||
## begin gnulib module inttypes
|
||||
|
||||
BUILT_SOURCES += inttypes.h
|
||||
|
||||
# We need the following in order to create <inttypes.h> when the system
|
||||
# doesn't have one that works with the given compiler.
|
||||
inttypes.h: inttypes.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H)
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||
-e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
|
||||
-e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
|
||||
-e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/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/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
|
||||
-e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
|
||||
-e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
|
||||
-e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
|
||||
-e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
|
||||
-e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
|
||||
-e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
|
||||
-e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
|
||||
-e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
|
||||
-e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
|
||||
-e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
|
||||
-e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
|
||||
-e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
|
||||
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
|
||||
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
|
||||
< $(srcdir)/inttypes.in.h; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += inttypes.h inttypes.h-t
|
||||
|
||||
EXTRA_DIST += inttypes.in.h
|
||||
|
||||
## end gnulib module inttypes
|
||||
|
||||
## begin gnulib module lstat
|
||||
|
||||
|
||||
|
@ -532,6 +574,60 @@ EXTRA_libgnu_a_SOURCES += strftime.c
|
|||
|
||||
## end gnulib module strftime
|
||||
|
||||
## begin gnulib module strtoimax
|
||||
|
||||
|
||||
EXTRA_DIST += strtoimax.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtoimax.c
|
||||
|
||||
## end gnulib module strtoimax
|
||||
|
||||
## begin gnulib module strtol
|
||||
|
||||
|
||||
EXTRA_DIST += strtol.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtol.c
|
||||
|
||||
## end gnulib module strtol
|
||||
|
||||
## begin gnulib module strtoll
|
||||
|
||||
|
||||
EXTRA_DIST += strtoll.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtoll.c
|
||||
|
||||
## end gnulib module strtoll
|
||||
|
||||
## begin gnulib module strtoul
|
||||
|
||||
|
||||
EXTRA_DIST += strtoul.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtoul.c
|
||||
|
||||
## end gnulib module strtoul
|
||||
|
||||
## begin gnulib module strtoull
|
||||
|
||||
|
||||
EXTRA_DIST += strtoull.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtoull.c
|
||||
|
||||
## end gnulib module strtoull
|
||||
|
||||
## begin gnulib module strtoumax
|
||||
|
||||
|
||||
EXTRA_DIST += strtoumax.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strtoumax.c
|
||||
|
||||
## end gnulib module strtoumax
|
||||
|
||||
## begin gnulib module symlink
|
||||
|
||||
|
||||
|
@ -785,6 +881,12 @@ EXTRA_DIST += unistd.in.h
|
|||
|
||||
## end gnulib module unistd
|
||||
|
||||
## begin gnulib module verify
|
||||
|
||||
libgnu_a_SOURCES += verify.h
|
||||
|
||||
## end gnulib module verify
|
||||
|
||||
## begin gnulib module warn-on-use
|
||||
|
||||
BUILT_SOURCES += warn-on-use.h
|
||||
|
@ -804,6 +906,126 @@ EXTRA_DIST += $(top_srcdir)/./warn-on-use.h
|
|||
|
||||
## end gnulib module warn-on-use
|
||||
|
||||
## 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.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
|
||||
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
|
||||
-e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
|
||||
-e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
|
||||
-e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
|
||||
-e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
|
||||
-e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
|
||||
-e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
|
||||
-e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
|
||||
-e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
|
||||
-e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
|
||||
-e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
|
||||
-e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
|
||||
-e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
|
||||
-e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
|
||||
-e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
|
||||
-e 's|@''GNULIB_WMEMCHR''@|$(GNULIB_WMEMCHR)|g' \
|
||||
-e 's|@''GNULIB_WMEMCMP''@|$(GNULIB_WMEMCMP)|g' \
|
||||
-e 's|@''GNULIB_WMEMCPY''@|$(GNULIB_WMEMCPY)|g' \
|
||||
-e 's|@''GNULIB_WMEMMOVE''@|$(GNULIB_WMEMMOVE)|g' \
|
||||
-e 's|@''GNULIB_WMEMSET''@|$(GNULIB_WMEMSET)|g' \
|
||||
-e 's|@''GNULIB_WCSLEN''@|$(GNULIB_WCSLEN)|g' \
|
||||
-e 's|@''GNULIB_WCSNLEN''@|$(GNULIB_WCSNLEN)|g' \
|
||||
-e 's|@''GNULIB_WCSCPY''@|$(GNULIB_WCSCPY)|g' \
|
||||
-e 's|@''GNULIB_WCPCPY''@|$(GNULIB_WCPCPY)|g' \
|
||||
-e 's|@''GNULIB_WCSNCPY''@|$(GNULIB_WCSNCPY)|g' \
|
||||
-e 's|@''GNULIB_WCPNCPY''@|$(GNULIB_WCPNCPY)|g' \
|
||||
-e 's|@''GNULIB_WCSCAT''@|$(GNULIB_WCSCAT)|g' \
|
||||
-e 's|@''GNULIB_WCSNCAT''@|$(GNULIB_WCSNCAT)|g' \
|
||||
-e 's|@''GNULIB_WCSCMP''@|$(GNULIB_WCSCMP)|g' \
|
||||
-e 's|@''GNULIB_WCSNCMP''@|$(GNULIB_WCSNCMP)|g' \
|
||||
-e 's|@''GNULIB_WCSCASECMP''@|$(GNULIB_WCSCASECMP)|g' \
|
||||
-e 's|@''GNULIB_WCSNCASECMP''@|$(GNULIB_WCSNCASECMP)|g' \
|
||||
-e 's|@''GNULIB_WCSCOLL''@|$(GNULIB_WCSCOLL)|g' \
|
||||
-e 's|@''GNULIB_WCSXFRM''@|$(GNULIB_WCSXFRM)|g' \
|
||||
-e 's|@''GNULIB_WCSDUP''@|$(GNULIB_WCSDUP)|g' \
|
||||
-e 's|@''GNULIB_WCSCHR''@|$(GNULIB_WCSCHR)|g' \
|
||||
-e 's|@''GNULIB_WCSRCHR''@|$(GNULIB_WCSRCHR)|g' \
|
||||
-e 's|@''GNULIB_WCSCSPN''@|$(GNULIB_WCSCSPN)|g' \
|
||||
-e 's|@''GNULIB_WCSSPN''@|$(GNULIB_WCSSPN)|g' \
|
||||
-e 's|@''GNULIB_WCSPBRK''@|$(GNULIB_WCSPBRK)|g' \
|
||||
-e 's|@''GNULIB_WCSSTR''@|$(GNULIB_WCSSTR)|g' \
|
||||
-e 's|@''GNULIB_WCSTOK''@|$(GNULIB_WCSTOK)|g' \
|
||||
-e 's|@''GNULIB_WCSWIDTH''@|$(GNULIB_WCSWIDTH)|g' \
|
||||
< $(srcdir)/wchar.in.h | \
|
||||
sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
|
||||
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
|
||||
-e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
|
||||
-e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
|
||||
-e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
|
||||
-e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
|
||||
-e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
|
||||
-e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
|
||||
-e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
|
||||
-e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
|
||||
-e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
|
||||
-e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
|
||||
-e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
|
||||
-e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
|
||||
-e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
|
||||
-e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
|
||||
-e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
|
||||
-e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
|
||||
-e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
|
||||
-e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
|
||||
-e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
|
||||
-e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
|
||||
-e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
|
||||
-e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
|
||||
-e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
|
||||
-e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
|
||||
-e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
|
||||
-e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
|
||||
-e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
|
||||
-e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
|
||||
-e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
|
||||
-e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
|
||||
-e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
|
||||
-e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
|
||||
-e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
|
||||
-e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
|
||||
-e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
|
||||
-e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
|
||||
-e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
|
||||
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
|
||||
| \
|
||||
sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
|
||||
-e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
|
||||
-e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
|
||||
-e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
|
||||
-e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
|
||||
-e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
|
||||
-e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
|
||||
-e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
|
||||
-e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
|
||||
-e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
|
||||
-e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
|
||||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
||||
-e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
|
||||
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
|
||||
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
|
||||
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
|
||||
} > $@-t && \
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += wchar.h wchar.h-t
|
||||
|
||||
EXTRA_DIST += wchar.in.h
|
||||
|
||||
## end gnulib module wchar
|
||||
|
||||
|
||||
mostlyclean-local: mostlyclean-generic
|
||||
@for dir in '' $(MOSTLYCLEANDIRS); do \
|
||||
|
|
1165
lib/inttypes.h
Normal file
1165
lib/inttypes.h
Normal file
File diff suppressed because it is too large
Load diff
1108
lib/inttypes.in.h
Normal file
1108
lib/inttypes.in.h
Normal file
File diff suppressed because it is too large
Load diff
75
lib/strtoimax.c
Normal file
75
lib/strtoimax.c
Normal file
|
@ -0,0 +1,75 @@
|
|||
/* Convert string representation of a number into an intmax_t value.
|
||||
|
||||
Copyright (C) 1999, 2001-2004, 2006, 2009-2011 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Paul Eggert. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Verify interface. */
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "verify.h"
|
||||
|
||||
#ifdef UNSIGNED
|
||||
# ifndef HAVE_DECL_STRTOULL
|
||||
"this configure-time declaration test was not run"
|
||||
# endif
|
||||
# if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT
|
||||
unsigned long long int strtoull (char const *, char **, int);
|
||||
# endif
|
||||
|
||||
#else
|
||||
|
||||
# ifndef HAVE_DECL_STRTOLL
|
||||
"this configure-time declaration test was not run"
|
||||
# endif
|
||||
# if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT
|
||||
long long int strtoll (char const *, char **, int);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef UNSIGNED
|
||||
# define Have_long_long HAVE_UNSIGNED_LONG_LONG_INT
|
||||
# define Int uintmax_t
|
||||
# define Unsigned unsigned
|
||||
# define strtoimax strtoumax
|
||||
# define strtol strtoul
|
||||
# define strtoll strtoull
|
||||
#else
|
||||
# define Have_long_long HAVE_LONG_LONG_INT
|
||||
# define Int intmax_t
|
||||
# define Unsigned
|
||||
#endif
|
||||
|
||||
Int
|
||||
strtoimax (char const *ptr, char **endptr, int base)
|
||||
{
|
||||
#if Have_long_long
|
||||
verify (sizeof (Int) == sizeof (Unsigned long int)
|
||||
|| sizeof (Int) == sizeof (Unsigned long long int));
|
||||
|
||||
if (sizeof (Int) != sizeof (Unsigned long int))
|
||||
return strtoll (ptr, endptr, base);
|
||||
#else
|
||||
verify (sizeof (Int) == sizeof (Unsigned long int));
|
||||
#endif
|
||||
|
||||
return strtol (ptr, endptr, base);
|
||||
}
|
434
lib/strtol.c
Normal file
434
lib/strtol.c
Normal file
|
@ -0,0 +1,434 @@
|
|||
/* Convert string representation of a number into an integer value.
|
||||
|
||||
Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2011 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 3 of the License, or any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifdef _LIBC
|
||||
# define USE_NUMBER_GROUPING
|
||||
#else
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#ifndef __set_errno
|
||||
# define __set_errno(Val) errno = (Val)
|
||||
#endif
|
||||
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
# include "../locale/localeinfo.h"
|
||||
#endif
|
||||
|
||||
/* Nonzero if we are defining `strtoul' or `strtoull', operating on
|
||||
unsigned integers. */
|
||||
#ifndef UNSIGNED
|
||||
# define UNSIGNED 0
|
||||
# define INT LONG int
|
||||
#else
|
||||
# define INT unsigned LONG int
|
||||
#endif
|
||||
|
||||
/* Determine the name. */
|
||||
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol __wcstoull_l
|
||||
# else
|
||||
# define strtol __wcstoul_l
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol __strtoull_l
|
||||
# else
|
||||
# define strtol __strtoul_l
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol __wcstoll_l
|
||||
# else
|
||||
# define strtol __wcstol_l
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol __strtoll_l
|
||||
# else
|
||||
# define strtol __strtol_l
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
# if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoull
|
||||
# else
|
||||
# define strtol wcstoul
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoull
|
||||
# else
|
||||
# define strtol strtoul
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoll
|
||||
# else
|
||||
# define strtol wcstol
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoll
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If QUAD is defined, we are defining `strtoll' or `strtoull',
|
||||
operating on `long long int's. */
|
||||
#ifdef QUAD
|
||||
# define LONG long long
|
||||
# define STRTOL_LONG_MIN LLONG_MIN
|
||||
# define STRTOL_LONG_MAX LLONG_MAX
|
||||
# define STRTOL_ULONG_MAX ULLONG_MAX
|
||||
|
||||
/* The extra casts in the following macros work around compiler bugs,
|
||||
e.g., in Cray C 5.0.3.0. */
|
||||
|
||||
/* True if negative values of the signed integer type T use two's
|
||||
complement, ones' complement, or signed magnitude representation,
|
||||
respectively. Much GNU code assumes two's complement, but some
|
||||
people like to be portable to all possible C hosts. */
|
||||
# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
|
||||
# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
|
||||
# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
|
||||
|
||||
/* True if the arithmetic type T is signed. */
|
||||
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
||||
|
||||
/* The maximum and minimum values for the integer type T. These
|
||||
macros have undefined behavior if T is signed and has padding bits.
|
||||
If this is a problem for you, please let us know how to fix it for
|
||||
your host. */
|
||||
# define TYPE_MINIMUM(t) \
|
||||
((t) (! TYPE_SIGNED (t) \
|
||||
? (t) 0 \
|
||||
: TYPE_SIGNED_MAGNITUDE (t) \
|
||||
? ~ (t) 0 \
|
||||
: ~ TYPE_MAXIMUM (t)))
|
||||
# define TYPE_MAXIMUM(t) \
|
||||
((t) (! TYPE_SIGNED (t) \
|
||||
? (t) -1 \
|
||||
: ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
|
||||
|
||||
# ifndef ULLONG_MAX
|
||||
# define ULLONG_MAX TYPE_MAXIMUM (unsigned long long)
|
||||
# endif
|
||||
# ifndef LLONG_MAX
|
||||
# define LLONG_MAX TYPE_MAXIMUM (long long int)
|
||||
# endif
|
||||
# ifndef LLONG_MIN
|
||||
# define LLONG_MIN TYPE_MINIMUM (long long int)
|
||||
# endif
|
||||
|
||||
# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
|
||||
/* Work around gcc bug with using this constant. */
|
||||
static const unsigned long long int maxquad = ULLONG_MAX;
|
||||
# undef STRTOL_ULONG_MAX
|
||||
# define STRTOL_ULONG_MAX maxquad
|
||||
# endif
|
||||
#else
|
||||
# define LONG long
|
||||
# define STRTOL_LONG_MIN LONG_MIN
|
||||
# define STRTOL_LONG_MAX LONG_MAX
|
||||
# define STRTOL_ULONG_MAX ULONG_MAX
|
||||
#endif
|
||||
|
||||
|
||||
/* We use this code also for the extended locale handling where the
|
||||
function gets as an additional argument the locale which has to be
|
||||
used. To access the values we have to redefine the _NL_CURRENT
|
||||
macro. */
|
||||
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# undef _NL_CURRENT
|
||||
# define _NL_CURRENT(category, item) \
|
||||
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||
# define LOCALE_PARAM , loc
|
||||
# define LOCALE_PARAM_PROTO , __locale_t loc
|
||||
#else
|
||||
# define LOCALE_PARAM
|
||||
# define LOCALE_PARAM_PROTO
|
||||
#endif
|
||||
|
||||
#include <wchar.h>
|
||||
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# include <wctype.h>
|
||||
# define L_(Ch) L##Ch
|
||||
# define UCHAR_TYPE wint_t
|
||||
# define STRING_TYPE wchar_t
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
|
||||
# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
|
||||
# define TOUPPER(Ch) __towupper_l ((Ch), loc)
|
||||
# else
|
||||
# define ISSPACE(Ch) iswspace (Ch)
|
||||
# define ISALPHA(Ch) iswalpha (Ch)
|
||||
# define TOUPPER(Ch) towupper (Ch)
|
||||
# endif
|
||||
#else
|
||||
# define L_(Ch) Ch
|
||||
# define UCHAR_TYPE unsigned char
|
||||
# define STRING_TYPE char
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
|
||||
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
|
||||
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
|
||||
# else
|
||||
# define ISSPACE(Ch) isspace (Ch)
|
||||
# define ISALPHA(Ch) isalpha (Ch)
|
||||
# define TOUPPER(Ch) toupper (Ch)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define INTERNAL(X) INTERNAL1(X)
|
||||
#define INTERNAL1(X) __##X##_internal
|
||||
#define WEAKNAME(X) WEAKNAME1(X)
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
/* This file defines a function to check for correct grouping. */
|
||||
# include "grouping.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
|
||||
If BASE is 0 the base is determined by the presence of a leading
|
||||
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
|
||||
If BASE is < 2 or > 36, it is reset to 10.
|
||||
If ENDPTR is not NULL, a pointer to the character after the last
|
||||
one converted is stored in *ENDPTR. */
|
||||
|
||||
INT
|
||||
INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
|
||||
int base, int group LOCALE_PARAM_PROTO)
|
||||
{
|
||||
int negative;
|
||||
register unsigned LONG int cutoff;
|
||||
register unsigned int cutlim;
|
||||
register unsigned LONG int i;
|
||||
register const STRING_TYPE *s;
|
||||
register UCHAR_TYPE c;
|
||||
const STRING_TYPE *save, *end;
|
||||
int overflow;
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
struct locale_data *current = loc->__locales[LC_NUMERIC];
|
||||
# endif
|
||||
/* The thousands character of the current locale. */
|
||||
wchar_t thousands = L'\0';
|
||||
/* The numeric grouping specification of the current locale,
|
||||
in the format described in <locale.h>. */
|
||||
const char *grouping;
|
||||
|
||||
if (group)
|
||||
{
|
||||
grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
|
||||
if (*grouping <= 0 || *grouping == CHAR_MAX)
|
||||
grouping = NULL;
|
||||
else
|
||||
{
|
||||
/* Figure out the thousands separator character. */
|
||||
# if defined _LIBC || defined _HAVE_BTOWC
|
||||
thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
|
||||
if (thousands == WEOF)
|
||||
thousands = L'\0';
|
||||
# endif
|
||||
if (thousands == L'\0')
|
||||
grouping = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
grouping = NULL;
|
||||
#endif
|
||||
|
||||
if (base < 0 || base == 1 || base > 36)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
save = s = nptr;
|
||||
|
||||
/* Skip white space. */
|
||||
while (ISSPACE (*s))
|
||||
++s;
|
||||
if (*s == L_('\0'))
|
||||
goto noconv;
|
||||
|
||||
/* Check for a sign. */
|
||||
if (*s == L_('-'))
|
||||
{
|
||||
negative = 1;
|
||||
++s;
|
||||
}
|
||||
else if (*s == L_('+'))
|
||||
{
|
||||
negative = 0;
|
||||
++s;
|
||||
}
|
||||
else
|
||||
negative = 0;
|
||||
|
||||
/* Recognize number prefix and if BASE is zero, figure it out ourselves. */
|
||||
if (*s == L_('0'))
|
||||
{
|
||||
if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
|
||||
{
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
else if (base == 0)
|
||||
base = 8;
|
||||
}
|
||||
else if (base == 0)
|
||||
base = 10;
|
||||
|
||||
/* Save the pointer so we can check later if anything happened. */
|
||||
save = s;
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
if (group)
|
||||
{
|
||||
/* Find the end of the digit string and check its grouping. */
|
||||
end = s;
|
||||
for (c = *end; c != L_('\0'); c = *++end)
|
||||
if ((wchar_t) c != thousands
|
||||
&& ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
|
||||
&& (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
|
||||
break;
|
||||
if (*s == thousands)
|
||||
end = s;
|
||||
else
|
||||
end = correctly_grouped_prefix (s, end, thousands, grouping);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
end = NULL;
|
||||
|
||||
cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
|
||||
cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
|
||||
|
||||
overflow = 0;
|
||||
i = 0;
|
||||
for (c = *s; c != L_('\0'); c = *++s)
|
||||
{
|
||||
if (s == end)
|
||||
break;
|
||||
if (c >= L_('0') && c <= L_('9'))
|
||||
c -= L_('0');
|
||||
else if (ISALPHA (c))
|
||||
c = TOUPPER (c) - L_('A') + 10;
|
||||
else
|
||||
break;
|
||||
if ((int) c >= base)
|
||||
break;
|
||||
/* Check for overflow. */
|
||||
if (i > cutoff || (i == cutoff && c > cutlim))
|
||||
overflow = 1;
|
||||
else
|
||||
{
|
||||
i *= (unsigned LONG int) base;
|
||||
i += c;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if anything actually happened. */
|
||||
if (s == save)
|
||||
goto noconv;
|
||||
|
||||
/* Store in ENDPTR the address of one character
|
||||
past the last character we converted. */
|
||||
if (endptr != NULL)
|
||||
*endptr = (STRING_TYPE *) s;
|
||||
|
||||
#if !UNSIGNED
|
||||
/* Check for a value that is within the range of
|
||||
`unsigned LONG int', but outside the range of `LONG int'. */
|
||||
if (overflow == 0
|
||||
&& i > (negative
|
||||
? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
|
||||
: (unsigned LONG int) STRTOL_LONG_MAX))
|
||||
overflow = 1;
|
||||
#endif
|
||||
|
||||
if (overflow)
|
||||
{
|
||||
__set_errno (ERANGE);
|
||||
#if UNSIGNED
|
||||
return STRTOL_ULONG_MAX;
|
||||
#else
|
||||
return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Return the result of the appropriate sign. */
|
||||
return negative ? -i : i;
|
||||
|
||||
noconv:
|
||||
/* We must handle a special case here: the base is 0 or 16 and the
|
||||
first two characters are '0' and 'x', but the rest are no
|
||||
hexadecimal digits. This is no error case. We return 0 and
|
||||
ENDPTR points to the `x`. */
|
||||
if (endptr != NULL)
|
||||
{
|
||||
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
|
||||
&& save[-2] == L_('0'))
|
||||
*endptr = (STRING_TYPE *) &save[-1];
|
||||
else
|
||||
/* There was no number to convert. */
|
||||
*endptr = (STRING_TYPE *) nptr;
|
||||
}
|
||||
|
||||
return 0L;
|
||||
}
|
||||
|
||||
/* External user entry point. */
|
||||
|
||||
|
||||
INT
|
||||
#ifdef weak_function
|
||||
weak_function
|
||||
#endif
|
||||
strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
|
||||
int base LOCALE_PARAM_PROTO)
|
||||
{
|
||||
return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
|
||||
}
|
33
lib/strtoll.c
Normal file
33
lib/strtoll.c
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* Function to parse a `long long int' from text.
|
||||
Copyright (C) 1995-1997, 1999, 2001, 2009-2011 Free Software Foundation,
|
||||
Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define QUAD 1
|
||||
|
||||
#include <strtol.c>
|
||||
|
||||
#ifdef _LIBC
|
||||
# ifdef SHARED
|
||||
# include <shlib-compat.h>
|
||||
|
||||
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
|
||||
compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
|
||||
# endif
|
||||
|
||||
# endif
|
||||
weak_alias (strtoll, strtoq)
|
||||
#endif
|
19
lib/strtoul.c
Normal file
19
lib/strtoul.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* Copyright (C) 1991, 1997, 2009-2011 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define UNSIGNED 1
|
||||
|
||||
#include "strtol.c"
|
26
lib/strtoull.c
Normal file
26
lib/strtoull.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Function to parse an `unsigned long long int' from text.
|
||||
Copyright (C) 1995-1997, 1999, 2009-2011 Free Software Foundation, Inc.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 3 of the License, or any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#define QUAD 1
|
||||
|
||||
#include "strtoul.c"
|
||||
|
||||
#ifdef _LIBC
|
||||
strong_alias (__strtoull_internal, __strtouq_internal)
|
||||
weak_alias (strtoull, strtouq)
|
||||
#endif
|
2
lib/strtoumax.c
Normal file
2
lib/strtoumax.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
#define UNSIGNED 1
|
||||
#include "strtoimax.c"
|
202
lib/verify.h
Normal file
202
lib/verify.h
Normal file
|
@ -0,0 +1,202 @@
|
|||
/* Compile-time assert-like macros.
|
||||
|
||||
Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */
|
||||
|
||||
#ifndef VERIFY_H
|
||||
# define VERIFY_H 1
|
||||
|
||||
/* Define HAVE__STATIC_ASSERT to 1 if _Static_assert works as per the
|
||||
C1X draft N1548 section 6.7.10. This is supported by GCC 4.6.0 and
|
||||
later, in C mode, and its use here generates easier-to-read diagnostics
|
||||
when verify (R) fails.
|
||||
|
||||
Define HAVE_STATIC_ASSERT to 1 if static_assert works as per the
|
||||
C1X draft N1548 section 7.2 or the C++0X draft N3242 section 7.(4).
|
||||
This will likely be supported by future GCC versions, in C++ mode.
|
||||
|
||||
For now, use this only with GCC. Eventually whether _Static_assert
|
||||
and static_assert works should be determined by 'configure'. */
|
||||
# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus
|
||||
# define HAVE__STATIC_ASSERT 1
|
||||
# endif
|
||||
/* The condition (99 < __GNUC__) is temporary, until we know about the
|
||||
first G++ release that supports static_assert. */
|
||||
# if (99 < __GNUC__) && defined __cplusplus
|
||||
# define HAVE_STATIC_ASSERT 1
|
||||
# endif
|
||||
|
||||
/* Each of these macros verifies that its argument R is nonzero. To
|
||||
be portable, R should be an integer constant expression. Unlike
|
||||
assert (R), there is no run-time overhead.
|
||||
|
||||
There are two macros, since no single macro can be used in all
|
||||
contexts in C. verify_true (R) is for scalar contexts, including
|
||||
integer constant expression contexts. verify (R) is for declaration
|
||||
contexts, e.g., the top level.
|
||||
|
||||
Symbols ending in "__" are private to this header.
|
||||
|
||||
If _Static_assert works, verify (R) uses it directly. Similarly,
|
||||
verify_true (R) works by packaging a _Static_assert inside a struct
|
||||
that is an operand of sizeof.
|
||||
|
||||
The code below uses several ideas for C++ compilers, and for C
|
||||
compilers that do not support _Static_assert:
|
||||
|
||||
* The first step is ((R) ? 1 : -1). Given an expression R, of
|
||||
integral or boolean or floating-point type, this yields an
|
||||
expression of integral type, whose value is later verified to be
|
||||
constant and nonnegative.
|
||||
|
||||
* Next this expression W is wrapped in a type
|
||||
struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }.
|
||||
If W is negative, this yields a compile-time error. No compiler can
|
||||
deal with a bit-field of negative size.
|
||||
|
||||
One might think that an array size check would have the same
|
||||
effect, that is, that the type struct { unsigned int dummy[W]; }
|
||||
would work as well. However, inside a function, some compilers
|
||||
(such as C++ compilers and GNU C) allow local parameters and
|
||||
variables inside array size expressions. With these compilers,
|
||||
an array size check would not properly diagnose this misuse of
|
||||
the verify macro:
|
||||
|
||||
void function (int n) { verify (n < 0); }
|
||||
|
||||
* For the verify macro, the struct verify_type__ will need to
|
||||
somehow be embedded into a declaration. To be portable, this
|
||||
declaration must declare an object, a constant, a function, or a
|
||||
typedef name. If the declared entity uses the type directly,
|
||||
such as in
|
||||
|
||||
struct dummy {...};
|
||||
typedef struct {...} dummy;
|
||||
extern struct {...} *dummy;
|
||||
extern void dummy (struct {...} *);
|
||||
extern struct {...} *dummy (void);
|
||||
|
||||
two uses of the verify macro would yield colliding declarations
|
||||
if the entity names are not disambiguated. A workaround is to
|
||||
attach the current line number to the entity name:
|
||||
|
||||
#define _GL_CONCAT0(x, y) x##y
|
||||
#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
|
||||
extern struct {...} * _GL_CONCAT (dummy, __LINE__);
|
||||
|
||||
But this has the problem that two invocations of verify from
|
||||
within the same macro would collide, since the __LINE__ value
|
||||
would be the same for both invocations. (The GCC __COUNTER__
|
||||
macro solves this problem, but is not portable.)
|
||||
|
||||
A solution is to use the sizeof operator. It yields a number,
|
||||
getting rid of the identity of the type. Declarations like
|
||||
|
||||
extern int dummy [sizeof (struct {...})];
|
||||
extern void dummy (int [sizeof (struct {...})]);
|
||||
extern int (*dummy (void)) [sizeof (struct {...})];
|
||||
|
||||
can be repeated.
|
||||
|
||||
* Should the implementation use a named struct or an unnamed struct?
|
||||
Which of the following alternatives can be used?
|
||||
|
||||
extern int dummy [sizeof (struct {...})];
|
||||
extern int dummy [sizeof (struct verify_type__ {...})];
|
||||
extern void dummy (int [sizeof (struct {...})]);
|
||||
extern void dummy (int [sizeof (struct verify_type__ {...})]);
|
||||
extern int (*dummy (void)) [sizeof (struct {...})];
|
||||
extern int (*dummy (void)) [sizeof (struct verify_type__ {...})];
|
||||
|
||||
In the second and sixth case, the struct type is exported to the
|
||||
outer scope; two such declarations therefore collide. GCC warns
|
||||
about the first, third, and fourth cases. So the only remaining
|
||||
possibility is the fifth case:
|
||||
|
||||
extern int (*dummy (void)) [sizeof (struct {...})];
|
||||
|
||||
* GCC warns about duplicate declarations of the dummy function if
|
||||
-Wredundant_decls is used. GCC 4.3 and later have a builtin
|
||||
__COUNTER__ macro that can let us generate unique identifiers for
|
||||
each dummy function, to suppress this warning.
|
||||
|
||||
* This implementation exploits the fact that older versions of GCC,
|
||||
which do not support _Static_assert, also do not warn about the
|
||||
last declaration mentioned above.
|
||||
|
||||
* In C++, any struct definition inside sizeof is invalid.
|
||||
Use a template type to work around the problem. */
|
||||
|
||||
/* Concatenate two preprocessor tokens. */
|
||||
# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
|
||||
# define _GL_CONCAT0(x, y) x##y
|
||||
|
||||
/* _GL_COUNTER is an integer, preferably one that changes each time we
|
||||
use it. Use __COUNTER__ if it works, falling back on __LINE__
|
||||
otherwise. __LINE__ isn't perfect, but it's better than a
|
||||
constant. */
|
||||
# if defined __COUNTER__ && __COUNTER__ != __COUNTER__
|
||||
# define _GL_COUNTER __COUNTER__
|
||||
# else
|
||||
# define _GL_COUNTER __LINE__
|
||||
# endif
|
||||
|
||||
/* Generate a symbol with the given prefix, making it unique if
|
||||
possible. */
|
||||
# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
|
||||
|
||||
/* Verify requirement R at compile-time, as an integer constant expression.
|
||||
Return 1. */
|
||||
|
||||
# ifdef __cplusplus
|
||||
template <int w>
|
||||
struct verify_type__ { unsigned int verify_error_if_negative_size__: w; };
|
||||
# define verify_true(R) \
|
||||
(!!sizeof (verify_type__<(R) ? 1 : -1>))
|
||||
# elif HAVE__STATIC_ASSERT
|
||||
# define verify_true(R) \
|
||||
(!!sizeof \
|
||||
(struct { \
|
||||
_Static_assert (R, "verify_true (" #R ")"); \
|
||||
int verify_dummy__; \
|
||||
}))
|
||||
# elif HAVE_STATIC_ASSERT
|
||||
# define verify_true(R) \
|
||||
(!!sizeof \
|
||||
(struct { \
|
||||
static_assert (R, "verify_true (" #R ")"); \
|
||||
int verify_dummy__; \
|
||||
}))
|
||||
# else
|
||||
# define verify_true(R) \
|
||||
(!!sizeof \
|
||||
(struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; }))
|
||||
# endif
|
||||
|
||||
/* Verify requirement R at compile-time, as a declaration without a
|
||||
trailing ';'. */
|
||||
|
||||
# if HAVE__STATIC_ASSERT
|
||||
# define verify(R) _Static_assert (R, "verify (" #R ")")
|
||||
# elif HAVE_STATIC_ASSERT
|
||||
# define verify(R) static_assert (R, "verify (" #R ")")
|
||||
# else
|
||||
# define verify(R) \
|
||||
extern int (* _GL_GENSYM (verify_function) (void)) [verify_true (R)]
|
||||
# endif
|
||||
|
||||
#endif
|
1306
lib/wchar.h
Normal file
1306
lib/wchar.h
Normal file
File diff suppressed because it is too large
Load diff
994
lib/wchar.in.h
Normal file
994
lib/wchar.in.h
Normal file
|
@ -0,0 +1,994 @@
|
|||
/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
|
||||
|
||||
Copyright (C) 2007-2011 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Eric Blake. */
|
||||
|
||||
/*
|
||||
* ISO C 99 <wchar.h> for platforms that have issues.
|
||||
* <http://www.opengroup.org/susv3xbd/wchar.h.html>
|
||||
*
|
||||
* For now, this just ensures proper prerequisite inclusion order and
|
||||
* the declaration of wcwidth().
|
||||
*/
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
#endif
|
||||
@PRAGMA_COLUMNS@
|
||||
|
||||
#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
|
||||
/* Special invocation convention:
|
||||
- Inside glibc and uClibc header files.
|
||||
- On HP-UX 11.00 we have a sequence of nested includes
|
||||
<wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
|
||||
once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
|
||||
and once directly. In both situations 'wint_t' is not yet defined,
|
||||
therefore we cannot provide the function overrides; instead include only
|
||||
the system's <wchar.h>.
|
||||
- On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
|
||||
the latter includes <wchar.h>. But here, we have no way to detect whether
|
||||
<wctype.h> is completely included or is still being included. */
|
||||
|
||||
#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
|
||||
|
||||
#else
|
||||
/* Normal invocation convention. */
|
||||
|
||||
#ifndef _GL_WCHAR_H
|
||||
|
||||
#define _GL_ALREADY_INCLUDING_WCHAR_H
|
||||
|
||||
#if @HAVE_FEATURES_H@
|
||||
# include <features.h> /* for __GLIBC__ */
|
||||
#endif
|
||||
|
||||
/* 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>.
|
||||
In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
|
||||
by <stddef.h>.
|
||||
But avoid namespace pollution on glibc systems. */
|
||||
#if !(defined __GLIBC__ && !defined __UCLIBC__)
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
#ifndef __GLIBC__
|
||||
# include <stdio.h>
|
||||
# include <time.h>
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
|
||||
#undef _GL_ALREADY_INCLUDING_WCHAR_H
|
||||
|
||||
#ifndef _GL_WCHAR_H
|
||||
#define _GL_WCHAR_H
|
||||
|
||||
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
||||
|
||||
/* The definition of _GL_ARG_NONNULL is copied here. */
|
||||
|
||||
/* The definition of _GL_WARN_ON_USE is copied here. */
|
||||
|
||||
|
||||
/* Define wint_t and WEOF. (Also done in wctype.in.h.) */
|
||||
#if !@HAVE_WINT_T@ && !defined wint_t
|
||||
# define wint_t int
|
||||
# ifndef WEOF
|
||||
# define WEOF -1
|
||||
# endif
|
||||
#else
|
||||
# ifndef WEOF
|
||||
# define WEOF ((wint_t) -1)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Override mbstate_t if it is too small.
|
||||
On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
|
||||
implementing mbrtowc for encodings like UTF-8. */
|
||||
#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
|
||||
# if !GNULIB_defined_mbstate_t
|
||||
typedef int rpl_mbstate_t;
|
||||
# undef mbstate_t
|
||||
# define mbstate_t rpl_mbstate_t
|
||||
# define GNULIB_defined_mbstate_t 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a single-byte character to a wide character. */
|
||||
#if @GNULIB_BTOWC@
|
||||
# if @REPLACE_BTOWC@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef btowc
|
||||
# define btowc rpl_btowc
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (btowc, wint_t, (int c));
|
||||
_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
|
||||
# else
|
||||
# if !@HAVE_BTOWC@
|
||||
_GL_FUNCDECL_SYS (btowc, wint_t, (int c));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (btowc);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef btowc
|
||||
# if HAVE_RAW_DECL_BTOWC
|
||||
_GL_WARN_ON_USE (btowc, "btowc is unportable - "
|
||||
"use gnulib module btowc for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a wide character to a single-byte character. */
|
||||
#if @GNULIB_WCTOB@
|
||||
# if @REPLACE_WCTOB@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wctob
|
||||
# define wctob rpl_wctob
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
|
||||
_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
|
||||
# else
|
||||
# if !defined wctob && !@HAVE_DECL_WCTOB@
|
||||
/* wctob is provided by gnulib, or wctob exists but is not declared. */
|
||||
_GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wctob);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wctob
|
||||
# if HAVE_RAW_DECL_WCTOB
|
||||
_GL_WARN_ON_USE (wctob, "wctob is unportable - "
|
||||
"use gnulib module wctob for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Test whether *PS is in the initial state. */
|
||||
#if @GNULIB_MBSINIT@
|
||||
# if @REPLACE_MBSINIT@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef mbsinit
|
||||
# define mbsinit rpl_mbsinit
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
|
||||
_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_MBSINIT@
|
||||
_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (mbsinit);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mbsinit
|
||||
# if HAVE_RAW_DECL_MBSINIT
|
||||
_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
|
||||
"use gnulib module mbsinit for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a multibyte character to a wide character. */
|
||||
#if @GNULIB_MBRTOWC@
|
||||
# if @REPLACE_MBRTOWC@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef mbrtowc
|
||||
# define mbrtowc rpl_mbrtowc
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (mbrtowc, size_t,
|
||||
(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
|
||||
_GL_CXXALIAS_RPL (mbrtowc, size_t,
|
||||
(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_MBRTOWC@
|
||||
_GL_FUNCDECL_SYS (mbrtowc, size_t,
|
||||
(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (mbrtowc, size_t,
|
||||
(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (mbrtowc);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mbrtowc
|
||||
# if HAVE_RAW_DECL_MBRTOWC
|
||||
_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
|
||||
"use gnulib module mbrtowc for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Recognize a multibyte character. */
|
||||
#if @GNULIB_MBRLEN@
|
||||
# if @REPLACE_MBRLEN@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef mbrlen
|
||||
# define mbrlen rpl_mbrlen
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
|
||||
_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_MBRLEN@
|
||||
_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (mbrlen);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mbrlen
|
||||
# if HAVE_RAW_DECL_MBRLEN
|
||||
_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
|
||||
"use gnulib module mbrlen for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a string to a wide string. */
|
||||
#if @GNULIB_MBSRTOWCS@
|
||||
# if @REPLACE_MBSRTOWCS@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef mbsrtowcs
|
||||
# define mbsrtowcs rpl_mbsrtowcs
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t len,
|
||||
mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_MBSRTOWCS@
|
||||
_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t len,
|
||||
mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (mbsrtowcs);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mbsrtowcs
|
||||
# if HAVE_RAW_DECL_MBSRTOWCS
|
||||
_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
|
||||
"use gnulib module mbsrtowcs for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a string to a wide string. */
|
||||
#if @GNULIB_MBSNRTOWCS@
|
||||
# if @REPLACE_MBSNRTOWCS@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef mbsnrtowcs
|
||||
# define mbsnrtowcs rpl_mbsnrtowcs
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_MBSNRTOWCS@
|
||||
_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
|
||||
(wchar_t *dest, const char **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (mbsnrtowcs);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef mbsnrtowcs
|
||||
# if HAVE_RAW_DECL_MBSNRTOWCS
|
||||
_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
|
||||
"use gnulib module mbsnrtowcs for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a wide character to a multibyte character. */
|
||||
#if @GNULIB_WCRTOMB@
|
||||
# if @REPLACE_WCRTOMB@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wcrtomb
|
||||
# define wcrtomb rpl_wcrtomb
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
|
||||
_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_WCRTOMB@
|
||||
_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wcrtomb);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcrtomb
|
||||
# if HAVE_RAW_DECL_WCRTOMB
|
||||
_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
|
||||
"use gnulib module wcrtomb for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a wide string to a string. */
|
||||
#if @GNULIB_WCSRTOMBS@
|
||||
# if @REPLACE_WCSRTOMBS@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wcsrtombs
|
||||
# define wcsrtombs rpl_wcsrtombs
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wcsrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
_GL_CXXALIAS_RPL (wcsrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t len,
|
||||
mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_WCSRTOMBS@
|
||||
_GL_FUNCDECL_SYS (wcsrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t len,
|
||||
mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wcsrtombs);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsrtombs
|
||||
# if HAVE_RAW_DECL_WCSRTOMBS
|
||||
_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
|
||||
"use gnulib module wcsrtombs for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Convert a wide string to a string. */
|
||||
#if @GNULIB_WCSNRTOMBS@
|
||||
# if @REPLACE_WCSNRTOMBS@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wcsnrtombs
|
||||
# define wcsnrtombs rpl_wcsnrtombs
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps));
|
||||
# else
|
||||
# if !@HAVE_WCSNRTOMBS@
|
||||
_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps)
|
||||
_GL_ARG_NONNULL ((2)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
|
||||
(char *dest, const wchar_t **srcp, size_t srclen, size_t len,
|
||||
mbstate_t *ps));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wcsnrtombs);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsnrtombs
|
||||
# if HAVE_RAW_DECL_WCSNRTOMBS
|
||||
_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
|
||||
"use gnulib module wcsnrtombs for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the number of screen columns needed for WC. */
|
||||
#if @GNULIB_WCWIDTH@
|
||||
# if @REPLACE_WCWIDTH@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wcwidth
|
||||
# define wcwidth rpl_wcwidth
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
|
||||
_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
|
||||
# else
|
||||
# if !@HAVE_DECL_WCWIDTH@
|
||||
/* wcwidth exists but is not declared. */
|
||||
_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wcwidth);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcwidth
|
||||
# if HAVE_RAW_DECL_WCWIDTH
|
||||
_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
|
||||
"use gnulib module wcwidth for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Search N wide characters of S for C. */
|
||||
#if @GNULIB_WMEMCHR@
|
||||
# if !@HAVE_WMEMCHR@
|
||||
_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n));
|
||||
# endif
|
||||
/* On some systems, this function is defined as an overloaded function:
|
||||
extern "C++" {
|
||||
const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
|
||||
wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
|
||||
} */
|
||||
_GL_CXXALIAS_SYS_CAST2 (wmemchr,
|
||||
wchar_t *, (const wchar_t *, wchar_t, size_t),
|
||||
const wchar_t *, (const wchar_t *, wchar_t, size_t));
|
||||
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||
_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
|
||||
_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
|
||||
(const wchar_t *s, wchar_t c, size_t n));
|
||||
# else
|
||||
_GL_CXXALIASWARN (wmemchr);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wmemchr
|
||||
# if HAVE_RAW_DECL_WMEMCHR
|
||||
_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
|
||||
"use gnulib module wmemchr for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare N wide characters of S1 and S2. */
|
||||
#if @GNULIB_WMEMCMP@
|
||||
# if !@HAVE_WMEMCMP@
|
||||
_GL_FUNCDECL_SYS (wmemcmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wmemcmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
_GL_CXXALIASWARN (wmemcmp);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wmemcmp
|
||||
# if HAVE_RAW_DECL_WMEMCMP
|
||||
_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
|
||||
"use gnulib module wmemcmp for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy N wide characters of SRC to DEST. */
|
||||
#if @GNULIB_WMEMCPY@
|
||||
# if !@HAVE_WMEMCPY@
|
||||
_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
_GL_CXXALIASWARN (wmemcpy);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wmemcpy
|
||||
# if HAVE_RAW_DECL_WMEMCPY
|
||||
_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
|
||||
"use gnulib module wmemcpy for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
|
||||
overlapping memory areas. */
|
||||
#if @GNULIB_WMEMMOVE@
|
||||
# if !@HAVE_WMEMMOVE@
|
||||
_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
_GL_CXXALIASWARN (wmemmove);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wmemmove
|
||||
# if HAVE_RAW_DECL_WMEMMOVE
|
||||
_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
|
||||
"use gnulib module wmemmove for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Set N wide characters of S to C. */
|
||||
#if @GNULIB_WMEMSET@
|
||||
# if !@HAVE_WMEMSET@
|
||||
_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
|
||||
_GL_CXXALIASWARN (wmemset);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wmemset
|
||||
# if HAVE_RAW_DECL_WMEMSET
|
||||
_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
|
||||
"use gnulib module wmemset for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the number of wide characters in S. */
|
||||
#if @GNULIB_WCSLEN@
|
||||
# if !@HAVE_WCSLEN@
|
||||
_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
|
||||
_GL_CXXALIASWARN (wcslen);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcslen
|
||||
# if HAVE_RAW_DECL_WCSLEN
|
||||
_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
|
||||
"use gnulib module wcslen for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the number of wide characters in S, but at most MAXLEN. */
|
||||
#if @GNULIB_WCSNLEN@
|
||||
# if !@HAVE_WCSNLEN@
|
||||
_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
|
||||
_GL_CXXALIASWARN (wcsnlen);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsnlen
|
||||
# if HAVE_RAW_DECL_WCSNLEN
|
||||
_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
|
||||
"use gnulib module wcsnlen for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy SRC to DEST. */
|
||||
#if @GNULIB_WCSCPY@
|
||||
# if !@HAVE_WCSCPY@
|
||||
_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
_GL_CXXALIASWARN (wcscpy);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscpy
|
||||
# if HAVE_RAW_DECL_WCSCPY
|
||||
_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
|
||||
"use gnulib module wcscpy for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */
|
||||
#if @GNULIB_WCPCPY@
|
||||
# if !@HAVE_WCPCPY@
|
||||
_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
_GL_CXXALIASWARN (wcpcpy);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcpcpy
|
||||
# if HAVE_RAW_DECL_WCPCPY
|
||||
_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
|
||||
"use gnulib module wcpcpy for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy no more than N wide characters of SRC to DEST. */
|
||||
#if @GNULIB_WCSNCPY@
|
||||
# if !@HAVE_WCSNCPY@
|
||||
_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
_GL_CXXALIASWARN (wcsncpy);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsncpy
|
||||
# if HAVE_RAW_DECL_WCSNCPY
|
||||
_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
|
||||
"use gnulib module wcsncpy for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Copy no more than N characters of SRC to DEST, returning the address of
|
||||
the last character written into DEST. */
|
||||
#if @GNULIB_WCPNCPY@
|
||||
# if !@HAVE_WCPNCPY@
|
||||
_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
_GL_CXXALIASWARN (wcpncpy);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcpncpy
|
||||
# if HAVE_RAW_DECL_WCPNCPY
|
||||
_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
|
||||
"use gnulib module wcpncpy for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Append SRC onto DEST. */
|
||||
#if @GNULIB_WCSCAT@
|
||||
# if !@HAVE_WCSCAT@
|
||||
_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
|
||||
_GL_CXXALIASWARN (wcscat);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscat
|
||||
# if HAVE_RAW_DECL_WCSCAT
|
||||
_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
|
||||
"use gnulib module wcscat for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Append no more than N wide characters of SRC onto DEST. */
|
||||
#if @GNULIB_WCSNCAT@
|
||||
# if !@HAVE_WCSNCAT@
|
||||
_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
|
||||
(wchar_t *dest, const wchar_t *src, size_t n));
|
||||
_GL_CXXALIASWARN (wcsncat);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsncat
|
||||
# if HAVE_RAW_DECL_WCSNCAT
|
||||
_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
|
||||
"use gnulib module wcsncat for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare S1 and S2. */
|
||||
#if @GNULIB_WCSCMP@
|
||||
# if !@HAVE_WCSCMP@
|
||||
_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
_GL_CXXALIASWARN (wcscmp);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscmp
|
||||
# if HAVE_RAW_DECL_WCSCMP
|
||||
_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
|
||||
"use gnulib module wcscmp for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare no more than N wide characters of S1 and S2. */
|
||||
#if @GNULIB_WCSNCMP@
|
||||
# if !@HAVE_WCSNCMP@
|
||||
_GL_FUNCDECL_SYS (wcsncmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsncmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
_GL_CXXALIASWARN (wcsncmp);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsncmp
|
||||
# if HAVE_RAW_DECL_WCSNCMP
|
||||
_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
|
||||
"use gnulib module wcsncmp for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare S1 and S2, ignoring case. */
|
||||
#if @GNULIB_WCSCASECMP@
|
||||
# if !@HAVE_WCSCASECMP@
|
||||
_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
_GL_CXXALIASWARN (wcscasecmp);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscasecmp
|
||||
# if HAVE_RAW_DECL_WCSCASECMP
|
||||
_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
|
||||
"use gnulib module wcscasecmp for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare no more than N chars of S1 and S2, ignoring case. */
|
||||
#if @GNULIB_WCSNCASECMP@
|
||||
# if !@HAVE_WCSNCASECMP@
|
||||
_GL_FUNCDECL_SYS (wcsncasecmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsncasecmp, int,
|
||||
(const wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
_GL_CXXALIASWARN (wcsncasecmp);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsncasecmp
|
||||
# if HAVE_RAW_DECL_WCSNCASECMP
|
||||
_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
|
||||
"use gnulib module wcsncasecmp for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
|
||||
category of the current locale. */
|
||||
#if @GNULIB_WCSCOLL@
|
||||
# if !@HAVE_WCSCOLL@
|
||||
_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
|
||||
_GL_CXXALIASWARN (wcscoll);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscoll
|
||||
# if HAVE_RAW_DECL_WCSCOLL
|
||||
_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
|
||||
"use gnulib module wcscoll for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
|
||||
to two transformed strings the result is the as applying 'wcscoll' to the
|
||||
original strings. */
|
||||
#if @GNULIB_WCSXFRM@
|
||||
# if !@HAVE_WCSXFRM@
|
||||
_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
|
||||
_GL_CXXALIASWARN (wcsxfrm);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsxfrm
|
||||
# if HAVE_RAW_DECL_WCSXFRM
|
||||
_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
|
||||
"use gnulib module wcsxfrm for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
#if @GNULIB_WCSDUP@
|
||||
# if !@HAVE_WCSDUP@
|
||||
_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
|
||||
_GL_CXXALIASWARN (wcsdup);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsdup
|
||||
# if HAVE_RAW_DECL_WCSDUP
|
||||
_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
|
||||
"use gnulib module wcsdup for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Find the first occurrence of WC in WCS. */
|
||||
#if @GNULIB_WCSCHR@
|
||||
# if !@HAVE_WCSCHR@
|
||||
_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc));
|
||||
# endif
|
||||
/* On some systems, this function is defined as an overloaded function:
|
||||
extern "C++" {
|
||||
const wchar_t * std::wcschr (const wchar_t *, wchar_t);
|
||||
wchar_t * std::wcschr (wchar_t *, wchar_t);
|
||||
} */
|
||||
_GL_CXXALIAS_SYS_CAST2 (wcschr,
|
||||
wchar_t *, (const wchar_t *, wchar_t),
|
||||
const wchar_t *, (const wchar_t *, wchar_t));
|
||||
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||
_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
|
||||
_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
|
||||
# else
|
||||
_GL_CXXALIASWARN (wcschr);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcschr
|
||||
# if HAVE_RAW_DECL_WCSCHR
|
||||
_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
|
||||
"use gnulib module wcschr for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Find the last occurrence of WC in WCS. */
|
||||
#if @GNULIB_WCSRCHR@
|
||||
# if !@HAVE_WCSRCHR@
|
||||
_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc));
|
||||
# endif
|
||||
/* On some systems, this function is defined as an overloaded function:
|
||||
extern "C++" {
|
||||
const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
|
||||
wchar_t * std::wcsrchr (wchar_t *, wchar_t);
|
||||
} */
|
||||
_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
|
||||
wchar_t *, (const wchar_t *, wchar_t),
|
||||
const wchar_t *, (const wchar_t *, wchar_t));
|
||||
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||
_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
|
||||
_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
|
||||
# else
|
||||
_GL_CXXALIASWARN (wcsrchr);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsrchr
|
||||
# if HAVE_RAW_DECL_WCSRCHR
|
||||
_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
|
||||
"use gnulib module wcsrchr for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the length of the initial segmet of WCS which consists entirely
|
||||
of wide characters not in REJECT. */
|
||||
#if @GNULIB_WCSCSPN@
|
||||
# if !@HAVE_WCSCSPN@
|
||||
_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
|
||||
_GL_CXXALIASWARN (wcscspn);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcscspn
|
||||
# if HAVE_RAW_DECL_WCSCSPN
|
||||
_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
|
||||
"use gnulib module wcscspn for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Return the length of the initial segmet of WCS which consists entirely
|
||||
of wide characters in ACCEPT. */
|
||||
#if @GNULIB_WCSSPN@
|
||||
# if !@HAVE_WCSSPN@
|
||||
_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
|
||||
_GL_CXXALIASWARN (wcsspn);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsspn
|
||||
# if HAVE_RAW_DECL_WCSSPN
|
||||
_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
|
||||
"use gnulib module wcsspn for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Find the first occurrence in WCS of any character in ACCEPT. */
|
||||
#if @GNULIB_WCSPBRK@
|
||||
# if !@HAVE_WCSPBRK@
|
||||
_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
|
||||
(const wchar_t *wcs, const wchar_t *accept));
|
||||
# endif
|
||||
/* On some systems, this function is defined as an overloaded function:
|
||||
extern "C++" {
|
||||
const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
|
||||
wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
|
||||
} */
|
||||
_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
|
||||
wchar_t *, (const wchar_t *, const wchar_t *),
|
||||
const wchar_t *, (const wchar_t *, const wchar_t *));
|
||||
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||
_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
|
||||
(wchar_t *wcs, const wchar_t *accept));
|
||||
_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
|
||||
(const wchar_t *wcs, const wchar_t *accept));
|
||||
# else
|
||||
_GL_CXXALIASWARN (wcspbrk);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcspbrk
|
||||
# if HAVE_RAW_DECL_WCSPBRK
|
||||
_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
|
||||
"use gnulib module wcspbrk for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Find the first occurrence of NEEDLE in HAYSTACK. */
|
||||
#if @GNULIB_WCSSTR@
|
||||
# if !@HAVE_WCSSTR@
|
||||
_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
|
||||
(const wchar_t *haystack, const wchar_t *needle));
|
||||
# endif
|
||||
/* On some systems, this function is defined as an overloaded function:
|
||||
extern "C++" {
|
||||
const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
|
||||
wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
|
||||
} */
|
||||
_GL_CXXALIAS_SYS_CAST2 (wcsstr,
|
||||
wchar_t *, (const wchar_t *, const wchar_t *),
|
||||
const wchar_t *, (const wchar_t *, const wchar_t *));
|
||||
# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||
_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
|
||||
(wchar_t *haystack, const wchar_t *needle));
|
||||
_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
|
||||
(const wchar_t *haystack, const wchar_t *needle));
|
||||
# else
|
||||
_GL_CXXALIASWARN (wcsstr);
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcsstr
|
||||
# if HAVE_RAW_DECL_WCSSTR
|
||||
_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
|
||||
"use gnulib module wcsstr for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Divide WCS into tokens separated by characters in DELIM. */
|
||||
#if @GNULIB_WCSTOK@
|
||||
# if !@HAVE_WCSTOK@
|
||||
_GL_FUNCDECL_SYS (wcstok, wchar_t *,
|
||||
(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcstok, wchar_t *,
|
||||
(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
|
||||
_GL_CXXALIASWARN (wcstok);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcstok
|
||||
# if HAVE_RAW_DECL_WCSTOK
|
||||
_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
|
||||
"use gnulib module wcstok for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Determine number of column positions required for first N wide
|
||||
characters (or fewer if S ends before this) in S. */
|
||||
#if @GNULIB_WCSWIDTH@
|
||||
# if @REPLACE_WCSWIDTH@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef wcswidth
|
||||
# define wcswidth rpl_wcswidth
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n));
|
||||
_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
|
||||
# else
|
||||
# if !@HAVE_WCSWIDTH@
|
||||
_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
|
||||
# endif
|
||||
_GL_CXXALIASWARN (wcswidth);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef wcswidth
|
||||
# if HAVE_RAW_DECL_WCSWIDTH
|
||||
_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
|
||||
"use gnulib module wcswidth for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _GL_WCHAR_H */
|
||||
#endif /* _GL_WCHAR_H */
|
||||
#endif
|
|
@ -43,6 +43,7 @@ AC_DEFUN([gl_EARLY],
|
|||
# Code from module ignore-value:
|
||||
# Code from module include_next:
|
||||
# Code from module intprops:
|
||||
# Code from module inttypes:
|
||||
# Code from module lstat:
|
||||
# Code from module mktime:
|
||||
# Code from module multiarch:
|
||||
|
@ -56,12 +57,20 @@ AC_DEFUN([gl_EARLY],
|
|||
# Code from module stdio:
|
||||
# Code from module stdlib:
|
||||
# Code from module strftime:
|
||||
# Code from module strtoimax:
|
||||
# Code from module strtol:
|
||||
# Code from module strtoll:
|
||||
# Code from module strtoul:
|
||||
# Code from module strtoull:
|
||||
# Code from module strtoumax:
|
||||
# Code from module symlink:
|
||||
# Code from module sys_stat:
|
||||
# Code from module time:
|
||||
# Code from module time_r:
|
||||
# Code from module unistd:
|
||||
# Code from module verify:
|
||||
# Code from module warn-on-use:
|
||||
# Code from module wchar:
|
||||
])
|
||||
|
||||
# This macro should be invoked from ./configure.in, in the section
|
||||
|
@ -108,6 +117,8 @@ AC_DEFUN([gl_INIT],
|
|||
AC_REQUIRE([AC_C_INLINE])
|
||||
# Code from module include_next:
|
||||
# Code from module intprops:
|
||||
# Code from module inttypes:
|
||||
gl_INTTYPES_H
|
||||
# Code from module lstat:
|
||||
gl_FUNC_LSTAT
|
||||
gl_SYS_STAT_MODULE_INDICATOR([lstat])
|
||||
|
@ -138,6 +149,22 @@ AC_DEFUN([gl_INIT],
|
|||
gl_STDLIB_H
|
||||
# Code from module strftime:
|
||||
gl_FUNC_GNU_STRFTIME
|
||||
# Code from module strtoimax:
|
||||
gl_FUNC_STRTOIMAX
|
||||
gl_INTTYPES_MODULE_INDICATOR([strtoimax])
|
||||
# Code from module strtol:
|
||||
gl_FUNC_STRTOL
|
||||
# Code from module strtoll:
|
||||
gl_FUNC_STRTOLL
|
||||
gl_STDLIB_MODULE_INDICATOR([strtoll])
|
||||
# Code from module strtoul:
|
||||
gl_FUNC_STRTOUL
|
||||
# Code from module strtoull:
|
||||
gl_FUNC_STRTOULL
|
||||
gl_STDLIB_MODULE_INDICATOR([strtoull])
|
||||
# Code from module strtoumax:
|
||||
gl_FUNC_STRTOUMAX
|
||||
gl_INTTYPES_MODULE_INDICATOR([strtoumax])
|
||||
# Code from module symlink:
|
||||
gl_FUNC_SYMLINK
|
||||
gl_UNISTD_MODULE_INDICATOR([symlink])
|
||||
|
@ -151,7 +178,10 @@ AC_DEFUN([gl_INIT],
|
|||
gl_TIME_MODULE_INDICATOR([time_r])
|
||||
# Code from module unistd:
|
||||
gl_UNISTD_H
|
||||
# Code from module verify:
|
||||
# Code from module warn-on-use:
|
||||
# Code from module wchar:
|
||||
gl_WCHAR_H
|
||||
# End of code from modules
|
||||
m4_ifval(gl_LIBSOURCES_LIST, [
|
||||
m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
|
||||
|
@ -313,6 +343,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/gettext.h
|
||||
lib/ignore-value.h
|
||||
lib/intprops.h
|
||||
lib/inttypes.in.h
|
||||
lib/lstat.c
|
||||
lib/md5.c
|
||||
lib/md5.h
|
||||
|
@ -327,11 +358,19 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/stdlib.in.h
|
||||
lib/strftime.c
|
||||
lib/strftime.h
|
||||
lib/strtoimax.c
|
||||
lib/strtol.c
|
||||
lib/strtoll.c
|
||||
lib/strtoul.c
|
||||
lib/strtoull.c
|
||||
lib/strtoumax.c
|
||||
lib/symlink.c
|
||||
lib/sys_stat.in.h
|
||||
lib/time.in.h
|
||||
lib/time_r.c
|
||||
lib/unistd.in.h
|
||||
lib/verify.h
|
||||
lib/wchar.in.h
|
||||
m4/00gnulib.m4
|
||||
m4/c-strtod.m4
|
||||
m4/extensions.m4
|
||||
|
@ -340,6 +379,8 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/getopt.m4
|
||||
m4/gnulib-common.m4
|
||||
m4/include_next.m4
|
||||
m4/inttypes-pri.m4
|
||||
m4/inttypes.m4
|
||||
m4/longlong.m4
|
||||
m4/lstat.m4
|
||||
m4/md5.m4
|
||||
|
@ -356,6 +397,12 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/stdio_h.m4
|
||||
m4/stdlib_h.m4
|
||||
m4/strftime.m4
|
||||
m4/strtoimax.m4
|
||||
m4/strtol.m4
|
||||
m4/strtoll.m4
|
||||
m4/strtoul.m4
|
||||
m4/strtoull.m4
|
||||
m4/strtoumax.m4
|
||||
m4/symlink.m4
|
||||
m4/sys_stat_h.m4
|
||||
m4/time_h.m4
|
||||
|
@ -363,5 +410,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/tm_gmtoff.m4
|
||||
m4/unistd_h.m4
|
||||
m4/warn-on-use.m4
|
||||
m4/wchar_h.m4
|
||||
m4/wchar_t.m4
|
||||
m4/wint_t.m4
|
||||
])
|
||||
|
|
42
m4/inttypes-pri.m4
Normal file
42
m4/inttypes-pri.m4
Normal file
|
@ -0,0 +1,42 @@
|
|||
# inttypes-pri.m4 serial 7 (gettext-0.18.2)
|
||||
dnl Copyright (C) 1997-2002, 2006, 2008-2011 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_PREREQ([2.53])
|
||||
|
||||
# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
|
||||
# macros to non-string values. This is the case on AIX 4.3.3.
|
||||
|
||||
AC_DEFUN([gt_INTTYPES_PRI],
|
||||
[
|
||||
AC_CHECK_HEADERS([inttypes.h])
|
||||
if test $ac_cv_header_inttypes_h = yes; then
|
||||
AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
|
||||
[gt_cv_inttypes_pri_broken],
|
||||
[
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <inttypes.h>
|
||||
#ifdef PRId32
|
||||
char *p = PRId32;
|
||||
#endif
|
||||
]],
|
||||
[[]])],
|
||||
[gt_cv_inttypes_pri_broken=no],
|
||||
[gt_cv_inttypes_pri_broken=yes])
|
||||
])
|
||||
fi
|
||||
if test "$gt_cv_inttypes_pri_broken" = yes; then
|
||||
AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
|
||||
[Define if <inttypes.h> exists and defines unusable PRI* macros.])
|
||||
PRI_MACROS_BROKEN=1
|
||||
else
|
||||
PRI_MACROS_BROKEN=0
|
||||
fi
|
||||
AC_SUBST([PRI_MACROS_BROKEN])
|
||||
])
|
302
m4/inttypes.m4
Normal file
302
m4/inttypes.m4
Normal file
|
@ -0,0 +1,302 @@
|
|||
# inttypes.m4 serial 18
|
||||
dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl From Derek Price, Bruno Haible.
|
||||
dnl Test whether <inttypes.h> is supported or must be substituted.
|
||||
|
||||
AC_DEFUN([gl_INTTYPES_H],
|
||||
[
|
||||
AC_REQUIRE([gl_STDINT_H])
|
||||
AC_REQUIRE([gt_INTTYPES_PRI])
|
||||
AC_CHECK_HEADERS_ONCE([inttypes.h])
|
||||
AC_CHECK_DECLS_ONCE([imaxabs])
|
||||
AC_CHECK_DECLS_ONCE([imaxdiv])
|
||||
AC_CHECK_DECLS_ONCE([strtoimax])
|
||||
AC_CHECK_DECLS_ONCE([strtoumax])
|
||||
|
||||
dnl Now see if we need a substitute <inttypes.h>.
|
||||
dnl A complete <inttypes.h> requires
|
||||
dnl - a complete <stdint.h>,
|
||||
dnl - the existence of an <inttypes.h>,
|
||||
dnl - that imaxabs, imaxdiv, strtoimax, strtoumax are declared,
|
||||
dnl - some additional tests.
|
||||
AC_CACHE_CHECK([whether inttypes.h conforms to C99],
|
||||
[gl_cv_header_working_inttypes_h],
|
||||
[gl_cv_header_working_inttypes_h=no
|
||||
if test "$gl_cv_header_working_stdint_h" = yes \
|
||||
&& test $ac_cv_header_inttypes_h = yes \
|
||||
&& test "$ac_cv_have_decl_imaxabs" = yes \
|
||||
&& test "$ac_cv_have_decl_imaxdiv" = yes \
|
||||
&& test "$ac_cv_have_decl_strtoimax" = yes \
|
||||
&& test "$ac_cv_have_decl_strtoumax" = yes; then
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[
|
||||
#include <stddef.h>
|
||||
#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 __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */
|
||||
#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* work if build isn't clean */
|
||||
#include <inttypes.h>
|
||||
|
||||
/* No need to duplicate the tests of stdint.m4; they are subsumed by
|
||||
$gl_cv_header_working_stdint_h = yes. */
|
||||
|
||||
/* Tests for macros supposed to be defined in inttypes.h. */
|
||||
|
||||
const char *k = /* implicit string concatenation */
|
||||
#ifdef INT8_MAX
|
||||
PRId8 PRIi8
|
||||
#endif
|
||||
#ifdef UINT8_MAX
|
||||
PRIo8 PRIu8 PRIx8 PRIX8
|
||||
#endif
|
||||
#ifdef INT16_MAX
|
||||
PRId16 PRIi16
|
||||
#endif
|
||||
#ifdef UINT16_MAX
|
||||
PRIo16 PRIu16 PRIx16 PRIX16
|
||||
#endif
|
||||
#ifdef INT32_MAX
|
||||
PRId32 PRIi32
|
||||
#endif
|
||||
#ifdef UINT32_MAX
|
||||
PRIo32 PRIu32 PRIx32 PRIX32
|
||||
#endif
|
||||
#ifdef INT64_MAX
|
||||
PRId64 PRIi64
|
||||
#endif
|
||||
#ifdef UINT64_MAX
|
||||
PRIo64 PRIu64 PRIx64 PRIX64
|
||||
#endif
|
||||
PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8
|
||||
PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16
|
||||
PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32
|
||||
PRIdLEAST64 PRIiLEAST64
|
||||
PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64
|
||||
PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8
|
||||
PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16
|
||||
PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32
|
||||
PRIdFAST64 PRIiFAST64
|
||||
PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64
|
||||
PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX
|
||||
#ifdef INTPTR_MAX
|
||||
PRIdPTR PRIiPTR
|
||||
#endif
|
||||
#ifdef UINTPTR_MAX
|
||||
PRIoPTR PRIuPTR PRIxPTR PRIXPTR
|
||||
#endif
|
||||
;
|
||||
const char *l = /* implicit string concatenation */
|
||||
#ifdef INT8_MAX
|
||||
SCNd8 SCNi8
|
||||
#endif
|
||||
#ifdef UINT8_MAX
|
||||
SCNo8 SCNu8 SCNx8
|
||||
#endif
|
||||
#ifdef INT16_MAX
|
||||
SCNd16 SCNi16
|
||||
#endif
|
||||
#ifdef UINT16_MAX
|
||||
SCNo16 SCNu16 SCNx16
|
||||
#endif
|
||||
#ifdef INT32_MAX
|
||||
SCNd32 SCNi32
|
||||
#endif
|
||||
#ifdef UINT32_MAX
|
||||
SCNo32 SCNu32 SCNx32
|
||||
#endif
|
||||
#ifdef INT64_MAX
|
||||
SCNd64 SCNi64
|
||||
#endif
|
||||
#ifdef UINT64_MAX
|
||||
SCNo64 SCNu64 SCNx64
|
||||
#endif
|
||||
SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8
|
||||
SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16
|
||||
SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32
|
||||
SCNdLEAST64 SCNiLEAST64
|
||||
SCNoLEAST64 SCNuLEAST64 SCNxLEAST64
|
||||
SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8
|
||||
SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16
|
||||
SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32
|
||||
SCNdFAST64 SCNiFAST64
|
||||
SCNoFAST64 SCNuFAST64 SCNxFAST64
|
||||
SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX
|
||||
#ifdef INTPTR_MAX
|
||||
SCNdPTR SCNiPTR
|
||||
#endif
|
||||
#ifdef UINTPTR_MAX
|
||||
SCNoPTR SCNuPTR SCNxPTR
|
||||
#endif
|
||||
;
|
||||
]])],
|
||||
[gl_cv_header_working_inttypes_h=yes])
|
||||
fi])
|
||||
|
||||
dnl Override <inttypes.h> always, so that the portability warnings work.
|
||||
AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
|
||||
gl_CHECK_NEXT_HEADERS([inttypes.h])
|
||||
|
||||
AC_REQUIRE([gl_MULTIARCH])
|
||||
|
||||
dnl Ensure that <stdint.h> defines the limit macros, since gnulib's
|
||||
dnl <inttypes.h> relies on them. This macro is only needed when a
|
||||
dnl C++ compiler is in use; it has no effect for a C compiler.
|
||||
dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's
|
||||
dnl <inttypes.h> is going to be created, and to avoid redefinition warnings
|
||||
dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS.
|
||||
AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], [1],
|
||||
[Define to make the limit macros in <stdint.h> visible.])
|
||||
AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ],
|
||||
[/* Ensure that <stdint.h> defines the limit macros, since gnulib's
|
||||
<inttypes.h> relies on them. */
|
||||
#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS
|
||||
# define __STDC_LIMIT_MACROS 1
|
||||
#endif
|
||||
])
|
||||
|
||||
PRIPTR_PREFIX=
|
||||
if test -n "$STDINT_H"; then
|
||||
dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
|
||||
PRIPTR_PREFIX='"l"'
|
||||
else
|
||||
dnl Using the system's <stdint.h>.
|
||||
for glpfx in '' l ll I64; do
|
||||
case $glpfx in
|
||||
'') gltype1='int';;
|
||||
l) gltype1='long int';;
|
||||
ll) gltype1='long long int';;
|
||||
I64) gltype1='__int64';;
|
||||
esac
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <stdint.h>
|
||||
extern intptr_t foo;
|
||||
extern $gltype1 foo;]])],
|
||||
[PRIPTR_PREFIX='"'$glpfx'"'])
|
||||
test -n "$PRIPTR_PREFIX" && break
|
||||
done
|
||||
fi
|
||||
AC_SUBST([PRIPTR_PREFIX])
|
||||
|
||||
if test "$ac_cv_have_decl_imaxabs" = yes; then
|
||||
HAVE_DECL_IMAXABS=1
|
||||
else
|
||||
HAVE_DECL_IMAXABS=0
|
||||
fi
|
||||
|
||||
if test "$ac_cv_have_decl_imaxdiv" = yes; then
|
||||
HAVE_DECL_IMAXDIV=1
|
||||
else
|
||||
HAVE_DECL_IMAXDIV=0
|
||||
fi
|
||||
|
||||
if test "$ac_cv_have_decl_strtoimax" = yes; then
|
||||
HAVE_DECL_STRTOIMAX=1
|
||||
else
|
||||
HAVE_DECL_STRTOIMAX=0
|
||||
fi
|
||||
|
||||
if test "$ac_cv_have_decl_strtoumax" = yes; then
|
||||
HAVE_DECL_STRTOUMAX=1
|
||||
else
|
||||
HAVE_DECL_STRTOUMAX=0
|
||||
fi
|
||||
|
||||
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
|
||||
[INT32_MAX_LT_INTMAX_MAX],
|
||||
[defined INT32_MAX && defined INTMAX_MAX],
|
||||
[INT32_MAX < INTMAX_MAX],
|
||||
[sizeof (int) < sizeof (long long int)])
|
||||
if test $APPLE_UNIVERSAL_BUILD = 0; then
|
||||
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
|
||||
[INT64_MAX_EQ_LONG_MAX],
|
||||
[defined INT64_MAX],
|
||||
[INT64_MAX == LONG_MAX],
|
||||
[sizeof (long long int) == sizeof (long int)])
|
||||
else
|
||||
INT64_MAX_EQ_LONG_MAX=-1
|
||||
fi
|
||||
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
|
||||
[UINT32_MAX_LT_UINTMAX_MAX],
|
||||
[defined UINT32_MAX && defined UINTMAX_MAX],
|
||||
[UINT32_MAX < UINTMAX_MAX],
|
||||
[sizeof (unsigned int) < sizeof (unsigned long long int)])
|
||||
if test $APPLE_UNIVERSAL_BUILD = 0; then
|
||||
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
|
||||
[UINT64_MAX_EQ_ULONG_MAX],
|
||||
[defined UINT64_MAX],
|
||||
[UINT64_MAX == ULONG_MAX],
|
||||
[sizeof (unsigned long long int) == sizeof (unsigned long int)])
|
||||
else
|
||||
UINT64_MAX_EQ_ULONG_MAX=-1
|
||||
fi
|
||||
|
||||
dnl Check for declarations of anything we want to poison if the
|
||||
dnl corresponding gnulib module is not in use.
|
||||
gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
|
||||
]], [imaxabs imaxdiv strtoimax strtoumax])
|
||||
])
|
||||
|
||||
# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
|
||||
# If $2 is true, the condition is $3; otherwise if long long int is supported
|
||||
# approximate the condition with $4; otherwise, assume the condition is false.
|
||||
# The condition should work on all C99 platforms; the approximations should be
|
||||
# good enough to work on all practical pre-C99 platforms.
|
||||
# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
|
||||
AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
|
||||
[
|
||||
AC_CACHE_CHECK([whether $3],
|
||||
[gl_cv_test_$1],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[/* Work also in C++ mode. */
|
||||
#define __STDC_LIMIT_MACROS 1
|
||||
|
||||
/* Work if build is not clean. */
|
||||
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
|
||||
|
||||
#include <limits.h>
|
||||
#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#if $2
|
||||
#define CONDITION ($3)
|
||||
#elif HAVE_LONG_LONG_INT
|
||||
#define CONDITION ($4)
|
||||
#else
|
||||
#define CONDITION 0
|
||||
#endif
|
||||
int test[CONDITION ? 1 : -1];]])],
|
||||
[gl_cv_test_$1=yes],
|
||||
[gl_cv_test_$1=no])])
|
||||
if test $gl_cv_test_$1 = yes; then
|
||||
$1=1;
|
||||
else
|
||||
$1=0;
|
||||
fi
|
||||
AC_SUBST([$1])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
|
||||
[
|
||||
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||
AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
|
||||
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
|
||||
[
|
||||
GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS])
|
||||
GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV])
|
||||
GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX])
|
||||
GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX])
|
||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||
HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS])
|
||||
HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV])
|
||||
HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
|
||||
HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
|
||||
])
|
30
m4/strtoimax.m4
Normal file
30
m4/strtoimax.m4
Normal file
|
@ -0,0 +1,30 @@
|
|||
# strtoimax.m4 serial 8
|
||||
dnl Copyright (C) 2002-2004, 2006, 2009-2011 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_STRTOIMAX],
|
||||
[
|
||||
AC_CACHE_CHECK([whether <inttypes.h> defines strtoimax as a macro],
|
||||
gl_cv_func_strtoimax_macro,
|
||||
[AC_EGREP_CPP([inttypes_h_defines_strtoimax], [#include <inttypes.h>
|
||||
#ifdef strtoimax
|
||||
inttypes_h_defines_strtoimax
|
||||
#endif],
|
||||
gl_cv_func_strtoimax_macro=yes,
|
||||
gl_cv_func_strtoimax_macro=no)])
|
||||
|
||||
if test "$gl_cv_func_strtoimax_macro" != yes; then
|
||||
AC_REPLACE_FUNCS([strtoimax])
|
||||
if test $ac_cv_func_strtoimax = no; then
|
||||
gl_PREREQ_STRTOIMAX
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Prerequisites of lib/strtoimax.c.
|
||||
AC_DEFUN([gl_PREREQ_STRTOIMAX], [
|
||||
AC_CHECK_DECLS([strtoll])
|
||||
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||
])
|
10
m4/strtol.m4
Normal file
10
m4/strtol.m4
Normal file
|
@ -0,0 +1,10 @@
|
|||
# strtol.m4 serial 5
|
||||
dnl Copyright (C) 2002-2003, 2006, 2009-2011 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_STRTOL],
|
||||
[
|
||||
AC_REPLACE_FUNCS([strtol])
|
||||
])
|
25
m4/strtoll.m4
Normal file
25
m4/strtoll.m4
Normal file
|
@ -0,0 +1,25 @@
|
|||
# strtoll.m4 serial 6
|
||||
dnl Copyright (C) 2002, 2004, 2006, 2008-2011 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_STRTOLL],
|
||||
[
|
||||
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||
dnl We don't need (and can't compile) the replacement strtoll
|
||||
dnl unless the type 'long long int' exists.
|
||||
AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
|
||||
if test "$ac_cv_type_long_long_int" = yes; then
|
||||
AC_REPLACE_FUNCS([strtoll])
|
||||
if test $ac_cv_func_strtoll = no; then
|
||||
HAVE_STRTOLL=0
|
||||
gl_PREREQ_STRTOLL
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Prerequisites of lib/strtoll.c.
|
||||
AC_DEFUN([gl_PREREQ_STRTOLL], [
|
||||
:
|
||||
])
|
10
m4/strtoul.m4
Normal file
10
m4/strtoul.m4
Normal file
|
@ -0,0 +1,10 @@
|
|||
# strtoul.m4 serial 4
|
||||
dnl Copyright (C) 2002, 2006, 2009-2011 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_STRTOUL],
|
||||
[
|
||||
AC_REPLACE_FUNCS([strtoul])
|
||||
])
|
25
m4/strtoull.m4
Normal file
25
m4/strtoull.m4
Normal file
|
@ -0,0 +1,25 @@
|
|||
# strtoull.m4 serial 6
|
||||
dnl Copyright (C) 2002, 2004, 2006, 2008-2011 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_STRTOULL],
|
||||
[
|
||||
AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
||||
dnl We don't need (and can't compile) the replacement strtoull
|
||||
dnl unless the type 'unsigned long long int' exists.
|
||||
AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
|
||||
if test "$ac_cv_type_unsigned_long_long_int" = yes; then
|
||||
AC_REPLACE_FUNCS([strtoull])
|
||||
if test $ac_cv_func_strtoull = no; then
|
||||
HAVE_STRTOULL=0
|
||||
gl_PREREQ_STRTOULL
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Prerequisites of lib/strtoull.c.
|
||||
AC_DEFUN([gl_PREREQ_STRTOULL], [
|
||||
:
|
||||
])
|
30
m4/strtoumax.m4
Normal file
30
m4/strtoumax.m4
Normal file
|
@ -0,0 +1,30 @@
|
|||
# strtoumax.m4 serial 8
|
||||
dnl Copyright (C) 2002-2004, 2006, 2009-2011 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_STRTOUMAX],
|
||||
[
|
||||
AC_CACHE_CHECK([whether <inttypes.h> defines strtoumax as a macro],
|
||||
gl_cv_func_strtoumax_macro,
|
||||
[AC_EGREP_CPP([inttypes_h_defines_strtoumax], [#include <inttypes.h>
|
||||
#ifdef strtoumax
|
||||
inttypes_h_defines_strtoumax
|
||||
#endif],
|
||||
gl_cv_func_strtoumax_macro=yes,
|
||||
gl_cv_func_strtoumax_macro=no)])
|
||||
|
||||
if test "$gl_cv_func_strtoumax_macro" != yes; then
|
||||
AC_REPLACE_FUNCS([strtoumax])
|
||||
if test $ac_cv_func_strtoumax = no; then
|
||||
gl_PREREQ_STRTOUMAX
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Prerequisites of lib/strtoumax.c.
|
||||
AC_DEFUN([gl_PREREQ_STRTOUMAX], [
|
||||
AC_CHECK_DECLS([strtoull])
|
||||
AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
|
||||
])
|
232
m4/wchar_h.m4
Normal file
232
m4/wchar_h.m4
Normal file
|
@ -0,0 +1,232 @@
|
|||
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
|
||||
|
||||
dnl Copyright (C) 2007-2011 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_h.m4 serial 38
|
||||
|
||||
AC_DEFUN([gl_WCHAR_H],
|
||||
[
|
||||
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
|
||||
AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
|
||||
dnl Prepare for creating substitute <wchar.h>.
|
||||
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
|
||||
dnl character support).
|
||||
dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
|
||||
gl_CHECK_NEXT_HEADERS([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])
|
||||
|
||||
AC_REQUIRE([gl_FEATURES_H])
|
||||
|
||||
AC_REQUIRE([gt_TYPE_WINT_T])
|
||||
if test $gt_cv_c_wint_t = yes; then
|
||||
HAVE_WINT_T=1
|
||||
else
|
||||
HAVE_WINT_T=0
|
||||
fi
|
||||
AC_SUBST([HAVE_WINT_T])
|
||||
|
||||
dnl Check for declarations of anything we want to poison if the
|
||||
dnl corresponding gnulib module is not in use.
|
||||
gl_WARN_ON_USE_PREPARE([[
|
||||
/* 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>. */
|
||||
#if !(defined __GLIBC__ && !defined __UCLIBC__)
|
||||
# include <stddef.h>
|
||||
# include <stdio.h>
|
||||
# include <time.h>
|
||||
#endif
|
||||
#include <wchar.h>
|
||||
]],
|
||||
[btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
|
||||
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
|
||||
wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
|
||||
wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
|
||||
wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
|
||||
])
|
||||
])
|
||||
|
||||
dnl Check whether <wchar.h> is usable at all.
|
||||
AC_DEFUN([gl_WCHAR_H_INLINE_OK],
|
||||
[
|
||||
dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
|
||||
dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
|
||||
dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
|
||||
dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
|
||||
dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
|
||||
AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
|
||||
[gl_cv_header_wchar_h_correct_inline],
|
||||
[gl_cv_header_wchar_h_correct_inline=yes
|
||||
AC_LANG_CONFTEST([
|
||||
AC_LANG_SOURCE([[#define wcstod renamed_wcstod
|
||||
/* 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>
|
||||
extern int zero (void);
|
||||
int main () { return zero(); }
|
||||
]])])
|
||||
if AC_TRY_EVAL([ac_compile]); then
|
||||
mv conftest.$ac_objext conftest1.$ac_objext
|
||||
AC_LANG_CONFTEST([
|
||||
AC_LANG_SOURCE([[#define wcstod renamed_wcstod
|
||||
/* 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>
|
||||
int zero (void) { return 0; }
|
||||
]])])
|
||||
if AC_TRY_EVAL([ac_compile]); then
|
||||
mv conftest.$ac_objext conftest2.$ac_objext
|
||||
if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
|
||||
:
|
||||
else
|
||||
gl_cv_header_wchar_h_correct_inline=no
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
|
||||
])
|
||||
if test $gl_cv_header_wchar_h_correct_inline = no; then
|
||||
AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
|
||||
This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
|
||||
C99 mode. You have four options:
|
||||
- Add the flag -fgnu89-inline to CC and reconfigure, or
|
||||
- Fix your include files, using parts of
|
||||
<http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
|
||||
- Use a gcc version older than 4.3, or
|
||||
- Don't use the flags -std=c99 or -std=gnu99.
|
||||
Configuration aborted.])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl Unconditionally enables the replacement of <wchar.h>.
|
||||
AC_DEFUN([gl_REPLACE_WCHAR_H],
|
||||
[
|
||||
dnl This is a no-op, because <wchar.h> is always overridden.
|
||||
:
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
|
||||
[
|
||||
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
|
||||
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
|
||||
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
|
||||
dnl Define it also as a C macro, for the benefit of the unit tests.
|
||||
gl_MODULE_INDICATOR_FOR_TESTS([$1])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_WCHAR_H_DEFAULTS],
|
||||
[
|
||||
GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC])
|
||||
GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB])
|
||||
GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT])
|
||||
GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC])
|
||||
GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN])
|
||||
GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS])
|
||||
GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
|
||||
GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB])
|
||||
GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS])
|
||||
GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
|
||||
GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH])
|
||||
GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR])
|
||||
GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP])
|
||||
GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY])
|
||||
GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE])
|
||||
GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET])
|
||||
GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN])
|
||||
GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN])
|
||||
GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY])
|
||||
GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY])
|
||||
GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY])
|
||||
GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY])
|
||||
GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT])
|
||||
GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT])
|
||||
GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP])
|
||||
GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP])
|
||||
GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP])
|
||||
GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
|
||||
GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL])
|
||||
GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM])
|
||||
GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP])
|
||||
GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR])
|
||||
GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR])
|
||||
GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN])
|
||||
GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN])
|
||||
GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK])
|
||||
GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR])
|
||||
GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
|
||||
GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
|
||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
|
||||
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
|
||||
HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC])
|
||||
HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN])
|
||||
HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS])
|
||||
HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS])
|
||||
HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB])
|
||||
HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS])
|
||||
HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS])
|
||||
HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR])
|
||||
HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP])
|
||||
HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY])
|
||||
HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE])
|
||||
HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET])
|
||||
HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN])
|
||||
HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN])
|
||||
HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY])
|
||||
HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY])
|
||||
HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY])
|
||||
HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY])
|
||||
HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT])
|
||||
HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT])
|
||||
HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP])
|
||||
HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP])
|
||||
HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP])
|
||||
HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP])
|
||||
HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL])
|
||||
HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM])
|
||||
HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP])
|
||||
HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR])
|
||||
HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR])
|
||||
HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN])
|
||||
HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN])
|
||||
HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK])
|
||||
HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR])
|
||||
HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
|
||||
HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH])
|
||||
HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
|
||||
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
|
||||
REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
|
||||
REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC])
|
||||
REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB])
|
||||
REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT])
|
||||
REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC])
|
||||
REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN])
|
||||
REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS])
|
||||
REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
|
||||
REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB])
|
||||
REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS])
|
||||
REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
|
||||
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
|
||||
REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH])
|
||||
])
|
32
m4/wint_t.m4
Normal file
32
m4/wint_t.m4
Normal file
|
@ -0,0 +1,32 @@
|
|||
# wint_t.m4 serial 5 (gettext-0.18.2)
|
||||
dnl Copyright (C) 2003, 2007-2011 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_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
/* 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
|
||||
])
|
Loading…
Add table
Reference in a new issue