Module: wine Branch: master Commit: b8ee0dd7ab70b046d15176ed2bfccff8e5d44a16 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b8ee0dd7ab70b046d15176ed2b...
Author: Piotr Caban piotr@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)