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

Konrad Rzepecki hannibal at astral.lodz.pl
Fri Mar 18 05:03:12 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 473f663..a4589e1 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1001,7 +1001,7 @@
 @ stub _mbstrnlen_l
 @ cdecl _mbsupr(str) msvcrt._mbsupr
 @ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
 @ stub _mbsupr_s_l
 @ stub _mbtowc_l
 @ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 9da91db..b491d87 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -847,7 +847,7 @@
 @ stub _mbstrnlen_l
 @ cdecl _mbsupr(str) msvcrt._mbsupr
 @ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
 @ stub _mbsupr_s_l
 @ stub _mbtowc_l
 @ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 96d4589..d1cae36 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -835,7 +835,7 @@
 @ stub _mbstrnlen_l
 @ cdecl _mbsupr(str) msvcrt._mbsupr
 @ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
 @ stub _mbsupr_s_l
 @ stub _mbtowc_l
 @ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 5767242..e2ea820 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1572,6 +1572,42 @@ unsigned char* CDECL _mbsupr(unsigned char* s)
 
 
 /*********************************************************************
+ *              _mbsupr_s(MSVCRT.@)
+ */
+int CDECL _mbsupr_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 = _mbctoupper(_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 = toupper(*s);
+  if (*s)
+  {
+    *s = '\0';
+    *MSVCRT__errno() = MSVCRT_ERANGE;
+    return MSVCRT_ERANGE;
+  }
+  return 0;
+}
+
+
+/*********************************************************************
  *              _mbsspn (MSVCRT.@)
  */
 MSVCRT_size_t CDECL _mbsspn(const unsigned char* string, const unsigned char* set)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index c324dea..e43c3f5 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -783,7 +783,7 @@
 # stub _mbstrnlen_l
 @ cdecl _mbsupr(str)
 # stub _mbsupr_l
-# stub _mbsupr_s
+@ cdecl _mbsupr_s(str long)
 # stub _mbsupr_s_l
 # stub _mbtowc_l
 @ cdecl _memccpy(ptr ptr long long) ntdll._memccpy
-- 
1.7.4.1




More information about the wine-patches mailing list