crt: replace iswctype function for all CRTs

CRT's `iswctype` mishandles TAB character when passed `wctype_t` argument
contains `_BLANK` bit; see iswctype.c for behavior summary.

Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com>
Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index d67dc49..a6c593a 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -1264,6 +1264,7 @@
   misc/strsafe.c \
   misc/tdelete.c         misc/tdestroy.c            misc/tfind.c           \
   misc/tsearch.c         misc/twalk.c           \
+  misc/iswctype.c \
   misc/wcstof.c \
   misc/wcstold.c \
   misc/wdirent.c         misc/winbs_uint64.c        misc/winbs_ulong.c      misc/winbs_ushort.c    \
diff --git a/mingw-w64-crt/lib-common/api-ms-win-crt-string-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-crt-string-l1-1-0.def
index ebf6815..18292ae 100644
--- a/mingw-w64-crt/lib-common/api-ms-win-crt-string-l1-1-0.def
+++ b/mingw-w64-crt/lib-common/api-ms-win-crt-string-l1-1-0.def
@@ -147,7 +147,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype ; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib-common/msvcr120_app.def.in b/mingw-w64-crt/lib-common/msvcr120_app.def.in
index 63cea1a..4fa8540 100644
--- a/mingw-w64-crt/lib-common/msvcr120_app.def.in
+++ b/mingw-w64-crt/lib-common/msvcr120_app.def.in
@@ -2069,7 +2069,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in b/mingw-w64-crt/lib-common/msvcrt.def.in
index a4343bb..2cd26c9 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -1007,7 +1007,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib-common/ucrtbase-common.def.in b/mingw-w64-crt/lib-common/ucrtbase-common.def.in
index 4f705bd..8437cad 100644
--- a/mingw-w64-crt/lib-common/ucrtbase-common.def.in
+++ b/mingw-w64-crt/lib-common/ucrtbase-common.def.in
@@ -2424,7 +2424,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype ; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/crtdll.def.in b/mingw-w64-crt/lib32/crtdll.def.in
index 140bd34..b76b7c7 100644
--- a/mingw-w64-crt/lib32/crtdll.def.in
+++ b/mingw-w64-crt/lib32/crtdll.def.in
@@ -400,7 +400,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype ; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in b/mingw-w64-crt/lib32/msvcr100.def.in
index 52cfe90..a5c1d9d 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1734,7 +1734,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr100d.def.in b/mingw-w64-crt/lib32/msvcr100d.def.in
index 357e379..5881ef8 100644
--- a/mingw-w64-crt/lib32/msvcr100d.def.in
+++ b/mingw-w64-crt/lib32/msvcr100d.def.in
@@ -1800,7 +1800,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in b/mingw-w64-crt/lib32/msvcr110.def.in
index 210809f..2dd9e2c 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1866,7 +1866,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr110d.def.in b/mingw-w64-crt/lib32/msvcr110d.def.in
index fe19620..58aace1 100644
--- a/mingw-w64-crt/lib32/msvcr110d.def.in
+++ b/mingw-w64-crt/lib32/msvcr110d.def.in
@@ -1933,7 +1933,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr120.def.in b/mingw-w64-crt/lib32/msvcr120.def.in
index 1b179c5..10b6229 100644
--- a/mingw-w64-crt/lib32/msvcr120.def.in
+++ b/mingw-w64-crt/lib32/msvcr120.def.in
@@ -2041,7 +2041,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr120d.def.in b/mingw-w64-crt/lib32/msvcr120d.def.in
index d031817..11991c1 100644
--- a/mingw-w64-crt/lib32/msvcr120d.def.in
+++ b/mingw-w64-crt/lib32/msvcr120d.def.in
@@ -2108,7 +2108,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr40d.def.in b/mingw-w64-crt/lib32/msvcr40d.def.in
index 71a7b85..88309a7 100644
--- a/mingw-w64-crt/lib32/msvcr40d.def.in
+++ b/mingw-w64-crt/lib32/msvcr40d.def.in
@@ -1529,7 +1529,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr70.def.in b/mingw-w64-crt/lib32/msvcr70.def.in
index 2026a73..af020cb 100644
--- a/mingw-w64-crt/lib32/msvcr70.def.in
+++ b/mingw-w64-crt/lib32/msvcr70.def.in
@@ -779,7 +779,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr70d.def.in b/mingw-w64-crt/lib32/msvcr70d.def.in
index f126df2..19610ee 100644
--- a/mingw-w64-crt/lib32/msvcr70d.def.in
+++ b/mingw-w64-crt/lib32/msvcr70d.def.in
@@ -823,7 +823,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr71.def.in b/mingw-w64-crt/lib32/msvcr71.def.in
index 605d5ef..63d0594 100644
--- a/mingw-w64-crt/lib32/msvcr71.def.in
+++ b/mingw-w64-crt/lib32/msvcr71.def.in
@@ -773,7 +773,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr71d.def.in b/mingw-w64-crt/lib32/msvcr71d.def.in
index 0414cab..5beec6e 100644
--- a/mingw-w64-crt/lib32/msvcr71d.def.in
+++ b/mingw-w64-crt/lib32/msvcr71d.def.in
@@ -817,7 +817,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr80.def.in b/mingw-w64-crt/lib32/msvcr80.def.in
index da393b6..c622479 100644
--- a/mingw-w64-crt/lib32/msvcr80.def.in
+++ b/mingw-w64-crt/lib32/msvcr80.def.in
@@ -1373,7 +1373,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr80d.def.in b/mingw-w64-crt/lib32/msvcr80d.def.in
index 2cd64fe..65959c4 100644
--- a/mingw-w64-crt/lib32/msvcr80d.def.in
+++ b/mingw-w64-crt/lib32/msvcr80d.def.in
@@ -1456,7 +1456,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr90.def.in b/mingw-w64-crt/lib32/msvcr90.def.in
index bc10a2f..94d877a 100644
--- a/mingw-w64-crt/lib32/msvcr90.def.in
+++ b/mingw-w64-crt/lib32/msvcr90.def.in
@@ -1368,7 +1368,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcr90d.def.in b/mingw-w64-crt/lib32/msvcr90d.def.in
index 3f329d5..1d5354d 100644
--- a/mingw-w64-crt/lib32/msvcr90d.def.in
+++ b/mingw-w64-crt/lib32/msvcr90d.def.in
@@ -1440,7 +1440,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcrt10.def.in b/mingw-w64-crt/lib32/msvcrt10.def.in
index f1cdaab..3129298 100644
--- a/mingw-w64-crt/lib32/msvcrt10.def.in
+++ b/mingw-w64-crt/lib32/msvcrt10.def.in
@@ -1175,7 +1175,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcrt20.def.in b/mingw-w64-crt/lib32/msvcrt20.def.in
index 1d0e33f..a61c945 100644
--- a/mingw-w64-crt/lib32/msvcrt20.def.in
+++ b/mingw-w64-crt/lib32/msvcrt20.def.in
@@ -1397,7 +1397,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcrt40.def.in b/mingw-w64-crt/lib32/msvcrt40.def.in
index 811f476..83798ed 100644
--- a/mingw-w64-crt/lib32/msvcrt40.def.in
+++ b/mingw-w64-crt/lib32/msvcrt40.def.in
@@ -1497,7 +1497,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib32/msvcrtd.def.in b/mingw-w64-crt/lib32/msvcrtd.def.in
index d156ddb..80189d2 100644
--- a/mingw-w64-crt/lib32/msvcrtd.def.in
+++ b/mingw-w64-crt/lib32/msvcrtd.def.in
@@ -723,7 +723,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in b/mingw-w64-crt/lib64/msvcr100.def.in
index 6234913..8db1ba9 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1689,7 +1689,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr100d.def.in b/mingw-w64-crt/lib64/msvcr100d.def.in
index a5ec9c7..fcb7c7c 100644
--- a/mingw-w64-crt/lib64/msvcr100d.def.in
+++ b/mingw-w64-crt/lib64/msvcr100d.def.in
@@ -1754,7 +1754,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in b/mingw-w64-crt/lib64/msvcr110.def.in
index 7b45f6c..f0b338e 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1813,7 +1813,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr110d.def.in b/mingw-w64-crt/lib64/msvcr110d.def.in
index ca4d10f..4b65455 100644
--- a/mingw-w64-crt/lib64/msvcr110d.def.in
+++ b/mingw-w64-crt/lib64/msvcr110d.def.in
@@ -1878,7 +1878,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr120.def.in b/mingw-w64-crt/lib64/msvcr120.def.in
index 594f7d3..c6ecd41 100644
--- a/mingw-w64-crt/lib64/msvcr120.def.in
+++ b/mingw-w64-crt/lib64/msvcr120.def.in
@@ -1987,7 +1987,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr120d.def.in b/mingw-w64-crt/lib64/msvcr120d.def.in
index e49ddcb..8d5650f 100644
--- a/mingw-w64-crt/lib64/msvcr120d.def.in
+++ b/mingw-w64-crt/lib64/msvcr120d.def.in
@@ -2052,7 +2052,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr80.def.in b/mingw-w64-crt/lib64/msvcr80.def.in
index 8606a46..1c3ef7e 100644
--- a/mingw-w64-crt/lib64/msvcr80.def.in
+++ b/mingw-w64-crt/lib64/msvcr80.def.in
@@ -1311,7 +1311,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr80d.def.in b/mingw-w64-crt/lib64/msvcr80d.def.in
index 7fc3d16..db27778 100644
--- a/mingw-w64-crt/lib64/msvcr80d.def.in
+++ b/mingw-w64-crt/lib64/msvcr80d.def.in
@@ -1388,7 +1388,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr90.def.in b/mingw-w64-crt/lib64/msvcr90.def.in
index d22c5b6..ae71689 100644
--- a/mingw-w64-crt/lib64/msvcr90.def.in
+++ b/mingw-w64-crt/lib64/msvcr90.def.in
@@ -1309,7 +1309,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/lib64/msvcr90d.def.in b/mingw-w64-crt/lib64/msvcr90d.def.in
index 52119f3..0982871 100644
--- a/mingw-w64-crt/lib64/msvcr90d.def.in
+++ b/mingw-w64-crt/lib64/msvcr90d.def.in
@@ -1375,7 +1375,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/libarm32/msvcr110.def.in b/mingw-w64-crt/libarm32/msvcr110.def.in
index 6b56dd8..b2d9486 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110.def.in
@@ -1800,7 +1800,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/libarm32/msvcr110d.def.in b/mingw-w64-crt/libarm32/msvcr110d.def.in
index 8bd6eaa..7c30d86 100644
--- a/mingw-w64-crt/libarm32/msvcr110d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110d.def.in
@@ -1865,7 +1865,7 @@
 iswalpha
 iswascii
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/libarm32/msvcr120.def.in b/mingw-w64-crt/libarm32/msvcr120.def.in
index 3b3efdf..8baf0ac 100644
--- a/mingw-w64-crt/libarm32/msvcr120.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120.def.in
@@ -1955,7 +1955,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/libarm32/msvcr120d.def.in b/mingw-w64-crt/libarm32/msvcr120d.def.in
index 9eee8b1..c71eaa2 100644
--- a/mingw-w64-crt/libarm32/msvcr120d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120d.def.in
@@ -2020,7 +2020,7 @@
 iswascii
 iswblank
 iswcntrl
