diff options
author | Tom Tromey <tromey@adacore.com> | 2025-08-04 09:42:52 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2025-09-09 11:58:27 -0600 |
commit | 50673a462973a975fc9001fe3d8d4c5d5472436d (patch) | |
tree | 83f5d3328e5cb5495399c7da0c950bff29e5ba8e | |
parent | a66526aca60c9a8ea911310e4447ad525024f241 (diff) | |
download | binutils-50673a462973a975fc9001fe3d8d4c5d5472436d.zip binutils-50673a462973a975fc9001fe3d8d4c5d5472436d.tar.gz binutils-50673a462973a975fc9001fe3d8d4c5d5472436d.tar.bz2 |
Import the c-ctype module from gnulib
This arranges to import the c-ctype module from gnulib. c-ctype is
similar ot safe-ctype, but doesn't poison the <ctype.h> APIs.
This patch should not result in any functional changes, as nothing
includes the new header yet.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33217
Approved-By: Simon Marchi <simon.marchi@efficios.com>
-rwxr-xr-x | gnulib/configure | 25 | ||||
-rw-r--r-- | gnulib/import/Makefile.am | 7 | ||||
-rw-r--r-- | gnulib/import/Makefile.in | 33 | ||||
-rw-r--r-- | gnulib/import/c-ctype.c | 21 | ||||
-rw-r--r-- | gnulib/import/c-ctype.h | 366 | ||||
-rw-r--r-- | gnulib/import/m4/gnulib-cache.m4 | 2 | ||||
-rw-r--r-- | gnulib/import/m4/gnulib-comp.m4 | 3 | ||||
-rwxr-xr-x | gnulib/update-gnulib.sh | 1 |
8 files changed, 438 insertions, 20 deletions
diff --git a/gnulib/configure b/gnulib/configure index d3a049f..de2f5c4 100755 --- a/gnulib/configure +++ b/gnulib/configure @@ -7032,6 +7032,7 @@ fi # Code from module bind: # Code from module btowc: # Code from module builtin-expect: + # Code from module c-ctype: # Code from module c99: # Code from module canonicalize-lgpl: # Code from module chdir: @@ -13810,8 +13811,8 @@ rm -f core conftest.err conftest.$ac_objext \ LIBS=$save_LIBS test $gl_pthread_api = yes && break done - echo "$as_me:13813: gl_pthread_api=$gl_pthread_api" >&5 - echo "$as_me:13814: LIBPTHREAD=$LIBPTHREAD" >&5 + echo "$as_me:13814: gl_pthread_api=$gl_pthread_api" >&5 + echo "$as_me:13815: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional @@ -13836,7 +13837,7 @@ rm -f conftest* ;; esac - echo "$as_me:13839: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 + echo "$as_me:13840: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) @@ -13990,7 +13991,7 @@ fi fi fi - echo "$as_me:13993: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 + echo "$as_me:13994: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 $as_echo_n "checking whether POSIX threads API is available... " >&6; } @@ -17067,8 +17068,8 @@ rm -f core conftest.err conftest.$ac_objext \ LIBS=$save_LIBS test $gl_pthread_api = yes && break done - echo "$as_me:17070: gl_pthread_api=$gl_pthread_api" >&5 - echo "$as_me:17071: LIBPTHREAD=$LIBPTHREAD" >&5 + echo "$as_me:17071: gl_pthread_api=$gl_pthread_api" >&5 + echo "$as_me:17072: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional @@ -17093,7 +17094,7 @@ rm -f conftest* ;; esac - echo "$as_me:17096: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 + echo "$as_me:17097: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) @@ -17247,7 +17248,7 @@ fi fi fi - echo "$as_me:17250: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 + echo "$as_me:17251: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 $as_echo_n "checking whether POSIX threads API is available... " >&6; } @@ -17473,8 +17474,8 @@ rm -f core conftest.err conftest.$ac_objext \ LIBS=$save_LIBS test $gl_pthread_api = yes && break done - echo "$as_me:17476: gl_pthread_api=$gl_pthread_api" >&5 - echo "$as_me:17477: LIBPTHREAD=$LIBPTHREAD" >&5 + echo "$as_me:17477: gl_pthread_api=$gl_pthread_api" >&5 + echo "$as_me:17478: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional @@ -17499,7 +17500,7 @@ rm -f conftest* ;; esac - echo "$as_me:17502: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 + echo "$as_me:17503: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) @@ -17653,7 +17654,7 @@ fi fi fi - echo "$as_me:17656: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 + echo "$as_me:17657: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 $as_echo_n "checking whether POSIX threads API is available... " >&6; } diff --git a/gnulib/import/Makefile.am b/gnulib/import/Makefile.am index 80b2bb4..1548615 100644 --- a/gnulib/import/Makefile.am +++ b/gnulib/import/Makefile.am @@ -36,6 +36,7 @@ # accept \ # alloca \ # bind \ +# c-ctype \ # canonicalize-lgpl \ # chown \ # connect \ @@ -246,6 +247,12 @@ endif ## end gnulib module btowc +## begin gnulib module c-ctype + +libgnu_a_SOURCES += c-ctype.h c-ctype.c + +## end gnulib module c-ctype + ## begin gnulib module canonicalize-lgpl if GL_COND_OBJ_CANONICALIZE_LGPL diff --git a/gnulib/import/Makefile.in b/gnulib/import/Makefile.in index 9893d17..2e567c0 100644 --- a/gnulib/import/Makefile.in +++ b/gnulib/import/Makefile.in @@ -50,6 +50,7 @@ # accept \ # alloca \ # bind \ +# c-ctype \ # canonicalize-lgpl \ # chown \ # connect \ @@ -557,12 +558,13 @@ am__dirstamp = $(am__leading_dot)dirstamp @GL_COND_OBJ_WMEMPCPY_TRUE@ libgnu_a-wmempcpy.$(OBJEXT) am_libgnu_a_OBJECTS = $(am__objects_1) libgnu_a-openat-proc.$(OBJEXT) \ libgnu_a-basename-lgpl.$(OBJEXT) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) $(am__objects_5) \ - $(am__objects_6) $(am__objects_7) libgnu_a-cloexec.$(OBJEXT) \ - $(am__objects_8) $(am__objects_9) $(am__objects_10) \ - libgnu_a-count-one-bits.$(OBJEXT) $(am__objects_11) \ - libgnu_a-dirname-lgpl.$(OBJEXT) libgnu_a-stripslash.$(OBJEXT) \ - $(am__objects_12) $(am__objects_13) $(am__objects_14) \ + $(am__objects_3) libgnu_a-c-ctype.$(OBJEXT) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + libgnu_a-cloexec.$(OBJEXT) $(am__objects_8) $(am__objects_9) \ + $(am__objects_10) libgnu_a-count-one-bits.$(OBJEXT) \ + $(am__objects_11) libgnu_a-dirname-lgpl.$(OBJEXT) \ + libgnu_a-stripslash.$(OBJEXT) $(am__objects_12) \ + $(am__objects_13) $(am__objects_14) \ libgnu_a-exitfail.$(OBJEXT) $(am__objects_15) \ $(am__objects_16) libgnu_a-fd-hook.$(OBJEXT) \ libgnu_a-fd-safer-flag.$(OBJEXT) \ @@ -2150,8 +2152,8 @@ MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_a_SOURCES = $(am__append_1) openat-priv.h openat-proc.c \ - basename-lgpl.c $(am__append_2) $(am__append_3) \ - $(am__append_4) $(am__append_5) $(am__append_6) \ + basename-lgpl.c $(am__append_2) $(am__append_3) c-ctype.h \ + c-ctype.c $(am__append_4) $(am__append_5) $(am__append_6) \ $(am__append_7) cloexec.c $(am__append_8) $(am__append_9) \ $(am__append_10) count-one-bits.c $(am__append_11) \ dirname-lgpl.c stripslash.c $(am__append_12) $(am__append_13) \ @@ -2328,6 +2330,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-basename-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-bind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-c-ctype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-canonicalize-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-chdir-long.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_a-chown.Po@am__quote@ @@ -2544,6 +2547,20 @@ libgnu_a-btowc.obj: btowc.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-btowc.obj `if test -f 'btowc.c'; then $(CYGPATH_W) 'btowc.c'; else $(CYGPATH_W) '$(srcdir)/btowc.c'; fi` +libgnu_a-c-ctype.o: c-ctype.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-c-ctype.o -MD -MP -MF $(DEPDIR)/libgnu_a-c-ctype.Tpo -c -o libgnu_a-c-ctype.o `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-c-ctype.Tpo $(DEPDIR)/libgnu_a-c-ctype.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnu_a-c-ctype.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-c-ctype.o `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c + +libgnu_a-c-ctype.obj: c-ctype.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-c-ctype.obj -MD -MP -MF $(DEPDIR)/libgnu_a-c-ctype.Tpo -c -o libgnu_a-c-ctype.obj `if test -f 'c-ctype.c'; then $(CYGPATH_W) 'c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/c-ctype.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-c-ctype.Tpo $(DEPDIR)/libgnu_a-c-ctype.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnu_a-c-ctype.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -c -o libgnu_a-c-ctype.obj `if test -f 'c-ctype.c'; then $(CYGPATH_W) 'c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/c-ctype.c'; fi` + libgnu_a-canonicalize-lgpl.o: canonicalize-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_a_CFLAGS) $(CFLAGS) -MT libgnu_a-canonicalize-lgpl.o -MD -MP -MF $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo -c -o libgnu_a-canonicalize-lgpl.o `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_a-canonicalize-lgpl.Tpo $(DEPDIR)/libgnu_a-canonicalize-lgpl.Po diff --git a/gnulib/import/c-ctype.c b/gnulib/import/c-ctype.c new file mode 100644 index 0000000..a247514 --- /dev/null +++ b/gnulib/import/c-ctype.c @@ -0,0 +1,21 @@ +/* Character handling in C locale. + + Copyright (C) 2003-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#define C_CTYPE_INLINE _GL_EXTERN_INLINE +#include "c-ctype.h" diff --git a/gnulib/import/c-ctype.h b/gnulib/import/c-ctype.h new file mode 100644 index 0000000..1a4f603 --- /dev/null +++ b/gnulib/import/c-ctype.h @@ -0,0 +1,366 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in <ctype.h>, + except that they have the C (POSIX) locale hardwired, whereas the + <ctype.h> functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008-2022 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include <stdbool.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef C_CTYPE_INLINE +# define C_CTYPE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +# define C_CTYPE_ASCII 1 +#elif ! (' ' == '\x40' && '0' == '\xf0' \ + && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ + && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') +# error "Only ASCII and EBCDIC are supported" +#endif + +#if 'A' < 0 +# error "EBCDIC and char is signed -- not supported" +#endif + +/* Cases for control characters. */ + +#define _C_CTYPE_CNTRL \ + case '\a': case '\b': case '\f': case '\n': \ + case '\r': case '\t': case '\v': \ + _C_CTYPE_OTHER_CNTRL + +/* ASCII control characters other than those with \-letter escapes. */ + +#if C_CTYPE_ASCII +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x04': case '\x05': case '\x06': case '\x0e': \ + case '\x0f': case '\x10': case '\x11': case '\x12': \ + case '\x13': case '\x14': case '\x15': case '\x16': \ + case '\x17': case '\x18': case '\x19': case '\x1a': \ + case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x7f' +#else + /* Use EBCDIC code page 1047's assignments for ASCII control chars; + assume all EBCDIC code pages agree about these assignments. */ +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x07': case '\x0e': case '\x0f': case '\x10': \ + case '\x11': case '\x12': case '\x13': case '\x18': \ + case '\x19': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x26': case '\x27': case '\x2d': \ + case '\x2e': case '\x32': case '\x37': case '\x3c': \ + case '\x3d': case '\x3f' +#endif + +/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ + +#define _C_CTYPE_LOWER_A_THRU_F_N(N) \ + case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ + case 'e' + (N): case 'f' + (N) +#define _C_CTYPE_LOWER_N(N) \ + _C_CTYPE_LOWER_A_THRU_F_N(N): \ + case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ + case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ + case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ + case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ + case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) + +/* Cases for hex letters, digits, lower, punct, and upper. */ + +#define _C_CTYPE_A_THRU_F \ + _C_CTYPE_LOWER_A_THRU_F_N (0): \ + _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') +#define _C_CTYPE_DIGIT \ + case '0': case '1': case '2': case '3': \ + case '4': case '5': case '6': case '7': \ + case '8': case '9' +#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) +#define _C_CTYPE_PUNCT \ + case '!': case '"': case '#': case '$': \ + case '%': case '&': case '\'': case '(': \ + case ')': case '*': case '+': case ',': \ + case '-': case '.': case '/': case ':': \ + case ';': case '<': case '=': case '>': \ + case '?': case '@': case '[': case '\\': \ + case ']': case '^': case '_': case '`': \ + case '{': case '|': case '}': case '~' +#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') + + +/* Function definitions. */ + +/* Unlike the functions in <ctype.h>, which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a <ctype.h> function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +C_CTYPE_INLINE bool +c_isalnum (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isalpha (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +/* The function isascii is not locale dependent. + Its use in EBCDIC is questionable. */ +C_CTYPE_INLINE bool +c_isascii (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_CNTRL: + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isblank (int c) +{ + return c == ' ' || c == '\t'; +} + +C_CTYPE_INLINE bool +c_iscntrl (int c) +{ + switch (c) + { + _C_CTYPE_CNTRL: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isgraph (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_islower (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isprint (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_ispunct (int c) +{ + switch (c) + { + _C_CTYPE_PUNCT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isspace (int c) +{ + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isupper (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isxdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_A_THRU_F: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE int +c_tolower (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return c - 'A' + 'a'; + default: + return c; + } +} + +C_CTYPE_INLINE int +c_toupper (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return c - 'a' + 'A'; + default: + return c; + } +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* C_CTYPE_H */ diff --git a/gnulib/import/m4/gnulib-cache.m4 b/gnulib/import/m4/gnulib-cache.m4 index a5f8e30..0cf177a 100644 --- a/gnulib/import/m4/gnulib-cache.m4 +++ b/gnulib/import/m4/gnulib-cache.m4 @@ -41,6 +41,7 @@ # accept \ # alloca \ # bind \ +# c-ctype \ # canonicalize-lgpl \ # chown \ # connect \ @@ -96,6 +97,7 @@ gl_MODULES([ accept alloca bind + c-ctype canonicalize-lgpl chown connect diff --git a/gnulib/import/m4/gnulib-comp.m4 b/gnulib/import/m4/gnulib-comp.m4 index 94e2cfe..bb68991 100644 --- a/gnulib/import/m4/gnulib-comp.m4 +++ b/gnulib/import/m4/gnulib-comp.m4 @@ -54,6 +54,7 @@ AC_DEFUN([gl_EARLY], # Code from module bind: # Code from module btowc: # Code from module builtin-expect: + # Code from module c-ctype: # Code from module c99: # Code from module canonicalize-lgpl: # Code from module chdir: @@ -1130,6 +1131,8 @@ AC_DEFUN([gl_FILE_LIST], [ lib/bind.c lib/btowc.c lib/c++defs.h + lib/c-ctype.c + lib/c-ctype.h lib/canonicalize-lgpl.c lib/cdefs.h lib/chdir-long.c diff --git a/gnulib/update-gnulib.sh b/gnulib/update-gnulib.sh index 18bb5eb..9adc009 100755 --- a/gnulib/update-gnulib.sh +++ b/gnulib/update-gnulib.sh @@ -33,6 +33,7 @@ IMPORTED_GNULIB_MODULES="\ accept \ alloca \ bind \ + c-ctype \ canonicalize-lgpl \ chown \ connect \ |