Alexandre Julliard : ntdll: Add bsearch_s.
Alexandre Julliard
julliard at winehq.org
Fri Jul 1 14:01:02 CDT 2022
Module: wine
Branch: master
Commit: 5b36a00b4dc8ae90edd1f9590ccb85cb8226338d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=5b36a00b4dc8ae90edd1f9590ccb85cb8226338d
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Jul 1 16:15:12 2022 +0200
ntdll: Add bsearch_s.
Implementation copied from msvcrt.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/misc.c | 22 ++++++++++++++++++----
dlls/ntdll/ntdll.spec | 1 +
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c
index ab89ccb39d6..d4371166869 100644
--- a/dlls/ntdll/misc.c
+++ b/dlls/ntdll/misc.c
@@ -179,18 +179,21 @@ void __cdecl qsort( void *base, size_t nmemb, size_t size,
/*********************************************************************
- * bsearch (NTDLL.@)
+ * bsearch_s (NTDLL.@)
*/
-void * __cdecl bsearch( const void *key, const void *base, size_t nmemb,
- size_t size, int (__cdecl *compar)(const void *, const void *) )
+void * __cdecl bsearch_s( const void *key, const void *base, size_t nmemb, size_t size,
+ int (__cdecl *compare)(void *, const void *, const void *), void *ctx )
{
ssize_t min = 0;
ssize_t max = nmemb - 1;
+ if (!size) return NULL;
+ if (!compare) return NULL;
+
while (min <= max)
{
ssize_t cursor = min + (max - min) / 2;
- int ret = compar(key,(const char *)base+(cursor*size));
+ int ret = compare(ctx, key,(const char *)base+(cursor*size));
if (!ret)
return (char*)base+(cursor*size);
if (ret < 0)
@@ -202,6 +205,17 @@ void * __cdecl bsearch( const void *key, const void *base, size_t nmemb,
}
+/*********************************************************************
+ * bsearch (NTDLL.@)
+ */
+void * __cdecl bsearch( const void *key, const void *base, size_t nmemb,
+ size_t size, int (__cdecl *compar)(const void *, const void *) )
+{
+ return bsearch_s( key, base, nmemb, size, compare_wrapper, compar );
+}
+
+
+
/*********************************************************************
* _lfind (NTDLL.@)
*/
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index c10ca903190..26dd6c33879 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1566,6 +1566,7 @@
@ cdecl atoi(str)
@ cdecl atol(str)
@ cdecl bsearch(ptr ptr long long ptr)
+@ cdecl bsearch_s(ptr ptr long long ptr ptr)
@ cdecl ceil(double)
@ cdecl cos(double)
@ cdecl fabs(double)
More information about the wine-cvs
mailing list