[2/2] msvcrt: Implement _mbslwr_s (try3, resend).

Konrad Rzepecki hannibal at astral.lodz.pl
Fri Mar 18 05:05:20 CDT 2011


Line wrap fix, spoted by Dmitry Timoshkov.

---
 dlls/msvcr100/msvcr100.spec |    2 +-
 dlls/msvcr80/msvcr80.spec   |    2 +-
 dlls/msvcr90/msvcr90.spec   |    2 +-
 dlls/msvcrt/mbcs.c          |   36 ++++++++++++++++++++++++++++++++++++
 dlls/msvcrt/msvcrt.spec     |    2 +-
 5 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index a4589e1..1812407 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -921,7 +921,7 @@
 @ stub _mbslen_l
 @ cdecl _mbslwr(str) msvcrt._mbslwr
 @ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
 @ stub _mbslwr_s_l
 @ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
 @ stub _mbsnbcat_l
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index b491d87..8b58e7d 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -767,7 +767,7 @@
 @ stub _mbslen_l
 @ cdecl _mbslwr(str) msvcrt._mbslwr
 @ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
 @ stub _mbslwr_s_l
 @ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
 @ stub _mbsnbcat_l
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index d1cae36..d18651d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -755,7 +755,7 @@
 @ stub _mbslen_l
 @ cdecl _mbslwr(str) msvcrt._mbslwr
 @ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
 @ stub _mbslwr_s_l
 @ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
 @ stub _mbsnbcat_l
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index e2ea820..4c8a8d5 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1544,6 +1544,42 @@ unsigned char* CDECL _mbslwr(unsigned char* s)
 
 
 /*********************************************************************
+ *              _mbslwr_s(MSVCRT.@)
+ */
+int CDECL _mbslwr_s(unsigned char* s, MSVCRT_size_t len)
+{
+  if (!s)
+  {
+    *MSVCRT__errno() = MSVCRT_EINVAL;
+    return MSVCRT_EINVAL;
+  }
+  if (get_locale()->locinfo->mb_cur_max > 1)
+  {
+    unsigned int c;
+    for ( ; *s && len > 0; len--)
+    {
+      c = _mbctolower(_mbsnextc(s));
+      /* Note that I assume that the size of the character is unchanged */
+      if (c > 255)
+      {
+          *s++=(c>>8);
+          c=c & 0xff;
+      }
+      *s++=c;
+    }
+  }
+  else for ( ; *s && len > 0; s++, len--) *s = tolower(*s);
+  if (*s)
+  {
+    *s = '\0';
+    *MSVCRT__errno() = MSVCRT_ERANGE;
+    return MSVCRT_ERANGE;
+  }
+  return 0;
+}
+
+
+/*********************************************************************
  *              _mbsupr(MSVCRT.@)
  */
 unsigned char* CDECL _mbsupr(unsigned char* s)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index e43c3f5..103142e 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -703,7 +703,7 @@
 # stub _mbslen_l
 @ cdecl _mbslwr(str)
 # stub _mbslwr_l
-# stub _mbslwr_s
+@ cdecl _mbslwr_s(str long)
 # stub _mbslwr_s_l
 @ cdecl _mbsnbcat(str str long)
 # stub _mbsnbcat_l
-- 
1.7.4.1




More information about the wine-patches mailing list