From: Piotr Caban Subject: msvcrt: Don't search for LCID in _setmbcp_l if it was already done Message-Id: <4EA7F8AE.90100@codeweavers.com> Date: Wed, 26 Oct 2011 14:10:22 +0200 --- dlls/msvcrt/locale.c | 2 +- dlls/msvcrt/mbcs.c | 13 +++++++++---- dlls/msvcrt/msvcrt.h | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c index b196cee..017d358 100644 --- a/dlls/msvcrt/locale.c +++ b/dlls/msvcrt/locale.c @@ -842,7 +842,7 @@ MSVCRT__locale_t CDECL MSVCRT__create_locale(int category, const char *locale) } } - _setmbcp_l(loc->locinfo->lc_id[MSVCRT_LC_CTYPE].wCodePage, loc->mbcinfo); + _setmbcp_l(loc->locinfo->lc_id[MSVCRT_LC_CTYPE].wCodePage, lcid[MSVCRT_LC_CTYPE], loc->mbcinfo); if(lcid[MSVCRT_LC_MONETARY] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_MONETARY)) { if(update_threadlocinfo_category(lcid[MSVCRT_LC_MONETARY], loc, MSVCRT_LC_MONETARY)) { diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 737f690..e9adbd8 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -184,7 +184,7 @@ int* CDECL ___mb_cur_max_l_func(MSVCRT__locale_t locale) /********************************************************************* * INTERNAL: _setmbcp_l */ -int _setmbcp_l(int cp, MSVCRT_pthreadmbcinfo mbcinfo) +int _setmbcp_l(int cp, LCID lcid, MSVCRT_pthreadmbcinfo mbcinfo) { const char format[] = ".%d"; @@ -222,8 +222,13 @@ int _setmbcp_l(int cp, MSVCRT_pthreadmbcinfo mbcinfo) break; } - sprintf(bufA, format, newcp); - mbcinfo->mblcid = MSVCRT_locale_to_LCID(bufA); + if(lcid == -1) { + sprintf(bufA, format, newcp); + mbcinfo->mblcid = MSVCRT_locale_to_LCID(bufA); + } else { + mbcinfo->mblcid = lcid; + } + if(mbcinfo->mblcid == -1) { WARN("Can't assign LCID to codepage (%d)\n", mbcinfo->mblcid); @@ -347,7 +352,7 @@ int _setmbcp_l(int cp, MSVCRT_pthreadmbcinfo mbcinfo) */ int CDECL _setmbcp(int cp) { - return _setmbcp_l(cp, NULL); + return _setmbcp_l(cp, -1, NULL); } /********************************************************************* diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 14bf972..671eb5b 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -888,7 +888,7 @@ MSVCRT_pthreadmbcinfo get_mbcinfo(void); void __cdecl MSVCRT__free_locale(MSVCRT__locale_t); void free_locinfo(MSVCRT_pthreadlocinfo); void free_mbcinfo(MSVCRT_pthreadmbcinfo); -int _setmbcp_l(int, MSVCRT_pthreadmbcinfo); +int _setmbcp_l(int, LCID, MSVCRT_pthreadmbcinfo); #ifndef __WINE_MSVCRT_TEST int __cdecl MSVCRT__write(int,const void*,unsigned int);