about summary refs log tree commit diff
path: root/ctype
diff options
context:
space:
mode:
Diffstat (limited to 'ctype')
-rw-r--r--ctype/ctype-extn.c5
-rw-r--r--ctype/ctype-info.c48
-rw-r--r--ctype/ctype.c7
-rw-r--r--ctype/ctype.h63
4 files changed, 32 insertions, 91 deletions
diff --git a/ctype/ctype-extn.c b/ctype/ctype-extn.c
index 4bab5a0298..b54080d7ac 100644
--- a/ctype/ctype-extn.c
+++ b/ctype/ctype-extn.c
@@ -19,6 +19,11 @@
 #define	__NO_CTYPE
 #include <ctype.h>
 
+#define __ctype_tolower \
+  ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128)
+#define __ctype_toupper \
+  ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128)
+
 /* Real function versions of the non-ANSI ctype functions.  isblank is
    now in ISO C99 but we leave it here.  */
 
diff --git a/ctype/ctype-info.c b/ctype/ctype-info.c
index d29edb7171..033d1b70cb 100644
--- a/ctype/ctype-info.c
+++ b/ctype/ctype-info.c
@@ -16,6 +16,9 @@
    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>
 
@@ -36,36 +39,21 @@ 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_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);
+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
diff --git a/ctype/ctype.c b/ctype/ctype.c
index 4bcbd30ef7..4d5b0d2307 100644
--- a/ctype/ctype.c
+++ b/ctype/ctype.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1997, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,97,99,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -36,6 +36,11 @@ func (isspace, _ISspace)
 func (isupper, _ISupper)
 func (isxdigit, _ISxdigit)
 
+#define __ctype_tolower \
+  ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128)
+#define __ctype_toupper \
+  ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128)
+
 int
 tolower (int c)
 {
diff --git a/ctype/ctype.h b/ctype/ctype.h
index 47fba836ca..9469907b27 100644
--- a/ctype/ctype.h
+++ b/ctype/ctype.h
@@ -62,31 +62,13 @@ 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.  */
 
 #define	__exctype(name)	extern int name (int) __THROW
 
-
 __BEGIN_NAMESPACE_STD
+
 /* The following names are all functions:
      int isCHARACTERISTIC(int c);
    which return nonzero iff C has CHARACTERISTIC.
@@ -147,59 +129,20 @@ __exctype (_tolower);
 	  if (__builtin_constant_p (c))					      \
 	    {								      \
 	      int __c = (c);						      \
-	      __res = __c < -128 || __c > 255 ? __c : a[__c];		      \
+	      __res = __c < -128 || __c > 255 ? __c : (a)[__c];		      \
 	    }								      \
 	  else								      \
 	    __res = f args;						      \
 	}								      \
       else								      \
-	__res = a[(int) (c)];						      \
+	__res = (a)[(int) (c)];						      \
       __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.  */