]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - include/ctype.h
Further harden glibc malloc metadata against 1-byte overflows.
[thirdparty/glibc.git] / include / ctype.h
index 4b5abda375b6d044c4405b4c72c2d262fd1f53f4..ac6db790b74cb85a1cb4e178d80a7a5ed4de4eed 100644 (file)
@@ -1,12 +1,17 @@
 #ifndef _CTYPE_H
 
+#include <ctype/ctype.h>
+
+#ifndef _ISOMAC
 /* Initialize ctype locale data.  */
 extern void __ctype_init (void);
 libc_hidden_proto (__ctype_init)
 
-extern int __isctype (int __c, int __mask);
+/* ctype/ctype.h defined this as a macro and we don't want to #undef it.
+   So defeat macro expansion with parens for this declaration.  */
+extern int (__isctype) (int __c, int __mask);
 
-# ifndef NOT_IN_libc
+# if IS_IN (libc)
 
 /* These accessors are used by the optimized macros to find the
    thread-local cache of ctype information from the current thread's
@@ -16,7 +21,7 @@ extern int __isctype (int __c, int __mask);
    NL_CURRENT_INDIRECT.  */
 
 #  include "../locale/localeinfo.h"
-#  include <bits/libc-tsd.h>
+#  include <libc-tsd.h>
 
 #  ifndef CTYPE_EXTERN_INLINE  /* Used by ctype/ctype-info.c, which see.  */
 #   define CTYPE_EXTERN_INLINE extern inline
@@ -45,19 +50,18 @@ __ctype_tolower_loc (void)
   return __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
 }
 
-# endif        /* Not NOT_IN_libc.  */
-
-# include <ctype/ctype.h>
-
-# if !defined __NO_CTYPE && !defined NOT_IN_libc
+#  ifndef __NO_CTYPE
 /* The spec says that isdigit must only match the decimal digits.  We
    can check this without a memory access.  */
-#  undef isdigit
-#  define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-#  undef isdigit_l
-#  define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-#  undef __isdigit_l
-#  define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
-# endif
+#   undef isdigit
+#   define isdigit(c) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+#   undef isdigit_l
+#   define isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+#   undef __isdigit_l
+#   define __isdigit_l(c, l) ({ int __c = (c); __c >= '0' && __c <= '9'; })
+#  endif  /* Not __NO_CTYPE.  */
+
+# endif        /* IS_IN (libc).  */
+#endif  /* Not _ISOMAC.  */
 
 #endif /* ctype.h */