Piotr Caban : msvcrt: Added _mbtowc_l implementation.
Alexandre Julliard
julliard at winehq.org
Wed Oct 12 14:31:18 CDT 2011
Module: wine
Branch: master
Commit: 99579ca42acfe425ab6bae421d103762386b5da3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=99579ca42acfe425ab6bae421d103762386b5da3
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Oct 12 11:56:13 2011 +0200
msvcrt: Added _mbtowc_l implementation.
---
dlls/msvcrt/mbcs.c | 57 ++++++++++++++++++++++++++++------------------
dlls/msvcrt/msvcrt.h | 1 +
dlls/msvcrt/msvcrt.spec | 2 +-
3 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 87c482c..96cea86 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1009,28 +1009,6 @@ unsigned char* CDECL _mbstok(unsigned char *str, const unsigned char *delim)
}
/*********************************************************************
- * mbtowc(MSVCRT.@)
- */
-int CDECL MSVCRT_mbtowc(MSVCRT_wchar_t *dst, const char* str, MSVCRT_size_t n)
-{
- /* temp var needed because MultiByteToWideChar wants non NULL destination */
- MSVCRT_wchar_t tmpdst = '\0';
-
- if(n <= 0 || !str)
- return 0;
- if(!MultiByteToWideChar(CP_ACP, 0, str, n, &tmpdst, 1))
- return -1;
- if(dst)
- *dst = tmpdst;
- /* return the number of bytes from src that have been used */
- if(!*str)
- return 0;
- if(n >= 2 && MSVCRT_isleadbyte(*str) && str[1])
- return 2;
- return 1;
-}
-
-/*********************************************************************
* _mbbtombc(MSVCRT.@)
*/
unsigned int CDECL _mbbtombc(unsigned int c)
@@ -1869,6 +1847,41 @@ MSVCRT_size_t CDECL _mbstrlen(const char* str)
}
/*********************************************************************
+ * _mbtowc_l(MSVCRT.@)
+ */
+int CDECL MSVCRT_mbtowc_l(MSVCRT_wchar_t *dst, const char* str, MSVCRT_size_t n, MSVCRT__locale_t locale)
+{
+ MSVCRT_pthreadlocinfo locinfo;
+ MSVCRT_wchar_t tmpdst = '\0';
+
+ if(!locale)
+ locinfo = get_locinfo();
+ else
+ locinfo = locale->locinfo;
+
+ if(n <= 0 || !str)
+ return 0;
+ if(!MultiByteToWideChar(locinfo->lc_codepage, 0, str, n, &tmpdst, 1))
+ return -1;
+ if(dst)
+ *dst = tmpdst;
+ /* return the number of bytes from src that have been used */
+ if(!*str)
+ return 0;
+ if(n >= 2 && MSVCRT__isleadbyte_l(*str, locale) && str[1])
+ return 2;
+ return 1;
+}
+
+/*********************************************************************
+ * mbtowc(MSVCRT.@)
+ */
+int CDECL MSVCRT_mbtowc(MSVCRT_wchar_t *dst, const char* str, MSVCRT_size_t n)
+{
+ return MSVCRT_mbtowc_l(dst, str, n, NULL);
+}
+
+/*********************************************************************
* _mbstowcs_l(MSVCRT.@)
*/
MSVCRT_size_t CDECL MSVCRT__mbstowcs_l(MSVCRT_wchar_t *wcstr, const char *mbstr,
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index 29a3520..65e00a1 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -850,6 +850,7 @@ int __cdecl MSVCRT_iswalpha(MSVCRT_wint_t);
int __cdecl MSVCRT_iswspace(MSVCRT_wint_t);
int __cdecl MSVCRT_iswdigit(MSVCRT_wint_t);
int __cdecl MSVCRT_isleadbyte(int);
+int __cdecl MSVCRT__isleadbyte_l(int, MSVCRT__locale_t);
void __cdecl MSVCRT__lock_file(MSVCRT_FILE*);
void __cdecl MSVCRT__unlock_file(MSVCRT_FILE*);
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index fe07099..c8c710d 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -792,7 +792,7 @@
# stub _mbsupr_l(str ptr)
@ cdecl _mbsupr_s(str long)
# stub _mbsupr_s_l(str long ptr)
-# stub _mbtowc_l(ptr str long ptr)
+@ cdecl _mbtowc_l(ptr str long ptr) MSVCRT_mbtowc_l
@ cdecl _memccpy(ptr ptr long long) ntdll._memccpy
@ cdecl _memicmp(str str long) ntdll._memicmp
# stub _memicmp_l(str str long ptr)
More information about the wine-cvs
mailing list