Module: wine Branch: master Commit: 69ea905674c98d2587171182ef980656f1d272fd URL: https://source.winehq.org/git/wine.git/?a=commit;h=69ea905674c98d2587171182e...
Author: Piotr Caban piotr@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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();