Piotr Caban : msvcrt: Optimize _strnicmp_l implementation.
Alexandre Julliard
julliard at winehq.org
Mon Mar 9 17:42:36 CDT 2020
Module: wine
Branch: master
Commit: 471425c16d66af6421a43c2ea8b54bbc2dccc0be
URL: https://source.winehq.org/git/wine.git/?a=commit;h=471425c16d66af6421a43c2ea8b54bbc2dccc0be
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Mar 9 13:54:29 2020 +0100
msvcrt: Optimize _strnicmp_l implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48723
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/string.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index e091ef5f46..8183feacc0 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -2310,6 +2310,7 @@ int __cdecl MSVCRT_strncmp(const char *str1, const char *str2, MSVCRT_size_t len
int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2,
MSVCRT_size_t count, MSVCRT__locale_t locale)
{
+ MSVCRT_pthreadlocinfo locinfo;
int c1, c2;
if(s1==NULL || s2==NULL)
@@ -2318,9 +2319,26 @@ int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2,
if(!count)
return 0;
+ if(!locale)
+ locinfo = get_locinfo();
+ else
+ locinfo = locale->locinfo;
+
+ if(!locinfo->lc_handle[MSVCRT_LC_CTYPE])
+ {
+ do {
+ if ((c1 = *s1++) >= 'A' && c1 <= 'Z')
+ c1 -= 'A' - 'a';
+ if ((c2 = *s2++) >= 'A' && c2 <= 'Z')
+ c2 -= 'A' - 'a';
+ }while(--count && c1 && c1==c2);
+
+ return c1-c2;
+ }
+
do {
- c1 = MSVCRT__tolower_l(*s1++, locale);
- c2 = MSVCRT__tolower_l(*s2++, locale);
+ c1 = MSVCRT__tolower_l((unsigned char)*s1++, locale);
+ c2 = MSVCRT__tolower_l((unsigned char)*s2++, locale);
}while(--count && c1 && c1==c2);
return c1-c2;
More information about the wine-cvs
mailing list