Piotr Caban : ntdll: Fix memchr implementation.
Alexandre Julliard
julliard at winehq.org
Fri Dec 4 14:36:04 CST 2020
Module: wine
Branch: master
Commit: 7d94c4f0e4e96c97c0beed7aead626026caa2d03
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7d94c4f0e4e96c97c0beed7aead626026caa2d03
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Dec 4 17:41:50 2020 +0100
ntdll: Fix memchr implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50228
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/string.c | 2 +-
dlls/ntdll/string.c | 2 +-
dlls/ntdll/tests/string.c | 21 +++++++++++++++++++++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index 0c4c657ba99..348c36f3ed5 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -2621,7 +2621,7 @@ void* __cdecl memchr(const void *ptr, int c, size_t n)
{
const unsigned char *p = ptr;
- for (p = ptr; n; n--, p++) if (*p == c) return (void *)(ULONG_PTR)p;
+ for (p = ptr; n; n--, p++) if (*p == (unsigned char)c) return (void *)(ULONG_PTR)p;
return NULL;
}
diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c
index 588b5dd5de7..f1cea6caa83 100644
--- a/dlls/ntdll/string.c
+++ b/dlls/ntdll/string.c
@@ -72,7 +72,7 @@ void * __cdecl memchr( const void *ptr, int c, size_t n )
{
const unsigned char *p = ptr;
- for (p = ptr; n; n--, p++) if (*p == c) return (void *)(ULONG_PTR)p;
+ for (p = ptr; n; n--, p++) if (*p == (unsigned char)c) return (void *)(ULONG_PTR)p;
return NULL;
}
diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c
index b6a40f6709c..6939dd3c15e 100644
--- a/dlls/ntdll/tests/string.c
+++ b/dlls/ntdll/tests/string.c
@@ -65,6 +65,7 @@ static int (__cdecl *p_wcsnicmp)(LPCWSTR,LPCWSTR,int);
static LPWSTR (__cdecl *pwcschr)(LPCWSTR, WCHAR);
static LPWSTR (__cdecl *pwcsrchr)(LPCWSTR, WCHAR);
+static void* (__cdecl *pmemchr)(const void*, int, size_t);
static void (__cdecl *pqsort)(void *,size_t,size_t, int(__cdecl *compar)(const void *, const void *) );
static void* (__cdecl *pbsearch)(void *,void*,size_t,size_t, int(__cdecl *compar)(const void *, const void *) );
@@ -134,6 +135,7 @@ static void InitFunctionPtrs(void)
X(_wcsnicmp);
X(wcschr);
X(wcsrchr);
+ X(memchr);
X(qsort);
X(bsearch);
X(_snprintf);
@@ -2035,6 +2037,24 @@ static void test_ctype(void)
}
}
+static void test_memchr(void)
+{
+ const char s[] = "ab";
+ char *r;
+
+ r = pmemchr(s, 'z', 2);
+ ok(!r, "memchr returned %p, expected NULL\n", r);
+
+ r = pmemchr(s, 'a', 2);
+ ok(r == s, "memchr returned %p, expected %p\n", r, s);
+
+ r = pmemchr(s, 0x100 + 'a', 2);
+ ok(r == s, "memchr returned %p, expected %p\n", r, s);
+
+ r = pmemchr(s, -0x100 + 'a', 2);
+ ok(r == s, "memchr returned %p, expected %p\n", r, s);
+}
+
START_TEST(string)
{
InitFunctionPtrs();
@@ -2066,4 +2086,5 @@ START_TEST(string)
test_sscanf();
test_wctype();
test_ctype();
+ test_memchr();
}
More information about the wine-cvs
mailing list