-iswctype
+__msvcrt_iswctype DATA == iswctype; mingw-w64 provides real iswctype as a wrapper around renamed __msvcrt_iswctype
 iswdigit
 iswgraph
 iswlower
diff --git a/mingw-w64-crt/misc/iswctype.c b/mingw-w64-crt/misc/iswctype.c
new file mode 100644
index 0000000..c177334
--- /dev/null
+++ b/mingw-w64-crt/misc/iswctype.c
@@ -0,0 +1,43 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#define _CTYPE_DISABLE_MACROS
+#include <wctype.h>
+
+/**
+ * CRT's `iswctype` has inconsistent behavior for TAB character when used with
+ * `wctype_t` objects returned by `wctype` function which contain `_BLANK` bit.
+ *
+ * In all CRTs up to msvcrt.dll version 6.1, it returns zero in "C" locale
+ * and non-zero otherwise.
+ *
+ * Since msvcr70.dll up to msvcr110.dll it always returns non-zero;
+ * OS-specific versions of msvcrt.dll follow this behavior.
+ *
+ * In msvcr120.dll and UCRT it always returns zero.
+ *
+ * This behavior affects both `iswblank` and `iswprint` functions;
+ * either or both of them have non-conforming behavior.
+ */
+
+/**
+ * This is CRT's `iswctype` renamed to `__msvcrt_iswctype`.
+ */
+extern int (__cdecl *__MINGW_IMP_SYMBOL(__msvcrt_iswctype)) (wint_t, wctype_t);
+
+int iswctype (wint_t _C, wctype_t _Type) {
+  /**
+   * `wctype_t` object returned for "print" character class contains _BLANK;
+   * make sure TAB is handled correctly.
+   */
+  if (_C == L'\t' && (_Type & _BLANK)) {
+    return (_Type == _BLANK ? _BLANK : 0);
+  }
+
+  return __MINGW_IMP_SYMBOL (__msvcrt_iswctype) (_C, _Type);
+}
+
+int (__cdecl *__MINGW_IMP_SYMBOL (iswctype)) (wint_t, wctype_t) = iswctype;