Piotr Caban : msvcrt: Added _strnicmp_l implementation.
Alexandre Julliard
julliard at winehq.org
Wed Dec 26 14:05:17 CST 2012
Module: wine
Branch: master
Commit: eaa1b7060375f819146cce127d401a2161db6ea1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=eaa1b7060375f819146cce127d401a2161db6ea1
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Dec 26 12:04:59 2012 +0100
msvcrt: Added _strnicmp_l implementation.
---
dlls/msvcr100/msvcr100.spec | 2 +-
dlls/msvcr80/msvcr80.spec | 2 +-
dlls/msvcr90/msvcr90.spec | 2 +-
dlls/msvcrt/msvcrt.spec | 4 ++--
dlls/msvcrt/string.c | 32 +++++++++++++++++++++++++-------
5 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 64b4105..4838a14 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1341,7 +1341,7 @@
@ cdecl _strncoll(str str long) msvcrt._strncoll
@ cdecl _strncoll_l(str str long ptr) msvcrt._strncoll_l
@ cdecl _strnicmp(str str long) msvcrt._strnicmp
-@ stub _strnicmp_l
+@ cdecl _strnicmp_l(str str long ptr) msvcrt._strnicmp_l
@ cdecl _strnicoll(str str long) msvcrt._strnicoll
@ cdecl _strnicoll_l(str str long ptr) msvcrt._strnicoll_l
@ cdecl _strnset(str long long) msvcrt._strnset
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 91147cf..0144e08 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1003,7 +1003,7 @@
@ cdecl _strncoll(str str long) msvcrt._strncoll
@ cdecl _strncoll_l(str str long ptr) msvcrt._strncoll_l
@ cdecl _strnicmp(str str long) msvcrt._strnicmp
-@ stub _strnicmp_l
+@ cdecl _strnicmp_l(str str long ptr) msvcrt._strnicmp_l
@ cdecl _strnicoll(str str long) msvcrt._strnicoll
@ cdecl _strnicoll_l(str str long ptr) msvcrt._strnicoll_l
@ cdecl _strnset(str long long) msvcrt._strnset
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index abde141..dd91d5e 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -996,7 +996,7 @@
@ cdecl _strncoll(str str long) msvcrt._strncoll
@ cdecl _strncoll_l(str str long ptr) msvcrt._strncoll_l
@ cdecl _strnicmp(str str long) msvcrt._strnicmp
-@ stub _strnicmp_l
+@ cdecl _strnicmp_l(str str long ptr) msvcrt._strnicmp_l
@ cdecl _strnicoll(str str long) msvcrt._strnicoll
@ cdecl _strnicoll_l(str str long ptr) msvcrt._strnicoll_l
@ cdecl _strnset(str long long) msvcrt._strnset
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 3d15a21..29b459b 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -936,8 +936,8 @@
@ cdecl _strlwr_s_l(ptr long ptr)
@ cdecl _strncoll(str str long) MSVCRT_strncoll_l
@ cdecl _strncoll_l(str str long ptr) MSVCRT_strncoll
-@ cdecl _strnicmp(str str long) ntdll._strnicmp
-# stub _strnicmp_l(str str long ptr)
+@ cdecl _strnicmp(str str long) MSVCRT__strnicmp
+@ cdecl _strnicmp_l(str str long ptr) MSVCRT__strnicmp_l
@ cdecl _strnicoll(str str long) MSVCRT__strnicoll
@ cdecl _strnicoll_l(str str long ptr) MSVCRT__strnicoll_l
@ cdecl _strnset(str long long) MSVCRT__strnset
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index b457510..d9ec353 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -1559,9 +1559,10 @@ void * __cdecl MSVCRT_memcpy( void *dst, const void *src, size_t n )
}
/*********************************************************************
- * _stricmp_l (MSVCRT.@)
+ * _strnicmp_l (MSVCRT.@)
*/
-int __cdecl MSVCRT__stricmp_l(const char *s1, const char *s2, MSVCRT__locale_t locale)
+int __cdecl MSVCRT__strnicmp_l(const char *s1, const char *s2,
+ MSVCRT_size_t count, MSVCRT__locale_t locale)
{
MSVCRT_pthreadlocinfo locinfo;
char c1, c2;
@@ -1569,28 +1570,45 @@ int __cdecl MSVCRT__stricmp_l(const char *s1, const char *s2, MSVCRT__locale_t l
if(!MSVCRT_CHECK_PMT(s1!=NULL && s2!=NULL))
return MSVCRT__NLSCMPERROR;
+ if(!count)
+ return 0;
+
if(!locale)
locinfo = get_locinfo();
else
locinfo = locale->locinfo;
if(!locinfo->lc_handle[MSVCRT_LC_CTYPE])
- return strcasecmp(s1, s2);
+ return strncasecmp(s1, s2, count);
do {
c1 = MSVCRT__tolower_l(*s1++, locale);
c2 = MSVCRT__tolower_l(*s2++, locale);
- if(c1 != c2)
- break;
- }while(c1 && c1==c2);
+ }while(--count && c1 && c1==c2);
return c1-c2;
}
/*********************************************************************
+ * _stricmp_l (MSVCRT.@)
+ */
+int __cdecl MSVCRT__stricmp_l(const char *s1, const char *s2, MSVCRT__locale_t locale)
+{
+ return MSVCRT__strnicmp_l(s1, s2, -1, locale);
+}
+
+/*********************************************************************
+ * _strnicmp (MSVCRT.@)
+ */
+int __cdecl MSVCRT__strnicmp(const char *s1, const char *s2, MSVCRT_size_t count)
+{
+ return MSVCRT__strnicmp_l(s1, s2, count, NULL);
+}
+
+/*********************************************************************
* _stricmp (MSVCRT.@)
*/
int __cdecl MSVCRT__stricmp(const char *s1, const char *s2)
{
- return MSVCRT__stricmp_l(s1, s2, NULL);
+ return MSVCRT__strnicmp_l(s1, s2, -1, NULL);
}
More information about the wine-cvs
mailing list