* Makefile.in (GNULIB_MODULES): Add strtoumax.
This commit is contained in:
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
|
||||
Reference in New Issue
Block a user