Piotr Caban : msvcrt: Don't use strcspn from C-library.
Alexandre Julliard
julliard at winehq.org
Mon Oct 28 16:43:36 CDT 2019
Module: wine
Branch: master
Commit: 69ea905674c98d2587171182ef980656f1d272fd
URL: https://source.winehq.org/git/wine.git/?a=commit;h=69ea905674c98d2587171182ef980656f1d272fd
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Oct 28 13:29:01 2019 +0100
msvcrt: Don't use strcspn from C-library.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/string.c | 16 +++++++++++++++-
dlls/msvcrt/tests/string.c | 24 ++++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index 92228a0da6..038463c319 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -2047,7 +2047,21 @@ int __cdecl MSVCRT__memicmp(const char *s1, const char *s2, MSVCRT_size_t len)
*/
MSVCRT_size_t __cdecl MSVCRT_strcspn(const char *str, const char *reject)
{
- return strcspn( str, reject );
+ BOOL rejects[256];
+ const char *p;
+
+ memset(rejects, 0, sizeof(rejects));
+
+ p = reject;
+ while(*p)
+ {
+ rejects[(unsigned char)*p] = TRUE;
+ p++;
+ }
+
+ p = str;
+ while(*p && !rejects[(unsigned char)*p]) p++;
+ return p - str;
}
/*********************************************************************
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 573289d77b..0da7c52809 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -159,6 +159,29 @@ static void test_swab( void ) {
ok(memcmp(to,expected3,testsize) == 0, "Testing small size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
}
+static void test_strcspn(void)
+{
+ static const struct {
+ const char *str;
+ const char *rej;
+ int ret;
+ } tests[] = {
+ { "test", "a", 4 },
+ { "test", "e", 1 },
+ { "test", "", 4 },
+ { "", "a", 0 },
+ { "a\xf1", "\xf1", 1 }
+ };
+ int r, i;
+
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
+ {
+ r = strcspn(tests[i].str, tests[i].rej);
+ ok(r == tests[i].ret, "strcspn(\"%s\", \"%s\") = %d, expected %d\n",
+ tests[i].str, tests[i].rej, r, tests[i].ret);
+ }
+}
+
#if 0 /* use this to generate more tests */
static void test_codepage(int cp)
@@ -3935,6 +3958,7 @@ START_TEST(string)
/* run tolower tests first */
test_tolower();
test_swab();
+ test_strcspn();
test_mbcp();
test_mbsspn();
test_mbsspnp();
More information about the wine-cvs
mailing list