[PATCH 3/3] msvcrt: Implement _wcslwr_s [try2]

Detlef Riekenberg wine.dev at web.de
Mon Jan 10 16:03:05 CST 2011


based on _strlwr_s

This let Radiotracker go a step forward

try 2 without the _set_abort_behavior in msvcrt.spec


--
By by ... Detlef
---
 dlls/msvcr100/msvcr100.spec |    2 +-
 dlls/msvcr80/msvcr80.spec   |    2 +-
 dlls/msvcr90/msvcr90.spec   |    2 +-
 dlls/msvcrt/msvcrt.spec     |    2 +-
 dlls/msvcrt/wcs.c           |   35 +++++++++++++++++++++++++++++++++++
 5 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 1e898df..e43f621 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1293,7 +1293,7 @@
 @ stub _wcsicoll_l
 @ cdecl _wcslwr(wstr) msvcrt._wcslwr
 @ stub _wcslwr_l
-@ stub _wcslwr_s
+@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ stub _wcsncoll
 @ stub _wcsncoll_l
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index d530f78..063a645 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1146,7 +1146,7 @@
 @ stub _wcsicoll_l
 @ cdecl _wcslwr(wstr) msvcrt._wcslwr
 @ stub _wcslwr_l
-@ stub _wcslwr_s
+@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ stub _wcsncoll
 @ stub _wcsncoll_l
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index c1d400a..32e6c75 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1133,7 +1133,7 @@
 @ stub _wcsicoll_l
 @ cdecl _wcslwr(wstr) msvcrt._wcslwr
 @ stub _wcslwr_l
-@ stub _wcslwr_s
+@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s
 @ stub _wcslwr_s_l
 @ stub _wcsncoll
 @ stub _wcsncoll_l
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 172fd82..ad8f7b3 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1067,7 +1067,7 @@
 # stub _wcsicoll_l
 @ cdecl _wcslwr(wstr) ntdll._wcslwr
 # stub _wcslwr_l
-# stub _wcslwr_s
+@ cdecl _wcslwr_s(ptr long)
 # stub _wcslwr_s_l
 @ stub _wcsncoll #(wstr wstr long)
 # stub _wcsncoll_l
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index b01e60b..3e0366c 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -1396,6 +1396,41 @@ int CDECL MSVCRT_wcscoll( const MSVCRT_wchar_t* str1, const MSVCRT_wchar_t* str2
 }
 
 /*********************************************************************
+ *		_wcslwr_s (MSVCRT.@)
+ */
+int CDECL _wcslwr_s(WCHAR *str, MSVCRT_size_t len)
+{
+    WCHAR *ptr = str;
+
+    if (!str || !len)
+    {
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return MSVCRT_EINVAL;
+    }
+
+    while (len && *ptr)
+    {
+        len--;
+        ptr++;
+    }
+
+    if (!len)
+    {
+        str[0] = '\0';
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return MSVCRT_EINVAL;
+    }
+
+    while (*str)
+    {
+        *str = tolowerW(*str);
+        str++;
+    }
+
+    return 0;
+}
+
+/*********************************************************************
  *		wcspbrk (MSVCRT.@)
  */
 MSVCRT_wchar_t* CDECL MSVCRT_wcspbrk( const MSVCRT_wchar_t* str, const MSVCRT_wchar_t* accept )
-- 
1.7.1




More information about the wine-patches mailing list