about summary refs log tree commit diff
path: root/include/ctype.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-15 16:27:08 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-15 16:27:08 -0400
commitfd5bdc0924e0cfd1688b632068c1b26f3b0c88da (patch)
treeaac5e56322b05ae60be779de324b90087fb99dc4 /include/ctype.h
parent2d1f3a4db65d2731a695dee6b973accea8b9adc0 (diff)
downloadglibc-fd5bdc0924e0cfd1688b632068c1b26f3b0c88da.tar.gz
glibc-fd5bdc0924e0cfd1688b632068c1b26f3b0c88da.tar.xz
glibc-fd5bdc0924e0cfd1688b632068c1b26f3b0c88da.zip
Optimize access to isXYZ and toXYZ tables
The functions to get the pointers can now depend on the TLS variable
be initialized.
Diffstat (limited to 'include/ctype.h')
-rw-r--r--include/ctype.h20
1 files changed, 8 insertions, 12 deletions
diff --git a/include/ctype.h b/include/ctype.h
index f4b782e136..4b5abda375 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -1,5 +1,9 @@
 #ifndef _CTYPE_H
 
+/* Initialize ctype locale data.  */
+extern void __ctype_init (void);
+libc_hidden_proto (__ctype_init)
+
 extern int __isctype (int __c, int __mask);
 
 # ifndef NOT_IN_libc
@@ -22,31 +26,23 @@ __libc_tsd_define (extern, const uint16_t *, CTYPE_B)
 __libc_tsd_define (extern, const int32_t *, CTYPE_TOUPPER)
 __libc_tsd_define (extern, const int32_t *, CTYPE_TOLOWER)
 
+
 CTYPE_EXTERN_INLINE const uint16_t ** __attribute__ ((const))
 __ctype_b_loc (void)
 {
-  const uint16_t **tablep = __libc_tsd_address (const uint16_t *, CTYPE_B);
-  if (__builtin_expect (*tablep == NULL, 0))
-    *tablep = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128;
-  return tablep;
+  return __libc_tsd_address (const uint16_t *, CTYPE_B);
 }
 
 CTYPE_EXTERN_INLINE const int32_t ** __attribute__ ((const))
 __ctype_toupper_loc (void)
 {
-  const int32_t **tablep = __libc_tsd_address (const int32_t *, CTYPE_TOUPPER);
-  if (__builtin_expect (*tablep == NULL, 0))
-    *tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128);
-  return tablep;
+  return __libc_tsd_address (const int32_t *, CTYPE_TOUPPER);
 }
 
 CTYPE_EXTERN_INLINE const int32_t ** __attribute__ ((const))
 __ctype_tolower_loc (void)
 {
-  const int32_t **tablep = __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
-  if (__builtin_expect (*tablep == NULL, 0))
-    *tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128);
-  return tablep;
+  return __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
 }
 
 # endif	/* Not NOT_IN_libc.  */