Piotr Caban : msvcrt: Use _create_locale instead of setlocale during initialization.
Alexandre Julliard
julliard at winehq.org
Wed May 25 11:28:12 CDT 2011
Module: wine
Branch: master
Commit: 11bfced55d7a480248b01d9a8cfed73f74e50280
URL: http://source.winehq.org/git/wine.git/?a=commit;h=11bfced55d7a480248b01d9a8cfed73f74e50280
Author: Piotr Caban <piotr at 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);
More information about the wine-cvs
mailing list