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