Alexandre Julliard : kernelbase: Get rid of some string helper functions.
Alexandre Julliard
julliard at winehq.org
Mon Jul 1 15:15:14 CDT 2019
Module: wine
Branch: master
Commit: 31083dbaecfc4918f1e02e746b162f6a0efaf003
URL: https://source.winehq.org/git/wine.git/?a=commit;h=31083dbaecfc4918f1e02e746b162f6a0efaf003
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jun 27 10:42:07 2019 +0200
kernelbase: Get rid of some string helper functions.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/string.c | 124 ++++++++++++++++++++++++-----------------------
1 file changed, 63 insertions(+), 61 deletions(-)
diff --git a/dlls/kernelbase/string.c b/dlls/kernelbase/string.c
index 2edaa47..52f968b 100644
--- a/dlls/kernelbase/string.c
+++ b/dlls/kernelbase/string.c
@@ -308,45 +308,31 @@ BOOL WINAPI ChrCmpIA(WORD ch1, WORD ch2)
return char_compare(ch1, ch2, NORM_IGNORECASE);
}
-static BOOL WINAPI ChrCmpA(WORD ch1, WORD ch2)
-{
- return char_compare(ch1, ch2, 0);
-}
-
BOOL WINAPI ChrCmpIW(WCHAR ch1, WCHAR ch2)
{
return CompareStringW(GetThreadLocale(), NORM_IGNORECASE, &ch1, 1, &ch2, 1) - CSTR_EQUAL;
}
-static char * strstr_helper(const char *str, const char *search,
- INT (WINAPI *cmp_func)(const char *, const char *, int))
+char * WINAPI StrStrA(const char *str, const char *search)
{
const char *end;
size_t len;
- if (!str || !search || !*search)
- return NULL;
+ TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(search));
+
+ if (!str || !search || !*search) return NULL;
len = strlen(search);
end = str + strlen(str);
while (str + len <= end)
{
- if (!cmp_func(str, search, len))
- return (char *)str;
+ if (!StrCmpNA(str, search, len)) return (char *)str;
str = CharNextA(str);
}
-
return NULL;
}
-char * WINAPI StrStrA(const char *str, const char *search)
-{
- TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(search));
-
- return strstr_helper(str, search, StrCmpNA);
-}
-
WCHAR * WINAPI StrStrW(const WCHAR *str, const WCHAR *search)
{
TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(search));
@@ -465,9 +451,22 @@ WCHAR * WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
char * WINAPI StrStrIA(const char *str, const char *search)
{
+ const char *end;
+ size_t len;
+
TRACE("%s, %s\n", wine_dbgstr_a(str), debugstr_a(search));
- return strstr_helper(str, search, StrCmpNIA);
+ if (!str || !search || !*search) return NULL;
+
+ len = strlen(search);
+ end = str + strlen(str);
+
+ while (str + len <= end)
+ {
+ if (!StrCmpNIA(str, search, len)) return (char *)str;
+ str = CharNextA(str);
+ }
+ return NULL;
}
WCHAR * WINAPI StrStrIW(const WCHAR *str, const WCHAR *search)
@@ -493,35 +492,22 @@ WCHAR * WINAPI StrStrIW(const WCHAR *str, const WCHAR *search)
return NULL;
}
-static int strspn_helper(const char *str, const char *match, char * (WINAPI *func)(const char *, WORD), BOOL invert)
+int WINAPI StrSpnA(const char *str, const char *match)
{
const char *ptr = str;
- if (!str || !*str || !match)
- return 0;
+ TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
+
+ if (!str || !match) return 0;
while (*ptr)
{
- const char *test = func(match, *ptr);
-
- if (!invert && !test)
- break;
- if (invert && test)
- break;
-
+ if (!StrChrA(match, *ptr)) break;
ptr = CharNextA(ptr);
- };
-
+ }
return ptr - str;
}
-int WINAPI StrSpnA(const char *str, const char *match)
-{
- TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
-
- return strspn_helper(str, match, StrChrA, FALSE);
-}
-
int WINAPI StrSpnW(const WCHAR *str, const WCHAR *match)
{
if (!str || !match) return 0;
@@ -530,9 +516,18 @@ int WINAPI StrSpnW(const WCHAR *str, const WCHAR *match)
int WINAPI StrCSpnA(const char *str, const char *match)
{
+ const char *ptr = str;
+
TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
- return strspn_helper(str, match, StrChrA, TRUE);
+ if (!str || !match) return 0;
+
+ while (*ptr)
+ {
+ if (StrChrA(match, *ptr)) break;
+ ptr = CharNextA(ptr);
+ }
+ return ptr - str;
}
int WINAPI StrCSpnW(const WCHAR *str, const WCHAR *match)
@@ -545,9 +540,18 @@ int WINAPI StrCSpnW(const WCHAR *str, const WCHAR *match)
int WINAPI StrCSpnIA(const char *str, const char *match)
{
+ const char *ptr = str;
+
TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
- return strspn_helper(str, match, StrChrIA, TRUE);
+ if (!str || !match) return 0;
+
+ while (*ptr)
+ {
+ if (StrChrIA(match, *ptr)) break;
+ ptr = CharNextA(ptr);
+ }
+ return ptr - str;
}
int WINAPI StrCSpnIW(const WCHAR *str, const WCHAR *match)
@@ -568,36 +572,23 @@ int WINAPI StrCSpnIW(const WCHAR *str, const WCHAR *match)
return ptr - str;
}
-static LPSTR strrchra_helper(const char *str, const char *end, WORD ch, BOOL (WINAPI *cmp_func)(WORD, WORD))
+char * WINAPI StrRChrA(const char *str, const char *end, WORD ch)
{
const char *ret = NULL;
- WORD ch2;
-
- if (!str)
- return NULL;
- if (!end)
- end = str + lstrlenA(str);
+ TRACE("%s, %s, %#x\n", wine_dbgstr_a(str), wine_dbgstr_a(end), ch);
+ if (!str) return NULL;
+ if (!end) end = str + lstrlenA(str);
while (*str && str <= end)
{
- ch2 = IsDBCSLeadByte(*str) ? *str << 8 | str[1] : *str;
-
- if (!cmp_func(ch, ch2))
- ret = str;
+ WORD ch2 = IsDBCSLeadByte(*str) ? *str << 8 | str[1] : *str;
+ if (!char_compare(ch, ch2, 0)) ret = str;
str = CharNextA(str);
}
-
return (char *)ret;
}
-char * WINAPI StrRChrA(const char *str, const char *end, WORD ch)
-{
- TRACE("%s, %s, %#x\n", wine_dbgstr_a(str), wine_dbgstr_a(end), ch);
-
- return strrchra_helper(str, end, ch, ChrCmpA);
-}
-
WCHAR * WINAPI StrRChrW(const WCHAR *str, const WCHAR *end, WORD ch)
{
WCHAR *ret = NULL;
@@ -614,9 +605,20 @@ WCHAR * WINAPI StrRChrW(const WCHAR *str, const WCHAR *end, WORD ch)
char * WINAPI StrRChrIA(const char *str, const char *end, WORD ch)
{
+ const char *ret = NULL;
+
TRACE("%s, %s, %#x\n", wine_dbgstr_a(str), wine_dbgstr_a(end), ch);
- return strrchra_helper(str, end, ch, ChrCmpIA);
+ if (!str) return NULL;
+ if (!end) end = str + lstrlenA(str);
+
+ while (*str && str <= end)
+ {
+ WORD ch2 = IsDBCSLeadByte(*str) ? *str << 8 | str[1] : *str;
+ if (!ChrCmpIA(ch, ch2)) ret = str;
+ str = CharNextA(str);
+ }
+ return (char *)ret;
}
WCHAR * WINAPI StrRChrIW(const WCHAR *str, const WCHAR *end, WORD ch)
More information about the wine-cvs
mailing list