From: Jeff Smith Subject: [RFC PATCH 6/9] msvcrt: Add _wctype table. Message-Id: <20200109065349.2549777-6-whydoubt@gmail.com> Date: Thu, 9 Jan 2020 00:53:46 -0600 In-Reply-To: <20200109065349.2549777-1-whydoubt@gmail.com> References: <20200109065349.2549777-1-whydoubt@gmail.com> Signed-off-by: Jeff Smith --- .../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