Piotr Caban : msvcrt: Added mbrlen implementation.

Alexandre Julliard julliard at winehq.org
Thu Nov 29 14:15:44 CST 2012


Module: wine
Branch: master
Commit: b8ee0dd7ab70b046d15176ed2bfccff8e5d44a16
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b8ee0dd7ab70b046d15176ed2bfccff8e5d44a16

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Nov 29 09:22:27 2012 +0000

msvcrt: Added mbrlen implementation.

---

 dlls/msvcrt/mbcs.c      |   34 +++++++++++++++++++++++++++++++++-
 dlls/msvcrt/msvcrt.spec |    2 +-
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 3c575e9..b083ea1 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1902,12 +1902,44 @@ int CDECL MSVCRT_mblen(const char* str, MSVCRT_size_t size)
     if(get_locinfo()->mb_cur_max == 1)
       return 1; /* ASCII CP */
 
-    return !MSVCRT_isleadbyte(*str) ? 1 : (size>1 ? 2 : -1);
+    return !MSVCRT_isleadbyte((unsigned char)*str) ? 1 : (size>1 ? 2 : -1);
   }
   return 0;
 }
 
 /*********************************************************************
+ *              mbrlen(MSVCRT.@)
+ */
+MSVCRT_size_t CDECL MSVCRT_mbrlen(const char *str, MSVCRT_size_t len, MSVCRT_mbstate_t *state)
+{
+    MSVCRT_mbstate_t s = (state ? *state : 0);
+    MSVCRT_size_t ret;
+
+    if(!len || !str || !*str)
+        return 0;
+
+    if(get_locinfo()->mb_cur_max == 1) {
+        return 1;
+    }else if(!s && MSVCRT_isleadbyte((unsigned char)*str)) {
+        if(len == 1) {
+            s = (unsigned char)*str;
+            ret = -2;
+        }else {
+            ret = 2;
+        }
+    }else if(!s) {
+        ret = 1;
+    }else {
+        s = 0;
+        ret = 2;
+    }
+
+    if(state)
+        *state = s;
+    return ret;
+}
+
+/*********************************************************************
  *		_mbstrlen_l(MSVCRT.@)
  */
 MSVCRT_size_t CDECL _mbstrlen_l(const char* str, MSVCRT__locale_t locale)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index f5cad22..7957e92 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1328,7 +1328,7 @@
 @ cdecl -arch=i386,x86_64 longjmp(ptr long) MSVCRT_longjmp
 @ cdecl malloc(long) MSVCRT_malloc
 @ cdecl mblen(ptr long) MSVCRT_mblen
-# stub mbrlen(ptr long ptr)
+@ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen
 # stub mbrtowc(ptr str long ptr)
 # stub mbsdup_dbg(wstr long ptr long)
 # stub mbsrtowcs(ptr ptr long ptr)




More information about the wine-cvs mailing list