]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Sun, 1 Sep 2002 20:30:19 +0000 (20:30 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 1 Sep 2002 20:30:19 +0000 (20:30 +0000)
* 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.

ChangeLog
ctype/ctype-info.c
ctype/ctype.h
include/ctype.h
locale/lc-ctype.c

index 3c59bf7321ccb4e3a0541b06172d6cc0c84f46d8..8e7841541750bf11426933912d72de967b29ec09 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2002-09-01  Ulrich Drepper  <drepper@redhat.com>
 
+       * 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.
+
        * ctype/Makefile (routines): Add isctype.
        * ctype/Versions (libc): Export isctype and __isctype for GLIBC_2.3.
        * ctype/ctype.h: Add declaration of isctype.
index 033d1b70cbc6fb6e4611ace0429c0f71a98d7233..d29edb7171b3e94fc685c39e3c4042cfd36f5c10 100644 (file)
@@ -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);
index 64f5e4b7a0d2eed02a62452d1a7d5bbcdf3a1e32..28aec6bc41e41e7eb060e1243e9318d132934a02 100644 (file)
@@ -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.  */
 
 
index 812424aff92d6ec34d6e2045708fd6680a5dcccf..b58306dd286583ad9fc4a48c7bf87ff0c8d49bfc 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef _CTYPE_H
 
-# include <ctype/ctype.h>
-
 extern int __isctype (int __c, int __mask);
 
+# include <ctype/ctype.h>
+
 # ifndef NOT_IN_libc
 
 /* The optimized macros are not defined for users because they can't see
@@ -13,32 +13,25 @@ extern int __isctype (int __c, int __mask);
    NL_CURRENT_INDIRECT.  */
 
 #  include "../locale/localeinfo.h"
-#  define __isctype(c, type) \
+#  ifndef __NO_CTYPE
+#   undef __isctype
+#   define __isctype(c, type) \
      (((uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128) \
       [(int) (c)] & (uint16_t) type)
-#  ifndef __NO_CTYPE
-#   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)
-#   define isblank(c)  __isctype((c), _ISblank)
 
+#   undef tolower
 #   define tolower(c) \
       __tobody (c, tolower, \
                (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128, \
                (c))
+#   undef _tolower
 #   define _tolower(c) tolower (c)
+#   undef toupper
 #   define toupper(c) \
       __tobody (c, toupper, \
                (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128, \
                (c))
+#   undef _toupper
 #   define _toupper(c) toupper (c)
 
 #  endif /* Not __NO_CTYPE.  */
index 69414020b8bd57d7a543bbe920f8ec422fd91f73..59ff7019aa6e77a4a4eb8aaeff9386cdae63042b 100644 (file)
@@ -34,8 +34,7 @@ _NL_CURRENT_DEFINE (LC_CTYPE);
 void
 _nl_postload_ctype (void)
 {
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
+  const struct locale_data *data = _NL_CURRENT_DATA (LC_CTYPE);
 
 #define paste(a,b) paste1(a,b)
 #define paste1(a,b) a##b
@@ -43,30 +42,29 @@ _nl_postload_ctype (void)
 #define current(type,x,offset) \
   ((const type *) _NL_CURRENT (LC_CTYPE, paste(_NL_CTYPE_,x)) + offset)
 
-/* 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_old_b; /* Characteristics.  */
-  extern __const __int32_t *__ctype_old_tolower; /* Case conversions.  */
-  extern __const __int32_t *__ctype_old_toupper; /* Case conversions.  */
-
-  extern const uint32_t *__ctype32_old_b;
-  extern const uint32_t *__ctype32_old_toupper;
-  extern const uint32_t *__ctype32_old_tolower;
-
-  __ctype_old_b = current (uint16_t, CLASS, 128);
-  __ctype_old_toupper = current (uint32_t, TOUPPER, 128);
-  __ctype_old_tolower = current (uint32_t, TOLOWER, 128);
-  __ctype32_old_b = current (uint32_t, CLASS32, 0);
-  __ctype32_old_toupper = current (uint32_t, TOUPPER32, 0);
-  __ctype32_old_tolower = current (uint32_t, TOLOWER32, 0);
-#endif
+  extern const uint32_t *__ctype32_b;
+  extern const uint32_t *__ctype32_toupper;
+  extern const uint32_t *__ctype32_tolower;
+  extern const char *__ctype32_wctype[12] attribute_hidden;
+  extern const char *__ctype32_wctrans[2] attribute_hidden;
+  extern const char *__ctype32_width attribute_hidden;
+
+  size_t offset, cnt;
+
+  __ctype_b = current (uint16_t, CLASS, 128);
+  __ctype_toupper = current (uint32_t, TOUPPER, 128);
+  __ctype_tolower = current (uint32_t, TOLOWER, 128);
+  __ctype32_b = current (uint32_t, CLASS32, 0);
+  __ctype32_toupper = current (uint32_t, TOUPPER32, 0);
+  __ctype32_tolower = current (uint32_t, TOLOWER32, 0);
+
+  offset = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_CLASS_OFFSET);
+  for (cnt = 0; cnt < 12; cnt++)
+    __ctype32_wctype[cnt] = data->values[offset + cnt].string;
+
+  offset = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET);
+  for (cnt = 0; cnt < 2; cnt++)
+    __ctype32_wctrans[cnt] = data->values[offset + cnt].string;
+
+  __ctype32_width = current (char, WIDTH, 0);
 }