#ifndef _WCTYPE_H
+#ifndef _ISOMAC
/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
there. So define it ourselves if it remains undefined. */
# define __need_wint_t
libc_hidden_proto (iswxdigit)
libc_hidden_proto (towlower)
libc_hidden_proto (towupper)
+#endif
#include <wctype/wctype.h>
+#ifndef _ISOMAC
/* Internal interfaces. */
-extern int __iswalpha_l_internal (wint_t __wc, __locale_t __locale)
- attribute_hidden;
-extern int __iswdigit_l_internal (wint_t __wc, __locale_t __locale)
- attribute_hidden;
-extern int __iswspace_l_internal (wint_t __wc, __locale_t __locale)
- attribute_hidden;
-extern int __iswxdigit_l_internal (wint_t __wc, __locale_t __locale)
- attribute_hidden;
extern int __iswspace (wint_t __wc);
extern int __iswctype (wint_t __wc, wctype_t __desc);
-extern int __iswctype_internal (wint_t __wc, wctype_t __desc) attribute_hidden;
-extern wctype_t __wctype (__const char *__property);
+extern wctype_t __wctype (const char *__property);
extern wctrans_t __wctrans (const char *__property);
extern wint_t __towctrans (wint_t __wc, wctrans_t __desc);
libc_hidden_proto (__towlower_l)
libc_hidden_proto (__towupper_l)
+/* The spec says that isdigit must only match the decimal digits. We
+ can check this without a memory access. */
+# if IS_IN (libc)
+# undef iswdigit
+# define iswdigit(c) ({ wint_t __c = (c); __c >= L'0' && __c <= L'9'; })
+# undef iswdigit_l
+# define iswdigit_l(c, l) ({ wint_t __c = (c); __c >= L'0' && __c <= L'9'; })
+# undef __iswdigit_l
+# define __iswdigit_l(c, l) ({ wint_t __c = (c); __c >= L'0' && __c <= L'9'; })
+# endif
+
+#endif
#endif