[RFC PATCH 6/9] msvcrt: Add _wctype table.

Jeff Smith whydoubt at gmail.com
Thu Jan 9 00:53:46 CST 2020


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
 .../api-ms-win-crt-string-l1-1-0.spec         |  2 +-
 dlls/msvcr100/msvcr100.spec                   |  2 +-
 dlls/msvcr110/msvcr110.spec                   |  2 +-
 dlls/msvcr120/msvcr120.spec                   |  2 +-
 dlls/msvcr120_app/msvcr120_app.spec           |  2 +-
 dlls/msvcr70/msvcr70.spec                     |  2 +-
 dlls/msvcr71/msvcr71.spec                     |  2 +-
 dlls/msvcr80/msvcr80.spec                     |  2 +-
 dlls/msvcr90/msvcr90.spec                     |  2 +-
 dlls/msvcrt/msvcrt.spec                       |  2 +-
 dlls/msvcrt/wcs.c                             | 58 +++++++++++++++++++
 dlls/ucrtbase/ucrtbase.spec                   |  2 +-
 12 files changed, 69 insertions(+), 11 deletions(-)

diff --git a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec
index ead56fbcb5..fe0fa012cd 100644
--- a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec
@@ -96,7 +96,7 @@
 @ cdecl _wcsupr_s(wstr long) ucrtbase._wcsupr_s
 @ cdecl _wcsupr_s_l(wstr long ptr) ucrtbase._wcsupr_s_l
 @ cdecl _wcsxfrm_l(ptr wstr long ptr) ucrtbase._wcsxfrm_l
-@ stub _wctype
+@ extern _wctype ucrtbase._wctype
 @ cdecl is_wctype(long long) ucrtbase.is_wctype
 @ cdecl isalnum(long) ucrtbase.isalnum
 @ cdecl isalpha(long) ucrtbase.isalpha
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index bd1c310a07..ff974b571d 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1531,7 +1531,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index 44358d8a02..996b00691d 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1889,7 +1889,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 2079bbea94..d519c730c7 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1913,7 +1913,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 89d240b567..ce95cbc1b8 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1606,7 +1606,7 @@
 @ cdecl _wctime64_s(ptr long ptr) msvcr120._wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) msvcr120._wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) msvcr120._wctomb_s_l
-# extern _wctype
+@ extern _wctype msvcr120._wctype
 @ extern _wenviron msvcr120._wenviron
 @ cdecl _wfdopen(long wstr) msvcr120._wfdopen
 @ cdecl _wfindfirst32(wstr ptr) msvcr120._wfindfirst32
diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec
index 79f0d6527b..12f4ce6104 100644
--- a/dlls/msvcr70/msvcr70.spec
+++ b/dlls/msvcr70/msvcr70.spec
@@ -610,7 +610,7 @@
 @ cdecl _wcsupr(wstr) MSVCRT__wcsupr
 @ cdecl _wctime(ptr) MSVCRT__wctime
 @ cdecl _wctime64(ptr) MSVCRT__wctime64
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
 @ varargs _wexecle(wstr wstr)
diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec
index 317fc0d3af..131f0f471a 100644
--- a/dlls/msvcr71/msvcr71.spec
+++ b/dlls/msvcr71/msvcr71.spec
@@ -606,7 +606,7 @@
 @ cdecl _wcsupr(wstr) MSVCRT__wcsupr
 @ cdecl _wctime(ptr) MSVCRT__wctime
 @ cdecl _wctime64(ptr) MSVCRT__wctime64
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
 @ varargs _wexecle(wstr wstr)
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index a12c2b2ba7..59f2867734 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1210,7 +1210,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 84fb083282..f44c4d4c4c 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1186,7 +1186,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index bf096f2cfa..b9a5c2644c 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1141,7 +1141,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-# extern _wctype
+@ extern _wctype MSVCRT__wctype
 @ extern _wenviron MSVCRT__wenviron
 @ varargs _wexecl(wstr wstr)
 @ varargs _wexecle(wstr wstr)
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 600c4db008..efb879a89d 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -40,6 +40,64 @@ static BOOL n_format_enabled = TRUE;
 #include "printf.h"
 #undef PRINTF_WIDE
 
+/* Some abbreviations to make the following table readable */
+#define _C_ MSVCRT__CONTROL
+#define _S_ MSVCRT__SPACE
+#define _P_ MSVCRT__PUNCT
+#define _D_ MSVCRT__DIGIT
+#define _H_ MSVCRT__HEX
+#define _U_ MSVCRT__UPPER|0x100
+#define _L_ MSVCRT__LOWER|0x100
+#define _B_ MSVCRT__BLANK
+
+#if _MSVCR_VER==120
+#define _SUP_ _P_
+#else
+#define _SUP_ _P_|_D_
+#endif
+
+#if _MSVCR_VER>=120
+#define _B120_ 0
+#else
+#define _B120_ _B_
+#endif
+
+#if _MSVCR_VER>=140
+#define _S140_ _S_
+#define _C140_ _C_
+#define _L140_ _L_
+#else
+#define _S140_ 0
+#define _C140_ 0
+#define _L140_ 0
+#endif
+
+WORD MSVCRT__wctype [257] = {
+    0,
+    _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _S_|_C_|_B120_, _S_|_C_, _S_|_C_,
+      _S_|_C_, _S_|_C_, _C_, _C_,
+    _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_,
+    _S_|_B_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_,
+    _D_|_H_, _D_|_H_, _D_|_H_, _D_|_H_, _D_|_H_, _D_|_H_, _D_|_H_, _D_|_H_,
+      _D_|_H_, _D_|_H_, _P_, _P_, _P_, _P_, _P_, _P_,
+    _P_, _U_|_H_, _U_|_H_, _U_|_H_, _U_|_H_, _U_|_H_, _U_|_H_, _U_, _U_, _U_,
+      _U_, _U_, _U_, _U_, _U_, _U_,
+    _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _P_, _P_, _P_, _P_, _P_,
+    _P_, _L_|_H_, _L_|_H_, _L_|_H_, _L_|_H_, _L_|_H_, _L_|_H_, _L_, _L_, _L_,
+      _L_, _L_, _L_, _L_, _L_, _L_,
+    _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _P_, _P_, _P_, _P_, _C_,
+    _C_, _C_, _C_, _C_, _C_, _C_|_S140_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_,
+    _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_, _C_,
+    _S_|_B120_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_, _P_|_L140_, _P_,
+      _P_, _P_|_C140_, _P_, _P_,
+    _P_, _P_, _SUP_, _SUP_, _P_, _P_|_L140_, _P_, _P_, _P_, _SUP_, _P_|_L140_, _P_,
+      _P_, _P_, _P_, _P_,
+    _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _U_,
+    _U_, _U_, _U_, _U_, _U_, _U_, _U_, _P_, _U_, _U_, _U_, _U_, _U_, _U_, _U_, _L_,
+    _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_,
+    _L_, _L_, _L_, _L_, _L_, _L_, _L_, _P_, _L_, _L_, _L_, _L_, _L_, _L_, _L_, _L_
+};
+
 #if _MSVCR_VER>=80
 
 /*********************************************************************
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 41fdc496f4..8f174ee95a 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -2062,7 +2062,7 @@
 @ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
 @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
 @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
-@ stub _wctype
+@ extern _wctype MSVCRT__wctype
 @ cdecl _wdupenv_s(ptr ptr wstr)
 @ varargs _wexecl(wstr wstr)
 @ varargs _wexecle(wstr wstr)
-- 
2.23.0




More information about the wine-devel mailing list