(root)/
glibc-2.38/
ctype/
ctype-info.c
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #define CTYPE_EXTERN_INLINE /* Define real functions for accessors.  */
      19  #include <ctype.h>
      20  #include <locale/localeinfo.h>
      21  
      22  __libc_tsd_define (, const uint16_t *, CTYPE_B)
      23  __libc_tsd_define (, const int32_t *, CTYPE_TOLOWER)
      24  __libc_tsd_define (, const int32_t *, CTYPE_TOUPPER)
      25  
      26  
      27  void
      28  __ctype_init (void)
      29  {
      30    const uint16_t **bp = __libc_tsd_address (const uint16_t *, CTYPE_B);
      31    *bp = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128;
      32    const int32_t **up = __libc_tsd_address (const int32_t *, CTYPE_TOUPPER);
      33    *up = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128);
      34    const int32_t **lp = __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
      35    *lp = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128);
      36  }
      37  libc_hidden_def (__ctype_init)
      38  
      39  
      40  #include <shlib-compat.h>
      41  #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
      42  
      43  /* Defined in locale/C-ctype.c.  */
      44  extern const char _nl_C_LC_CTYPE_class[] attribute_hidden;
      45  extern const char _nl_C_LC_CTYPE_class32[] attribute_hidden;
      46  extern const char _nl_C_LC_CTYPE_toupper[] attribute_hidden;
      47  extern const char _nl_C_LC_CTYPE_tolower[] attribute_hidden;
      48  extern const char _nl_C_LC_CTYPE_class_upper[] attribute_hidden;
      49  extern const char _nl_C_LC_CTYPE_class_lower[] attribute_hidden;
      50  extern const char _nl_C_LC_CTYPE_class_alpha[] attribute_hidden;
      51  extern const char _nl_C_LC_CTYPE_class_digit[] attribute_hidden;
      52  extern const char _nl_C_LC_CTYPE_class_xdigit[] attribute_hidden;
      53  extern const char _nl_C_LC_CTYPE_class_space[] attribute_hidden;
      54  extern const char _nl_C_LC_CTYPE_class_print[] attribute_hidden;
      55  extern const char _nl_C_LC_CTYPE_class_graph[] attribute_hidden;
      56  extern const char _nl_C_LC_CTYPE_class_blank[] attribute_hidden;
      57  extern const char _nl_C_LC_CTYPE_class_cntrl[] attribute_hidden;
      58  extern const char _nl_C_LC_CTYPE_class_punct[] attribute_hidden;
      59  extern const char _nl_C_LC_CTYPE_class_alnum[] attribute_hidden;
      60  
      61  #define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o)
      62  
      63  const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
      64  const __uint32_t *__ctype32_b = b (__uint32_t, class32, 0);
      65  const __int32_t *__ctype_tolower = b (__int32_t, tolower, 128);
      66  const __int32_t *__ctype_toupper = b (__int32_t, toupper, 128);
      67  const __uint32_t *__ctype32_tolower = b (__uint32_t, tolower, 128);
      68  const __uint32_t *__ctype32_toupper = b (__uint32_t, toupper, 128);
      69  
      70  compat_symbol (libc, __ctype_b, __ctype_b, GLIBC_2_0);
      71  compat_symbol (libc, __ctype_tolower, __ctype_tolower, GLIBC_2_0);
      72  compat_symbol (libc, __ctype_toupper, __ctype_toupper, GLIBC_2_0);
      73  compat_symbol (libc, __ctype32_b, __ctype32_b, GLIBC_2_0);
      74  compat_symbol (libc, __ctype32_tolower, __ctype32_tolower, GLIBC_2_2);
      75  compat_symbol (libc, __ctype32_toupper, __ctype32_toupper, GLIBC_2_2);
      76  
      77  #endif