summaryrefslogtreecommitdiff
path: root/ctype
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-09-01 20:30:19 +0000
committerUlrich Drepper <drepper@redhat.com>2002-09-01 20:30:19 +0000
commitd20fec5d65b16c42b391d1e95df73b3a8366fe16 (patch)
treee11194741b0507ee368c9169bd08a93c20df974a /ctype
parentfa1861d9fc31366afbcb640ecfb64d7ce646de8d (diff)
Update.
* ctype/ctype.h: Undo the patch before the last one. Put back the macro definitions for the standard functions to access the classification and mapping arrays. * include/ctype.h: Partly revert last patch. Move the macro definitions for the exported functions back to the public header. #undef all the macros defined here before redefining. * ctype/ctype-info.c: Revert last patch. * locale/lc-ctype.c: Revert last patch.
Diffstat (limited to 'ctype')
-rw-r--r--ctype/ctype-info.c48
-rw-r--r--ctype/ctype.h57
2 files changed, 87 insertions, 18 deletions
diff --git a/ctype/ctype-info.c b/ctype/ctype-info.c
index 033d1b70cb..d29edb7171 100644
--- a/ctype/ctype-info.c
+++ b/ctype/ctype-info.c
@@ -16,9 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
-
#include <ctype.h>
#include <locale/localeinfo.h>
@@ -39,21 +36,36 @@ extern const char _nl_C_LC_CTYPE_class_blank[] attribute_hidden;
extern const char _nl_C_LC_CTYPE_class_cntrl[] attribute_hidden;
extern const char _nl_C_LC_CTYPE_class_punct[] attribute_hidden;
extern const char _nl_C_LC_CTYPE_class_alnum[] attribute_hidden;
+extern const char _nl_C_LC_CTYPE_map_toupper[] attribute_hidden;
+extern const char _nl_C_LC_CTYPE_map_tolower[] attribute_hidden;
+extern const char _nl_C_LC_CTYPE_width[] attribute_hidden;
#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o)
-const unsigned short int *__ctype_old_b = b (unsigned short int, class, 128);
-const __uint32_t *__ctype32_old_b = b (__uint32_t, class32, 0);
-const __int32_t *__ctype_old_tolower = b (__int32_t, tolower, 128);
-const __int32_t *__ctype_old_toupper = b (__int32_t, toupper, 128);
-const __uint32_t *__ctype32_old_tolower = b (__uint32_t, tolower, 128);
-const __uint32_t *__ctype32_old_toupper = b (__uint32_t, toupper, 128);
-
-compat_symbol (libc, __ctype_old_b, __ctype_b, GLIBC_2_0);
-compat_symbol (libc, __ctype_old_tolower, __ctype_tolower, GLIBC_2_0);
-compat_symbol (libc, __ctype_old_toupper, __ctype_toupper, GLIBC_2_0);
-compat_symbol (libc, __ctype32_old_b, __ctype32_b, GLIBC_2_0);
-compat_symbol (libc, __ctype32_old_tolower, __ctype32_tolower, GLIBC_2_2);
-compat_symbol (libc, __ctype32_old_toupper, __ctype32_toupper, GLIBC_2_2);
-
-#endif
+const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
+const __uint32_t *__ctype32_b = b (__uint32_t, class32, 0);
+const __int32_t *__ctype_tolower = b (__int32_t, tolower, 128);
+const __int32_t *__ctype_toupper = b (__int32_t, toupper, 128);
+const __uint32_t *__ctype32_tolower = b (__uint32_t, tolower, 128);
+const __uint32_t *__ctype32_toupper = b (__uint32_t, toupper, 128);
+const char *__ctype32_wctype[12] attribute_hidden =
+{
+ b(char, class_upper, 32),
+ b(char, class_lower, 32),
+ b(char, class_alpha, 32),
+ b(char, class_digit, 32),
+ b(char, class_xdigit, 32),
+ b(char, class_space, 32),
+ b(char, class_print, 32),
+ b(char, class_graph, 32),
+ b(char, class_blank, 32),
+ b(char, class_cntrl, 32),
+ b(char, class_punct, 32),
+ b(char, class_alnum, 32)
+};
+const char *__ctype32_wctrans[2] attribute_hidden =
+{
+ b(char, map_toupper, 0),
+ b(char, map_tolower, 0)
+};
+const char *__ctype32_width attribute_hidden = b (char, width, 0);
diff --git a/ctype/ctype.h b/ctype/ctype.h
index 64f5e4b7a0..28aec6bc41 100644
--- a/ctype/ctype.h
+++ b/ctype/ctype.h
@@ -62,6 +62,24 @@ enum
};
#endif /* ! _ISbit */
+/* These are defined in ctype-info.c.
+ The declarations here must match those in localeinfo.h.
+
+ These point into arrays of 384, so they can be indexed by any `unsigned
+ char' value [0,255]; by EOF (-1); or by any `signed char' value
+ [-128,-1). ISO C requires that the ctype functions work for `unsigned
+ char' values and for EOF; we also support negative `signed char' values
+ for broken old programs. The case conversion arrays are of `int's
+ rather than `unsigned char's because tolower (EOF) must be EOF, which
+ doesn't fit into an `unsigned char'. But today more important is that
+ the arrays are also used for multi-byte character sets. */
+extern __const unsigned short int *__ctype_b; /* Characteristics. */
+extern __const __int32_t *__ctype_tolower; /* Case conversions. */
+extern __const __int32_t *__ctype_toupper; /* Case conversions. */
+
+#define __isctype(c, type) \
+ (__ctype_b[(int) (c)] & (unsigned short int) type)
+
#define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */
#define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */
@@ -144,10 +162,49 @@ __exctype (_tolower);
__res; }))
#if !defined __NO_CTYPE && !defined __cplusplus
+# define isalnum(c) __isctype((c), _ISalnum)
+# define isalpha(c) __isctype((c), _ISalpha)
+# define iscntrl(c) __isctype((c), _IScntrl)
+# define isdigit(c) __isctype((c), _ISdigit)
+# define islower(c) __isctype((c), _ISlower)
+# define isgraph(c) __isctype((c), _ISgraph)
+# define isprint(c) __isctype((c), _ISprint)
+# define ispunct(c) __isctype((c), _ISpunct)
+# define isspace(c) __isctype((c), _ISspace)
+# define isupper(c) __isctype((c), _ISupper)
+# define isxdigit(c) __isctype((c), _ISxdigit)
+
+# ifdef __USE_ISOC99
+# define isblank(c) __isctype((c), _ISblank)
+# endif
+
+# ifdef __USE_EXTERN_INLINES
+extern __inline int
+tolower (int __c) __THROW
+{
+ return __c >= -128 && __c < 256 ? __ctype_tolower[__c] : __c;
+}
+
+extern __inline int
+toupper (int __c) __THROW
+{
+ return __c >= -128 && __c < 256 ? __ctype_toupper[__c] : __c;
+}
+# endif
+
+# if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
+# define tolower(c) __tobody (c, tolower, __ctype_tolower, (c))
+# define toupper(c) __tobody (c, toupper, __ctype_toupper, (c))
+# endif /* Optimizing gcc */
+
# if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
# define isascii(c) __isascii (c)
# define toascii(c) __toascii (c)
+
+# define _tolower(c) ((int) __ctype_tolower[(int) (c)])
+# define _toupper(c) ((int) __ctype_toupper[(int) (c)])
# endif
+
#endif /* Not __NO_CTYPE. */