Piotr Caban : msvcrt: Fix wcstombs_l implementation.

Alexandre Julliard julliard at winehq.org
Mon May 24 11:30:49 CDT 2010


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon May 24 10:03:55 2010 +0200

msvcrt: Fix wcstombs_l implementation.

---

 dlls/msvcrt/wcs.c |   30 +++++++++++++++++++-----------
 1 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 79be91a..c26809c 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -240,26 +240,34 @@ MSVCRT_size_t CDECL MSVCRT__wcstombs_l(char *mbstr, const MSVCRT_wchar_t *wcstr,
         MSVCRT_size_t count, MSVCRT__locale_t locale)
 {
     char default_char = '\0';
-    MSVCRT_size_t tmp;
+    MSVCRT_size_t tmp = 0;
     BOOL used_default;
 
     if(!locale)
         locale = get_locale();
 
-    /* FIXME: Use wcslen here */
-    tmp = strlenW(wcstr);
-    if(tmp>count && mbstr)
-        tmp = count;
+    if(!mbstr)
+        return WideCharToMultiByte(locale->locinfo->lc_codepage, WC_NO_BEST_FIT_CHARS,
+                wcstr, -1, NULL, 0, &default_char, &used_default)-1;
 
-    tmp = WideCharToMultiByte(locale->locinfo->lc_codepage, WC_NO_BEST_FIT_CHARS,
-            wcstr, tmp, mbstr, count, &default_char, &used_default);
+    while(*wcstr) {
+        char buf[3];
+        MSVCRT_size_t i, size;
 
-    if(used_default)
-        return -1;
+        size = WideCharToMultiByte(locale->locinfo->lc_codepage, WC_NO_BEST_FIT_CHARS,
+                wcstr, 1, buf, 3, &default_char, &used_default);
+        if(used_default)
+            return -1;
+        if(tmp+size > count)
+            return tmp;
 
-    if(tmp<count && mbstr)
-        mbstr[tmp] = '\0';
+        for(i=0; i<size; i++)
+            mbstr[tmp++] = buf[i];
+        wcstr++;
+    }
 
+    if(tmp < count)
+        mbstr[tmp] = '\0';
     return tmp;
 }
 




More information about the wine-cvs mailing list