summaryrefslogtreecommitdiff
path: root/lib/wctype.in.h
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2020-01-25 21:17:51 +0100
committerBruno Haible <bruno@clisp.org>2020-01-25 21:17:51 +0100
commit756370637a184426d4834b47cd653fc7fee296f5 (patch)
tree3ccce07551ad3f87a114207f35618b37dfdd5535 /lib/wctype.in.h
parenta51a5f5d24ce8e9be82c6a564576500d0f4d4428 (diff)
downloadgnulib-756370637a184426d4834b47cd653fc7fee296f5.tar.gz
iswxdigit: New module.
* m4/iswxdigit.m4: New file. * lib/wctype.in.h (iswxdigit): Potentially override. (iswxdigit, rpl_iswxdigit): Test REPLACE_ISWXDIGIT, not REPLACE_ISWCNTRL. Rely on ISO C compliant definition. * lib/iswxdigit.c: New file. * m4/wctype_h.m4 (gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_ISWXDIGIT, REPLACE_ISWXDIGIT. * modules/wctype-h (Makefile.am): Substitute GNULIB_ISWXDIGIT, REPLACE_ISWXDIGIT. * modules/iswxdigit: New file. * doc/posix-functions/iswxdigit.texi: Mention the portability problem.
Diffstat (limited to 'lib/wctype.in.h')
-rw-r--r--lib/wctype.in.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
index 09dbb55c0c..5d266d9b83 100644
--- a/lib/wctype.in.h
+++ b/lib/wctype.in.h
@@ -210,7 +210,10 @@ rpl_iswupper (wint_t wc)
_GL_WCTYPE_INLINE int
rpl_iswxdigit (wint_t wc)
{
- return ((wchar_t) wc == wc ? iswxdigit ((wchar_t) wc) : 0);
+ return ((wchar_t) wc == wc
+ ? (wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')
+ : 0);
}
_GL_WCTYPE_INLINE wint_t
@@ -428,7 +431,7 @@ iswupper
}
_GL_WCTYPE_INLINE int
-# if @REPLACE_ISWCNTRL@
+# if @REPLACE_ISWXDIGIT@
rpl_iswxdigit
# else
iswxdigit
@@ -488,6 +491,16 @@ _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc));
# endif
# endif
+# if @GNULIB_ISWXDIGIT@
+# if @REPLACE_ISWXDIGIT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef iswxdigit
+# define iswxdigit rpl_iswxdigit
+# endif
+_GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc));
+# endif
+# endif
+
# endif
# if defined __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@
@@ -578,7 +591,7 @@ _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
#else
_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
#endif
-#if @REPLACE_ISWCNTRL@
+#if @REPLACE_ISWXDIGIT@
_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
#else
_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));