Alexandre Julliard : kernelbase: Directly use the wctype table for the IsChar* functions.
Alexandre Julliard
julliard at winehq.org
Mon Dec 9 16:57:37 CST 2019
Module: wine
Branch: master
Commit: c7c8016b70f2af228f3b858fe816cb14cf7f6754
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c7c8016b70f2af228f3b858fe816cb14cf7f6754
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Dec 9 10:08:23 2019 +0100
kernelbase: Directly use the wctype table for the IsChar* functions.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/locale.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/kernelbase/string.c | 91 ------------------------------
2 files changed, 140 insertions(+), 91 deletions(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index 2dbcb0db17..950e9e230d 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -2901,6 +2901,146 @@ LANGID WINAPI DECLSPEC_HOTPATCH GetUserDefaultUILanguage(void)
}
+/******************************************************************************
+ * IsCharAlphaA (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaA( CHAR c )
+{
+ WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+ return !!(get_table_entry( wctype_table, wc ) & C1_ALPHA);
+}
+
+
+/******************************************************************************
+ * IsCharAlphaW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_ALPHA);
+}
+
+
+/******************************************************************************
+ * IsCharAlphaNumericA (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericA( CHAR c )
+{
+ WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+ return !!(get_table_entry( wctype_table, wc ) & (C1_ALPHA | C1_DIGIT));
+}
+
+
+/******************************************************************************
+ * IsCharAlphaNumericW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & (C1_ALPHA | C1_DIGIT));
+}
+
+
+/******************************************************************************
+ * IsCharBlankW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharBlankW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_BLANK);
+}
+
+
+/******************************************************************************
+ * IsCharCntrlW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharCntrlW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_CNTRL);
+}
+
+
+/******************************************************************************
+ * IsCharDigitW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharDigitW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_DIGIT);
+}
+
+
+/******************************************************************************
+ * IsCharLowerA (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerA( CHAR c )
+{
+ WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+ return !!(get_table_entry( wctype_table, wc ) & C1_LOWER);
+}
+
+
+/******************************************************************************
+ * IsCharLowerW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_LOWER);
+}
+
+
+/******************************************************************************
+ * IsCharPunctW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharPunctW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_PUNCT);
+}
+
+
+/******************************************************************************
+ * IsCharSpaceA (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceA( CHAR c )
+{
+ WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+ return !!(get_table_entry( wctype_table, wc ) & C1_SPACE);
+}
+
+
+/******************************************************************************
+ * IsCharSpaceW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_SPACE);
+}
+
+
+/******************************************************************************
+ * IsCharUpperA (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperA( CHAR c )
+{
+ WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+ return !!(get_table_entry( wctype_table, wc ) & C1_UPPER);
+}
+
+
+/******************************************************************************
+ * IsCharUpperW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_UPPER);
+}
+
+
+/******************************************************************************
+ * IsCharXDigitW (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharXDigitW( WCHAR wc )
+{
+ return !!(get_table_entry( wctype_table, wc ) & C1_XDIGIT);
+}
+
+
/******************************************************************************
* IsDBCSLeadByte (kernelbase.@)
*/
diff --git a/dlls/kernelbase/string.c b/dlls/kernelbase/string.c
index 668fd4fa37..9a4d8c0827 100644
--- a/dlls/kernelbase/string.c
+++ b/dlls/kernelbase/string.c
@@ -33,13 +33,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(string);
((ch) >= 'A' && (ch) <= 'F') || \
((ch) >= 'a' && (ch) <= 'f'))
-static WORD get_char_type(WCHAR ch)
-{
- WORD type = 0;
- GetStringTypeW(CT_CTYPE1, &ch, 1, &type);
- return type;
-}
-
static BOOL char_compare(WORD ch1, WORD ch2, DWORD flags)
{
char str1[3], str2[3];
@@ -219,90 +212,6 @@ DWORD WINAPI StrCmpNICW(const WCHAR *str, const WCHAR *cmp, DWORD len)
return StrCmpNIW(str, cmp, len);
}
-BOOL WINAPI IsCharBlankW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_BLANK);
-}
-
-BOOL WINAPI IsCharCntrlW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_CNTRL);
-}
-
-BOOL WINAPI IsCharDigitW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_DIGIT);
-}
-
-BOOL WINAPI IsCharPunctW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_PUNCT);
-}
-
-BOOL WINAPI IsCharSpaceA(CHAR c)
-{
- WORD type;
- return GetStringTypeA(GetSystemDefaultLCID(), CT_CTYPE1, &c, 1, &type) && (type & C1_SPACE);
-}
-
-BOOL WINAPI IsCharSpaceW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_SPACE);
-}
-
-BOOL WINAPI IsCharXDigitW(WCHAR wc)
-{
- return !!(get_char_type(wc) & C1_XDIGIT);
-}
-
-BOOL WINAPI IsCharAlphaA(CHAR x)
-{
- WCHAR wch;
- MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
- return IsCharAlphaW(wch);
-}
-
-BOOL WINAPI IsCharAlphaW(WCHAR ch)
-{
- return !!(get_char_type(ch) & C1_ALPHA);
-}
-
-BOOL WINAPI IsCharLowerA(CHAR x)
-{
- WCHAR wch;
- MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
- return IsCharLowerW(wch);
-}
-
-BOOL WINAPI IsCharLowerW(WCHAR ch)
-{
- return !!(get_char_type(ch) & C1_LOWER);
-}
-
-BOOL WINAPI IsCharAlphaNumericA(CHAR x)
-{
- WCHAR wch;
- MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
- return IsCharAlphaNumericW(wch);
-}
-
-BOOL WINAPI IsCharAlphaNumericW(WCHAR ch)
-{
- return !!(get_char_type(ch) & (C1_ALPHA | C1_DIGIT));
-}
-
-BOOL WINAPI IsCharUpperA(CHAR x)
-{
- WCHAR wch;
- MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
- return IsCharUpperW(wch);
-}
-
-BOOL WINAPI IsCharUpperW(WCHAR ch)
-{
- return !!(get_char_type(ch) & C1_UPPER);
-}
-
char * WINAPI StrChrA(const char *str, WORD ch)
{
TRACE("%s, %#x\n", wine_dbgstr_a(str), ch);
More information about the wine-cvs
mailing list