Alexandre Julliard : ntdll: Add bsearch_s.
Module: wine Branch: master Commit: 5b36a00b4dc8ae90edd1f9590ccb85cb8226338d URL: https://source.winehq.org/git/wine.git/?a=commit;h=5b36a00b4dc8ae90edd1f9590... Author: Alexandre Julliard <julliard(a)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(a)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)
participants (1)
-
Alexandre Julliard