Piotr Caban : msvcrt: Added mbsrtowcs implementation.
Alexandre Julliard
julliard at winehq.org
Thu Nov 29 14:15:44 CST 2012
Module: wine
Branch: master
Commit: 5e50ec3df288b3bc9221c2deb802fa1ddc846df2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5e50ec3df288b3bc9221c2deb802fa1ddc846df2
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Nov 29 09:23:39 2012 +0000
msvcrt: Added mbsrtowcs 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 71b5343..e06511d 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -2077,7 +2077,7 @@ MSVCRT_size_t CDECL MSVCRT__mbstowcs_l(MSVCRT_wchar_t *wcstr, const char *mbstr,
if(mbstr[size] == '\0')
break;
- size += (MSVCRT__isleadbyte_l(mbstr[size], locale) ? 2 : 1);
+ size += (MSVCRT__isleadbyte_l((unsigned char)mbstr[size], locale) ? 2 : 1);
}
size = MultiByteToWideChar(locinfo->lc_codepage, 0,
@@ -2150,3 +2150,35 @@ int CDECL MSVCRT__mbstowcs_s(MSVCRT_size_t *ret, MSVCRT_wchar_t *wcstr,
{
return MSVCRT__mbstowcs_s_l(ret, wcstr, size, mbstr, count, NULL);
}
+
+/*********************************************************************
+ * mbsrtowcs(MSVCRT.@)
+ */
+MSVCRT_size_t CDECL MSVCRT_mbsrtowcs(MSVCRT_wchar_t *wcstr,
+ const char **pmbstr, MSVCRT_size_t count, MSVCRT_mbstate_t *state)
+{
+ MSVCRT_mbstate_t s = (state ? *state : 0);
+ MSVCRT_wchar_t tmpdst;
+ MSVCRT_size_t ret = 0;
+
+ if(!MSVCRT_CHECK_PMT(pmbstr != NULL))
+ return -1;
+
+ while(!wcstr || count>ret) {
+ int ch_len = MSVCRT_mbrtowc(&tmpdst, *pmbstr, 2, &s);
+ if(wcstr)
+ wcstr[ret] = tmpdst;
+
+ if(ch_len < 0) {
+ return -1;
+ }else if(ch_len == 0) {
+ *pmbstr = NULL;
+ return ret;
+ }
+
+ *pmbstr += ch_len;
+ ret++;
+ }
+
+ return ret;
+}
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 4f2fa9a..6a88832 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1331,7 +1331,7 @@
@ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen
@ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc
# stub mbsdup_dbg(wstr long ptr long)
-# stub mbsrtowcs(ptr ptr long ptr)
+@ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs
# stub mbsrtowcs_s(ptr ptr long ptr long ptr)
@ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs
@ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s
More information about the wine-cvs
mailing list