msvcrt: Added _wcsncoll and _wcsncoll_l implementation.

Jactry Zeng jactry92 at gmail.com
Fri Mar 29 06:31:51 CDT 2013


-------------- next part --------------
From 0b5168eac215bdb964dc107b19389ba21b79b438 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <jactry92 at gmail.com>
Date: Fri, 29 Mar 2013 17:12:53 +0800
Subject: msvcrt: Added _wcsncoll and _wcsncoll_l implementation.
To: wine-patches <wine-patches at winehq.org>
Reply-To: wine-devel <wine-devel at winehq.org>

---
 dlls/msvcr100/msvcr100.spec |    2 +-
 dlls/msvcr110/msvcr110.spec |    2 +-
 dlls/msvcr80/msvcr80.spec   |    2 +-
 dlls/msvcr90/msvcr90.spec   |    2 +-
 dlls/msvcrt/msvcrt.spec     |    4 ++--
 dlls/msvcrt/wcs.c           |   24 ++++++++++++++++++++++++
 6 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index af00082..6476571 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1491,7 +1491,7 @@
 @ cdecl _wcslwr_s(wstr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ cdecl _wcsncoll(wstr wstr long) msvcrt._wcsncoll
-@ stub _wcsncoll_l
+@ cdecl _wcsncoll_l(wstr wstr long ptr) msvcrt._wcsncoll_l
 @ cdecl _wcsnicmp(wstr wstr long) msvcrt._wcsnicmp
 @ stub _wcsnicmp_l
 @ cdecl _wcsnicoll(wstr wstr long) msvcrt._wcsnicoll
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index a80cc6e..c8c99f1 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1854,7 +1854,7 @@
 @ cdecl _wcslwr_s(wstr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ cdecl _wcsncoll(wstr wstr long) msvcrt._wcsncoll
-@ stub _wcsncoll_l
+@ cdecl _wcsncoll_l(wstr wstr long ptr) msvcrt._wcsncoll_l
 @ cdecl _wcsnicmp(wstr wstr long) msvcrt._wcsnicmp
 @ stub _wcsnicmp_l
 @ cdecl _wcsnicoll(wstr wstr long) msvcrt._wcsnicoll
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index d8f361f..cd83405 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1151,7 +1151,7 @@
 @ cdecl _wcslwr_s(wstr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ cdecl _wcsncoll(wstr wstr long) msvcrt._wcsncoll
-@ stub _wcsncoll_l
+@ cdecl _wcsncoll_l(wstr wstr long ptr) msvcrt._wcsncoll_l
 @ cdecl _wcsnicmp(wstr wstr long) msvcrt._wcsnicmp
 @ stub _wcsnicmp_l
 @ cdecl _wcsnicoll(wstr wstr long) msvcrt._wcsnicoll
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 7916839..6d19a3d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1145,7 +1145,7 @@
 @ cdecl _wcslwr_s(wstr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ cdecl _wcsncoll(wstr wstr long) msvcrt._wcsncoll
-@ stub _wcsncoll_l
+@ cdecl _wcsncoll_l(wstr wstr long ptr) msvcrt._wcsncoll_l
 @ cdecl _wcsnicmp(wstr wstr long) msvcrt._wcsnicmp
 @ stub _wcsnicmp_l
 @ cdecl _wcsnicoll(wstr wstr long) msvcrt._wcsnicoll
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index edef615..89d9028 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1109,8 +1109,8 @@
 # stub _wcslwr_l(wstr ptr)
 @ cdecl _wcslwr_s(wstr long) MSVCRT__wcslwr_s
 # stub _wcslwr_s_l(wstr long ptr)
-@ stub _wcsncoll(wstr wstr long)
-# stub _wcsncoll_l(wstr wstr long ptr)
+@ cdecl _wcsncoll(wstr wstr long) MSVCRT__wcsncoll
+@ cdecl _wcsncoll_l(wstr wstr long ptr) MSVCRT__wcsncoll_l
 @ cdecl _wcsnicmp(wstr wstr long) ntdll._wcsnicmp
 # stub _wcsnicmp_l(wstr wstr long ptr)
 @ cdecl _wcsnicoll(wstr wstr long) MSVCRT__wcsnicoll
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index eb268dc..546a848 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -199,6 +199,30 @@ int CDECL MSVCRT__wcslwr_s( MSVCRT_wchar_t* str, MSVCRT_size_t n )
 }
 
 /*********************************************************************
+ *              _wcsncoll_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__wcsncoll_l(const MSVCRT_wchar_t* str1, const MSVCRT_wchar_t* str2,
+			      MSVCRT_size_t count, MSVCRT__locale_t locale)
+{
+    MSVCRT_pthreadlocinfo locinfo;
+
+    if(!locale)
+        locinfo = get_locinfo();
+    else
+        locinfo = locale->locinfo;
+
+    return CompareStringW(locinfo->lc_handle[MSVCRT_LC_COLLATE], 0, str1, count, str2, count)-CSTR_EQUAL;
+}
+
+/*********************************************************************
+ *              _wcsncoll (MSVCRT.@)
+ */
+int CDECL MSVCRT__wcsncoll(const MSVCRT_wchar_t* str1, const MSVCRT_wchar_t* str2, MSVCRT_size_t count)
+{
+    return MSVCRT__wcsncoll_l(str1, str2, count, NULL);
+}
+
+/*********************************************************************
  *		_wcstod_l (MSVCRT.@)
  */
 double CDECL MSVCRT__wcstod_l(const MSVCRT_wchar_t* str, MSVCRT_wchar_t** end,
-- 
1.7.9.5


More information about the wine-patches mailing list