Module: wine Branch: master Commit: 11bfced55d7a480248b01d9a8cfed73f74e50280 URL: http://source.winehq.org/git/wine.git/?a=commit;h=11bfced55d7a480248b01d9a8c...
Author: Piotr Caban piotr@codeweavers.com Date: Tue May 24 17:22:23 2011 +0200
msvcrt: Use _create_locale instead of setlocale during initialization.
---
dlls/msvcrt/locale.c | 74 +++++++++++++++++++++++++------------------------- dlls/msvcrt/main.c | 2 +- dlls/msvcrt/msvcrt.h | 2 +- 3 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c index 7da61d8..002a38b 100644 --- a/dlls/msvcrt/locale.c +++ b/dlls/msvcrt/locale.c @@ -1079,43 +1079,6 @@ MSVCRT__locale_t MSVCRT__create_locale(int category, const char *locale) return loc; }
-/* _configthreadlocale - not exported in native msvcrt */ -int CDECL _configthreadlocale(int type) -{ - thread_data_t *data = msvcrt_get_thread_data(); - int ret; - - if(!data) - return -1; - - ret = (data->locale ? MSVCRT__ENABLE_PER_THREAD_LOCALE : MSVCRT__DISABLE_PER_THREAD_LOCALE); - - if(type == MSVCRT__ENABLE_PER_THREAD_LOCALE) { - if(!data->locale) { - /* Copy current global locale */ - data->locale = MSVCRT__create_locale(MSVCRT_LC_ALL, MSVCRT_setlocale(MSVCRT_LC_ALL, NULL)); - if(!data->locale) - return -1; - } - - return ret; - } - - if(type == MSVCRT__DISABLE_PER_THREAD_LOCALE) { - if(data->locale) { - MSVCRT__free_locale(data->locale); - data->locale = NULL; - } - - return ret; - } - - if(!type) - return ret; - - return -1; -} - /********************************************************************* * setlocale (MSVCRT.@) */ @@ -1262,3 +1225,40 @@ char* CDECL MSVCRT_setlocale(int category, const char* locale)
return cur->locinfo->lc_category[category].locale; } + +/* _configthreadlocale - not exported in native msvcrt */ +int CDECL _configthreadlocale(int type) +{ + thread_data_t *data = msvcrt_get_thread_data(); + int ret; + + if(!data) + return -1; + + ret = (data->locale ? MSVCRT__ENABLE_PER_THREAD_LOCALE : MSVCRT__DISABLE_PER_THREAD_LOCALE); + + if(type == MSVCRT__ENABLE_PER_THREAD_LOCALE) { + if(!data->locale) { + /* Copy current global locale */ + data->locale = MSVCRT__create_locale(MSVCRT_LC_ALL, MSVCRT_setlocale(MSVCRT_LC_ALL, NULL)); + if(!data->locale) + return -1; + } + + return ret; + } + + if(type == MSVCRT__DISABLE_PER_THREAD_LOCALE) { + if(data->locale) { + MSVCRT__free_locale(data->locale); + data->locale = NULL; + } + + return ret; + } + + if(!type) + return ret; + + return -1; +} diff --git a/dlls/msvcrt/main.c b/dlls/msvcrt/main.c index f1ef67b..54a0689 100644 --- a/dlls/msvcrt/main.c +++ b/dlls/msvcrt/main.c @@ -93,7 +93,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) if (!msvcrt_init_tls()) return FALSE; msvcrt_init_mt_locks(); - if(!MSVCRT_setlocale(0, "C")) { + if(!(MSVCRT_locale = MSVCRT__create_locale(0, "C"))) { msvcrt_free_mt_locks(); msvcrt_free_tls_mem(); return FALSE; diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 58fd0b7..49d4768 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -805,7 +805,6 @@ void __cdecl MSVCRT_abort(void); MSVCRT_ulong* __cdecl MSVCRT___doserrno(void); int* __cdecl MSVCRT__errno(void); char* __cdecl MSVCRT_getenv(const char*); -char* __cdecl MSVCRT_setlocale(int,const char*); int __cdecl MSVCRT_fclose(MSVCRT_FILE*); void __cdecl MSVCRT_terminate(void); MSVCRT_FILE* __cdecl MSVCRT__iob_func(void); @@ -877,6 +876,7 @@ typedef struct MSVCRT_localeinfo_struct #define MSVCRT__DISABLE_PER_THREAD_LOCALE 2
extern MSVCRT__locale_t MSVCRT_locale; +MSVCRT__locale_t MSVCRT__create_locale(int, const char*); MSVCRT__locale_t get_locale(void); void __cdecl MSVCRT__free_locale(MSVCRT__locale_t);