Author: akhaldi Date: Wed Apr 3 22:46:22 2013 New Revision: 58670
URL: http://svn.reactos.org/svn/reactos?rev=58670&view=rev Log: [CRT/LOCALE] * Improve the locale support a bit up to Wine 1.5.26.
Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h trunk/reactos/lib/sdk/crt/include/internal/wine/msvcrt.h trunk/reactos/lib/sdk/crt/locale/locale.c trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c
Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/interna... ============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] Wed Apr 3 22:46:22 2013 @@ -90,7 +90,7 @@
int _setmbcp_l(int, LCID, MSVCRT_pthreadmbcinfo) DECLSPEC_HIDDEN; MSVCRT_pthreadmbcinfo get_mbcinfo(void) DECLSPEC_HIDDEN; -LCID MSVCRT_locale_to_LCID(const char *locale) DECLSPEC_HIDDEN; +LCID MSVCRT_locale_to_LCID(const char*, unsigned short*) DECLSPEC_HIDDEN;
void __init_global_locale(); extern MSVCRT__locale_t global_locale;
Modified: trunk/reactos/lib/sdk/crt/include/internal/wine/msvcrt.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/interna... ============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/wine/msvcrt.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/wine/msvcrt.h [iso-8859-1] Wed Apr 3 22:46:22 2013 @@ -15,6 +15,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES + * Naming conventions + * - Symbols are prefixed with MSVCRT_ if they conflict + * with libc symbols + * - Internal symbols are usually prefixed by msvcrt_. + * - Exported symbols that are not present in the public + * headers are usually kept the same as the original. + * Other conventions + * - To avoid conflicts with the standard C library, + * no msvcrt headers are included in the implementation. + * - Instead, symbols are duplicated here, prefixed with + * MSVCRT_, as explained above. + * - To avoid inconsistencies, a test for each symbol is + * added into tests/headers.c. Please always add a + * corresponding test when you add a new symbol! */
#ifndef __WINE_MSVCRT_H @@ -89,6 +105,15 @@ #define MSVCRT__WRITE_ABORT_MSG 1 #define MSVCRT__CALL_REPORTFAULT 2
+#define MSVCRT_LC_ALL LC_ALL +#define MSVCRT_LC_COLLATE LC_COLLATE +#define MSVCRT_LC_CTYPE LC_CTYPE +#define MSVCRT_LC_MONETARY LC_MONETARY +#define MSVCRT_LC_NUMERIC LC_NUMERIC +#define MSVCRT_LC_TIME LC_TIME +#define MSVCRT_LC_MIN LC_MIN +#define MSVCRT_LC_MAX LC_MAX + #define MSVCRT__OUT_TO_DEFAULT 0 #define MSVCRT__OUT_TO_STDERR 1 #define MSVCRT__OUT_TO_MSGBOX 2
Modified: trunk/reactos/lib/sdk/crt/locale/locale.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/locale/locale.c... ============================================================================== --- trunk/reactos/lib/sdk/crt/locale/locale.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/locale/locale.c [iso-8859-1] Wed Apr 3 22:46:22 2013 @@ -121,9 +121,12 @@ { int len;
+ if(!cmp[0]) + return 0; + buff[0] = 0; GetLocaleInfoA(lcid, flags|LOCALE_NOUSEROVERRIDE, buff, MAX_ELEM_LEN); - if (!buff[0] || !cmp[0]) + if (!buff[0]) return 0;
/* Partial matches are only allowed on language/country names */ @@ -166,7 +169,7 @@ TRACE("Found country:%s->%s\n", res->search_country, buff); flags |= FOUND_COUNTRY; } - else if (res->match_flags & FOUND_COUNTRY) + else if (!flags && (res->match_flags & FOUND_COUNTRY)) { return CONTINUE_LOOKING; } @@ -179,7 +182,7 @@ flags |= FOUND_CODEPAGE; memcpy(res->found_codepage,res->search_codepage,MAX_ELEM_LEN); } - else if (res->match_flags & FOUND_CODEPAGE) + else if (!flags && (res->match_flags & FOUND_CODEPAGE)) { return CONTINUE_LOOKING; } @@ -202,7 +205,7 @@ extern int atoi(const char *);
/* Internal: Find the LCID for a locale specification */ -LCID MSVCRT_locale_to_LCID(const char *locale) +LCID MSVCRT_locale_to_LCID(const char *locale, unsigned short *codepage) { LCID lcid; locale_search_t search; @@ -247,7 +250,7 @@ lcid = MAKELCID(search.found_lang_id, SORT_DEFAULT);
/* Populate partial locale, translating LCID to locale string elements */ - if (!search.found_codepage[0]) { + if (!(search.match_flags & FOUND_CODEPAGE)) { /* Even if a codepage is not enumerated for a locale * it can be set if valid */ if (search.search_codepage[0]) { @@ -255,10 +258,10 @@ memcpy(search.found_codepage,search.search_codepage,MAX_ELEM_LEN); else { /* Special codepage values: OEM & ANSI */ - if (strcasecmp(search.search_codepage,"OCP")) { + if (!strcasecmp(search.search_codepage,"OCP")) { GetLocaleInfoA(lcid, LOCALE_IDEFAULTCODEPAGE, search.found_codepage, MAX_ELEM_LEN); - } else if (strcasecmp(search.search_codepage,"ACP")) { + } else if (!strcasecmp(search.search_codepage,"ACP")) { GetLocaleInfoA(lcid, LOCALE_IDEFAULTANSICODEPAGE, search.found_codepage, MAX_ELEM_LEN); } else @@ -276,12 +279,15 @@ search.found_codepage, MAX_ELEM_LEN); } } + if (codepage) + *codepage = atoi(search.found_codepage);
return lcid; }
/* INTERNAL: Set lc_handle, lc_id and lc_category in threadlocinfo struct */ -static BOOL update_threadlocinfo_category(LCID lcid, MSVCRT__locale_t loc, int category) +static BOOL update_threadlocinfo_category(LCID lcid, unsigned short cp, + MSVCRT__locale_t loc, int category) { char buf[256], *p; int len; @@ -305,9 +311,7 @@ loc->locinfo->lc_id[category].wLanguage; }
- if(GetLocaleInfoA(lcid, LOCALE_IDEFAULTANSICODEPAGE - |LOCALE_NOUSEROVERRIDE, buf, 256)) - loc->locinfo->lc_id[category].wCodePage = atoi(buf); + loc->locinfo->lc_id[category].wCodePage = cp;
loc->locinfo->lc_handle[category] = lcid;
@@ -318,15 +322,15 @@ len += GetLocaleInfoA(lcid, LOCALE_SENGCOUNTRY |LOCALE_NOUSEROVERRIDE, &buf[len], 256-len); buf[len-1] = '.'; - len += GetLocaleInfoA(lcid, LOCALE_IDEFAULTANSICODEPAGE - |LOCALE_NOUSEROVERRIDE, &buf[len], 256-len); - - loc->locinfo->lc_category[category].locale = malloc(len); - loc->locinfo->lc_category[category].refcount = malloc(sizeof(int)); + sprintf(buf+len, "%d", cp); + len += strlen(buf+len)+1; + + loc->locinfo->lc_category[category].locale = MSVCRT_malloc(len); + loc->locinfo->lc_category[category].refcount = MSVCRT_malloc(sizeof(int)); if(!loc->locinfo->lc_category[category].locale || !loc->locinfo->lc_category[category].refcount) { - free(loc->locinfo->lc_category[category].locale); - free(loc->locinfo->lc_category[category].refcount); + MSVCRT_free(loc->locinfo->lc_category[category].locale); + MSVCRT_free(loc->locinfo->lc_category[category].refcount); loc->locinfo->lc_category[category].locale = NULL; loc->locinfo->lc_category[category].refcount = NULL; return TRUE; @@ -372,22 +376,22 @@
int i;
- for(i=LC_MIN+1; i<LC_MAX; i++) { + for(i=MSVCRT_LC_MIN+1; i<MSVCRT_LC_MAX; i++) { if(strcmp(locinfo->lc_category[i].locale, locinfo->lc_category[i+1].locale)) break; }
- if(i==LC_MAX) - return locinfo->lc_category[LC_COLLATE].locale; + if(i==MSVCRT_LC_MAX) + return locinfo->lc_category[MSVCRT_LC_COLLATE].locale;
sprintf(current_lc_all, "LC_COLLATE=%s;LC_CTYPE=%s;LC_MONETARY=%s;LC_NUMERIC=%s;LC_TIME=%s", - locinfo->lc_category[LC_COLLATE].locale, - locinfo->lc_category[LC_CTYPE].locale, - locinfo->lc_category[LC_MONETARY].locale, - locinfo->lc_category[LC_NUMERIC].locale, - locinfo->lc_category[LC_TIME].locale); + locinfo->lc_category[MSVCRT_LC_COLLATE].locale, + locinfo->lc_category[MSVCRT_LC_CTYPE].locale, + locinfo->lc_category[MSVCRT_LC_MONETARY].locale, + locinfo->lc_category[MSVCRT_LC_NUMERIC].locale, + locinfo->lc_category[MSVCRT_LC_TIME].locale);
return current_lc_all; } @@ -419,7 +423,7 @@ TRACE("\n");
size = cur->str.names.short_mon[0]-cur->str.names.short_wday[0]; - out = malloc(size+1); + out = MSVCRT_malloc(size+1); if(!out) return NULL;
@@ -452,7 +456,7 @@ TRACE("\n");
size = cur->str.names.am-cur->str.names.short_mon[0]; - out = malloc(size+1); + out = MSVCRT_malloc(size+1); if(!out) return NULL;
@@ -479,14 +483,14 @@ void* CDECL _Gettnames(void) { MSVCRT___lc_time_data *ret, *cur = get_locinfo()->lc_time_curr; - int i, size = sizeof(MSVCRT___lc_time_data); + unsigned int i, size = sizeof(MSVCRT___lc_time_data);
TRACE("\n");
for(i=0; i<sizeof(cur->str.str)/sizeof(cur->str.str[0]); i++) size += strlen(cur->str.str[i])+1;
- ret = malloc(size); + ret = MSVCRT_malloc(size); if(!ret) return NULL; memcpy(ret, cur, size); @@ -644,37 +648,37 @@ if(InterlockedDecrement(&locinfo->refcount)) return;
- for(i=LC_MIN+1; i<=LC_MAX; i++) { - free(locinfo->lc_category[i].locale); - free(locinfo->lc_category[i].refcount); + for(i=MSVCRT_LC_MIN+1; i<=MSVCRT_LC_MAX; i++) { + MSVCRT_free(locinfo->lc_category[i].locale); + MSVCRT_free(locinfo->lc_category[i].refcount); }
if(locinfo->lconv) { - free(locinfo->lconv->decimal_point); - free(locinfo->lconv->thousands_sep); - free(locinfo->lconv->grouping); - free(locinfo->lconv->int_curr_symbol); - free(locinfo->lconv->currency_symbol); - free(locinfo->lconv->mon_decimal_point); - free(locinfo->lconv->mon_thousands_sep); - free(locinfo->lconv->mon_grouping); - free(locinfo->lconv->positive_sign); - free(locinfo->lconv->negative_sign); - } - free(locinfo->lconv_intl_refcount); - free(locinfo->lconv_num_refcount); - free(locinfo->lconv_mon_refcount); - free(locinfo->lconv); - - free(locinfo->ctype1_refcount); - free(locinfo->ctype1); - - free(locinfo->pclmap); - free(locinfo->pcumap); - - free(locinfo->lc_time_curr); - - free(locinfo); + MSVCRT_free(locinfo->lconv->decimal_point); + MSVCRT_free(locinfo->lconv->thousands_sep); + MSVCRT_free(locinfo->lconv->grouping); + MSVCRT_free(locinfo->lconv->int_curr_symbol); + MSVCRT_free(locinfo->lconv->currency_symbol); + MSVCRT_free(locinfo->lconv->mon_decimal_point); + MSVCRT_free(locinfo->lconv->mon_thousands_sep); + MSVCRT_free(locinfo->lconv->mon_grouping); + MSVCRT_free(locinfo->lconv->positive_sign); + MSVCRT_free(locinfo->lconv->negative_sign); + } + MSVCRT_free(locinfo->lconv_intl_refcount); + MSVCRT_free(locinfo->lconv_num_refcount); + MSVCRT_free(locinfo->lconv_mon_refcount); + MSVCRT_free(locinfo->lconv); + + MSVCRT_free(locinfo->ctype1_refcount); + MSVCRT_free(locinfo->ctype1); + + MSVCRT_free(locinfo->pclmap); + MSVCRT_free(locinfo->pcumap); + + MSVCRT_free(locinfo->lc_time_curr); + + MSVCRT_free(locinfo); }
/* INTERNAL: frees MSVCRT_pthreadmbcinfo struct */ @@ -686,13 +690,13 @@ if(InterlockedDecrement(&mbcinfo->refcount)) return;
- free(mbcinfo); + MSVCRT_free(mbcinfo); }
/* _get_current_locale - not exported in native msvcrt */ MSVCRT__locale_t CDECL MSVCRT__get_current_locale(void) { - MSVCRT__locale_t loc = malloc(sizeof(MSVCRT__locale_tstruct)); + MSVCRT__locale_t loc = MSVCRT_malloc(sizeof(MSVCRT__locale_tstruct)); if(!loc) return NULL;
@@ -711,7 +715,7 @@
free_locinfo(locale->locinfo); free_mbcinfo(locale->mbcinfo); - free(locale); + MSVCRT_free(locale); }
/* _create_locale - not exported in native msvcrt */ @@ -748,50 +752,61 @@
MSVCRT__locale_t loc; LCID lcid[6] = { 0 }, lcid_tmp; + unsigned short cp[6] = { 0 }; char buf[256]; int i, ret, size;
TRACE("(%d %s)\n", category, locale);
- if(category<LC_MIN || category>LC_MAX || !locale) + if(category<MSVCRT_LC_MIN || category>MSVCRT_LC_MAX || !locale) return NULL;
- if(locale[0]=='C' && !locale[1]) - lcid[0] = CP_ACP; - else if(!locale[0]) + if(locale[0]=='C' && !locale[1]) { + lcid[0] = 0; + cp[0] = CP_ACP; + } else if(!locale[0]) { lcid[0] = GetSystemDefaultLCID(); - else if (locale[0] == 'L' && locale[1] == 'C' && locale[2] == '_') { + GetLocaleInfoA(lcid[0], LOCALE_IDEFAULTANSICODEPAGE + |LOCALE_NOUSEROVERRIDE, buf, sizeof(buf)); + cp[0] = atoi(buf); + + for(i=1; i<6; i++) { + lcid[i] = lcid[0]; + cp[i] = cp[0]; + } + } else if (locale[0] == 'L' && locale[1] == 'C' && locale[2] == '_') { const char *p;
while(1) { locale += 3; /* LC_ */ if(!memcmp(locale, collate, sizeof(collate)-1)) { - i = LC_COLLATE; + i = MSVCRT_LC_COLLATE; locale += sizeof(collate)-1; } else if(!memcmp(locale, ctype, sizeof(ctype)-1)) { - i = LC_CTYPE; + i = MSVCRT_LC_CTYPE; locale += sizeof(ctype)-1; } else if(!memcmp(locale, monetary, sizeof(monetary)-1)) { - i = LC_MONETARY; + i = MSVCRT_LC_MONETARY; locale += sizeof(monetary)-1; } else if(!memcmp(locale, numeric, sizeof(numeric)-1)) { - i = LC_NUMERIC; + i = MSVCRT_LC_NUMERIC; locale += sizeof(numeric)-1; } else if(!memcmp(locale, time, sizeof(time)-1)) { - i = LC_TIME; + i = MSVCRT_LC_TIME; locale += sizeof(time)-1; } else return NULL;
p = strchr(locale, ';'); - if(locale[0]=='C' && (locale[1]==';' || locale[1]=='\0')) + if(locale[0]=='C' && (locale[1]==';' || locale[1]=='\0')) { lcid[i] = 0; - else if(p) { + cp[i] = CP_ACP; + } else if(p) { memcpy(buf, locale, p-locale); buf[p-locale] = '\0'; - lcid[i] = MSVCRT_locale_to_LCID(buf); + lcid[i] = MSVCRT_locale_to_LCID(buf, &cp[i]); } else - lcid[i] = MSVCRT_locale_to_LCID(locale); + lcid[i] = MSVCRT_locale_to_LCID(locale, &cp[i]);
if(lcid[i] == -1) return NULL; @@ -802,30 +817,30 @@ locale = p+1; } } else { - lcid[0] = MSVCRT_locale_to_LCID(locale); + lcid[0] = MSVCRT_locale_to_LCID(locale, &cp[0]); if(lcid[0] == -1) return NULL; - } - - for(i=1; i<6; i++) { - if(!lcid[i]) + + for(i=1; i<6; i++) { lcid[i] = lcid[0]; - } - - loc = malloc(sizeof(MSVCRT__locale_tstruct)); + cp[i] = cp[0]; + } + } + + loc = MSVCRT_malloc(sizeof(MSVCRT__locale_tstruct)); if(!loc) return NULL;
- loc->locinfo = malloc(sizeof(MSVCRT_threadlocinfo)); + loc->locinfo = MSVCRT_malloc(sizeof(MSVCRT_threadlocinfo)); if(!loc->locinfo) { - free(loc); + MSVCRT_free(loc); return NULL; }
- loc->mbcinfo = malloc(sizeof(MSVCRT_threadmbcinfo)); + loc->mbcinfo = MSVCRT_malloc(sizeof(MSVCRT_threadmbcinfo)); if(!loc->mbcinfo) { - free(loc->locinfo); - free(loc); + MSVCRT_free(loc->locinfo); + MSVCRT_free(loc); return NULL; }
@@ -833,49 +848,49 @@ loc->locinfo->refcount = 1; loc->mbcinfo->refcount = 1;
- loc->locinfo->lconv = malloc(sizeof(struct MSVCRT_lconv)); + loc->locinfo->lconv = MSVCRT_malloc(sizeof(struct MSVCRT_lconv)); if(!loc->locinfo->lconv) { MSVCRT__free_locale(loc); return NULL; } memset(loc->locinfo->lconv, 0, sizeof(struct MSVCRT_lconv));
- loc->locinfo->pclmap = malloc(sizeof(char[256])); - loc->locinfo->pcumap = malloc(sizeof(char[256])); + loc->locinfo->pclmap = MSVCRT_malloc(sizeof(char[256])); + loc->locinfo->pcumap = MSVCRT_malloc(sizeof(char[256])); if(!loc->locinfo->pclmap || !loc->locinfo->pcumap) { MSVCRT__free_locale(loc); return NULL; }
- if(lcid[LC_COLLATE] && (category==LC_ALL || category==LC_COLLATE)) { - if(update_threadlocinfo_category(lcid[LC_COLLATE], loc, LC_COLLATE)) { - MSVCRT__free_locale(loc); - return NULL; - } - - loc->locinfo->lc_collate_cp = loc->locinfo->lc_id[LC_COLLATE].wCodePage; + if(lcid[MSVCRT_LC_COLLATE] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_COLLATE)) { + if(update_threadlocinfo_category(lcid[MSVCRT_LC_COLLATE], cp[MSVCRT_LC_COLLATE], loc, MSVCRT_LC_COLLATE)) { + MSVCRT__free_locale(loc); + return NULL; + } + + loc->locinfo->lc_collate_cp = loc->locinfo->lc_id[MSVCRT_LC_COLLATE].wCodePage; } else loc->locinfo->lc_category[LC_COLLATE].locale = _strdup("C");
- if(lcid[LC_CTYPE] && (category==LC_ALL || category==LC_CTYPE)) { - CPINFO cp; + if(lcid[MSVCRT_LC_CTYPE] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_CTYPE)) { + CPINFO cp_info; int j;
- if(update_threadlocinfo_category(lcid[LC_CTYPE], loc, LC_CTYPE)) { - MSVCRT__free_locale(loc); - return NULL; - } - - loc->locinfo->lc_codepage = loc->locinfo->lc_id[LC_CTYPE].wCodePage; + if(update_threadlocinfo_category(lcid[MSVCRT_LC_CTYPE], cp[MSVCRT_LC_CTYPE], loc, MSVCRT_LC_CTYPE)) { + MSVCRT__free_locale(loc); + return NULL; + } + + loc->locinfo->lc_codepage = loc->locinfo->lc_id[MSVCRT_LC_CTYPE].wCodePage; loc->locinfo->lc_clike = 1; - if(!GetCPInfo(loc->locinfo->lc_codepage, &cp)) { - MSVCRT__free_locale(loc); - return NULL; - } - loc->locinfo->mb_cur_max = cp.MaxCharSize; - - loc->locinfo->ctype1_refcount = malloc(sizeof(int)); - loc->locinfo->ctype1 = malloc(sizeof(short[257])); + if(!GetCPInfo(loc->locinfo->lc_codepage, &cp_info)) { + MSVCRT__free_locale(loc); + return NULL; + } + loc->locinfo->mb_cur_max = cp_info.MaxCharSize; + + loc->locinfo->ctype1_refcount = MSVCRT_malloc(sizeof(int)); + loc->locinfo->ctype1 = MSVCRT_malloc(sizeof(short[257])); if(!loc->locinfo->ctype1_refcount || !loc->locinfo->ctype1) { MSVCRT__free_locale(loc); return NULL; @@ -892,12 +907,12 @@ /* builtin GetStringTypeA doesn't set output to 0 on invalid input */ loc->locinfo->ctype1[i] = 0;
- GetStringTypeA(lcid[LC_CTYPE], CT_CTYPE1, buf, + GetStringTypeA(lcid[MSVCRT_LC_CTYPE], CT_CTYPE1, buf, 1, loc->locinfo->ctype1+i); }
- for(i=0; cp.LeadByte[i+1]!=0; i+=2) - for(j=cp.LeadByte[i]; j<=cp.LeadByte[i+1]; j++) + for(i=0; cp_info.LeadByte[i+1]!=0; i+=2) + for(j=cp_info.LeadByte[i]; j<=cp_info.LeadByte[i+1]; j++) loc->locinfo->ctype1[j+1] |= _LEADBYTE; } else { loc->locinfo->lc_clike = 1; @@ -914,10 +929,10 @@
}
- if(lcid[LC_CTYPE]) { - LCMapStringA(lcid[LC_CTYPE], LCMAP_LOWERCASE, buf, 256, + if(lcid[MSVCRT_LC_CTYPE]) { + LCMapStringA(lcid[MSVCRT_LC_CTYPE], LCMAP_LOWERCASE, buf, 256, (char*)loc->locinfo->pclmap, 256); - LCMapStringA(lcid[LC_CTYPE], LCMAP_UPPERCASE, buf, 256, + LCMapStringA(lcid[MSVCRT_LC_CTYPE], LCMAP_UPPERCASE, buf, 256, (char*)loc->locinfo->pcumap, 256); } else { for(i=0; i<256; i++) { @@ -926,16 +941,16 @@ } }
- _setmbcp_l(loc->locinfo->lc_id[LC_CTYPE].wCodePage, lcid[LC_CTYPE], loc->mbcinfo); - - if(lcid[LC_MONETARY] && (category==LC_ALL || category==LC_MONETARY)) { - if(update_threadlocinfo_category(lcid[LC_MONETARY], loc, LC_MONETARY)) { - MSVCRT__free_locale(loc); - return NULL; - } - - loc->locinfo->lconv_intl_refcount = malloc(sizeof(int)); - loc->locinfo->lconv_mon_refcount = malloc(sizeof(int)); + _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], cp[MSVCRT_LC_MONETARY], loc, MSVCRT_LC_MONETARY)) { + MSVCRT__free_locale(loc); + return NULL; + } + + loc->locinfo->lconv_intl_refcount = MSVCRT_malloc(sizeof(int)); + loc->locinfo->lconv_mon_refcount = MSVCRT_malloc(sizeof(int)); if(!loc->locinfo->lconv_intl_refcount || !loc->locinfo->lconv_mon_refcount) { MSVCRT__free_locale(loc); return NULL; @@ -944,47 +959,47 @@ *loc->locinfo->lconv_intl_refcount = 1; *loc->locinfo->lconv_mon_refcount = 1;
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SINTLSYMBOL + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SINTLSYMBOL |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->int_curr_symbol = malloc(i))) + if(i && (loc->locinfo->lconv->int_curr_symbol = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->int_curr_symbol, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SCURRENCY + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SCURRENCY |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->currency_symbol = malloc(i))) + if(i && (loc->locinfo->lconv->currency_symbol = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->currency_symbol, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SMONDECIMALSEP + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONDECIMALSEP |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->mon_decimal_point = malloc(i))) + if(i && (loc->locinfo->lconv->mon_decimal_point = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->mon_decimal_point, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SMONTHOUSANDSEP + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONTHOUSANDSEP |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->mon_thousands_sep = malloc(i))) + if(i && (loc->locinfo->lconv->mon_thousands_sep = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->mon_thousands_sep, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SMONGROUPING + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONGROUPING |LOCALE_NOUSEROVERRIDE, buf, 256); if(i>1) i = i/2 + (buf[i-2]=='0'?0:1); - if(i && (loc->locinfo->lconv->mon_grouping = malloc(i))) { + if(i && (loc->locinfo->lconv->mon_grouping = MSVCRT_malloc(i))) { for(i=0; buf[i+1]==';'; i+=2) loc->locinfo->lconv->mon_grouping[i/2] = buf[i]-'0'; loc->locinfo->lconv->mon_grouping[i/2] = buf[i]-'0'; @@ -995,25 +1010,25 @@ return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SPOSITIVESIGN + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SPOSITIVESIGN |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->positive_sign = malloc(i))) + if(i && (loc->locinfo->lconv->positive_sign = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->positive_sign, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_SNEGATIVESIGN + i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SNEGATIVESIGN |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->negative_sign = malloc(i))) + if(i && (loc->locinfo->lconv->negative_sign = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->negative_sign, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_IINTLCURRDIGITS + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IINTLCURRDIGITS |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->int_frac_digits = atoi(buf); else { @@ -1021,7 +1036,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_ICURRDIGITS + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_ICURRDIGITS |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->frac_digits = atoi(buf); else { @@ -1029,7 +1044,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_IPOSSYMPRECEDES + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSYMPRECEDES |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->p_cs_precedes = atoi(buf); else { @@ -1037,7 +1052,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_IPOSSEPBYSPACE + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSEPBYSPACE |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->p_sep_by_space = atoi(buf); else { @@ -1045,7 +1060,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_INEGSYMPRECEDES + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSYMPRECEDES |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->n_cs_precedes = atoi(buf); else { @@ -1053,7 +1068,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_INEGSEPBYSPACE + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSEPBYSPACE |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->n_sep_by_space = atoi(buf); else { @@ -1061,7 +1076,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_IPOSSIGNPOSN + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSIGNPOSN |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->p_sign_posn = atoi(buf); else { @@ -1069,7 +1084,7 @@ return NULL; }
- if(GetLocaleInfoA(lcid[LC_MONETARY], LOCALE_INEGSIGNPOSN + if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSIGNPOSN |LOCALE_NOUSEROVERRIDE, buf, 256)) loc->locinfo->lconv->n_sign_posn = atoi(buf); else { @@ -1077,13 +1092,13 @@ return NULL; } } else { - loc->locinfo->lconv->int_curr_symbol = malloc(sizeof(char)); - loc->locinfo->lconv->currency_symbol = malloc(sizeof(char)); - loc->locinfo->lconv->mon_decimal_point = malloc(sizeof(char)); - loc->locinfo->lconv->mon_thousands_sep = malloc(sizeof(char)); - loc->locinfo->lconv->mon_grouping = malloc(sizeof(char)); - loc->locinfo->lconv->positive_sign = malloc(sizeof(char)); - loc->locinfo->lconv->negative_sign = malloc(sizeof(char)); + loc->locinfo->lconv->int_curr_symbol = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->currency_symbol = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->mon_decimal_point = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->mon_thousands_sep = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->mon_grouping = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->positive_sign = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->negative_sign = MSVCRT_malloc(sizeof(char));
if(!loc->locinfo->lconv->int_curr_symbol || !loc->locinfo->lconv->currency_symbol || !loc->locinfo->lconv->mon_decimal_point || !loc->locinfo->lconv->mon_thousands_sep @@ -1112,15 +1127,15 @@ loc->locinfo->lc_category[LC_MONETARY].locale = _strdup("C"); }
- if(lcid[LC_NUMERIC] && (category==LC_ALL || category==LC_NUMERIC)) { - if(update_threadlocinfo_category(lcid[LC_NUMERIC], loc, LC_NUMERIC)) { + if(lcid[MSVCRT_LC_NUMERIC] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_NUMERIC)) { + if(update_threadlocinfo_category(lcid[MSVCRT_LC_NUMERIC], cp[MSVCRT_LC_NUMERIC], loc, MSVCRT_LC_NUMERIC)) { MSVCRT__free_locale(loc); return NULL; }
if(!loc->locinfo->lconv_intl_refcount) - loc->locinfo->lconv_intl_refcount = malloc(sizeof(int)); - loc->locinfo->lconv_num_refcount = malloc(sizeof(int)); + loc->locinfo->lconv_intl_refcount = MSVCRT_malloc(sizeof(int)); + loc->locinfo->lconv_num_refcount = MSVCRT_malloc(sizeof(int)); if(!loc->locinfo->lconv_intl_refcount || !loc->locinfo->lconv_num_refcount) { MSVCRT__free_locale(loc); return NULL; @@ -1129,29 +1144,29 @@ *loc->locinfo->lconv_intl_refcount = 1; *loc->locinfo->lconv_num_refcount = 1;
- i = GetLocaleInfoA(lcid[LC_NUMERIC], LOCALE_SDECIMAL + i = GetLocaleInfoA(lcid[MSVCRT_LC_NUMERIC], LOCALE_SDECIMAL |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->decimal_point = malloc(i))) + if(i && (loc->locinfo->lconv->decimal_point = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->decimal_point, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_NUMERIC], LOCALE_STHOUSAND + i = GetLocaleInfoA(lcid[MSVCRT_LC_NUMERIC], LOCALE_STHOUSAND |LOCALE_NOUSEROVERRIDE, buf, 256); - if(i && (loc->locinfo->lconv->thousands_sep = malloc(i))) + if(i && (loc->locinfo->lconv->thousands_sep = MSVCRT_malloc(i))) memcpy(loc->locinfo->lconv->thousands_sep, buf, i); else { MSVCRT__free_locale(loc); return NULL; }
- i = GetLocaleInfoA(lcid[LC_NUMERIC], LOCALE_SGROUPING + i = GetLocaleInfoA(lcid[MSVCRT_LC_NUMERIC], LOCALE_SGROUPING |LOCALE_NOUSEROVERRIDE, buf, 256); if(i>1) i = i/2 + (buf[i-2]=='0'?0:1); - if(i && (loc->locinfo->lconv->grouping = malloc(i))) { + if(i && (loc->locinfo->lconv->grouping = MSVCRT_malloc(i))) { for(i=0; buf[i+1]==';'; i+=2) loc->locinfo->lconv->grouping[i/2] = buf[i]-'0'; loc->locinfo->lconv->grouping[i/2] = buf[i]-'0'; @@ -1162,9 +1177,9 @@ return NULL; } } else { - loc->locinfo->lconv->decimal_point = malloc(sizeof(char[2])); - loc->locinfo->lconv->thousands_sep = malloc(sizeof(char)); - loc->locinfo->lconv->grouping = malloc(sizeof(char)); + loc->locinfo->lconv->decimal_point = MSVCRT_malloc(sizeof(char[2])); + loc->locinfo->lconv->thousands_sep = MSVCRT_malloc(sizeof(char)); + loc->locinfo->lconv->grouping = MSVCRT_malloc(sizeof(char)); if(!loc->locinfo->lconv->decimal_point || !loc->locinfo->lconv->thousands_sep || !loc->locinfo->lconv->grouping) { MSVCRT__free_locale(loc); @@ -1179,8 +1194,8 @@ loc->locinfo->lc_category[LC_NUMERIC].locale = _strdup("C"); }
- if(lcid[LC_TIME] && (category==LC_ALL || category==LC_TIME)) { - if(update_threadlocinfo_category(lcid[LC_TIME], loc, LC_TIME)) { + if(lcid[MSVCRT_LC_TIME] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_TIME)) { + if(update_threadlocinfo_category(lcid[MSVCRT_LC_TIME], cp[MSVCRT_LC_TIME], loc, MSVCRT_LC_TIME)) { MSVCRT__free_locale(loc); return NULL; } @@ -1188,11 +1203,11 @@ loc->locinfo->lc_category[LC_TIME].locale = _strdup("C");
size = sizeof(MSVCRT___lc_time_data); - lcid_tmp = lcid[LC_TIME] ? lcid[LC_TIME] : MAKELCID(LANG_ENGLISH, SORT_DEFAULT); + lcid_tmp = lcid[MSVCRT_LC_TIME] ? lcid[MSVCRT_LC_TIME] : MAKELCID(LANG_ENGLISH, SORT_DEFAULT); for(i=0; i<sizeof(time_data)/sizeof(time_data[0]); i++) { - if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { size += sizeof(cloc_short_date) + sizeof(cloc_short_dateW); - }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { size += sizeof(cloc_long_date) + sizeof(cloc_long_dateW); }else { ret = GetLocaleInfoA(lcid_tmp, time_data[i] @@ -1213,7 +1228,7 @@ } }
- loc->locinfo->lc_time_curr = malloc(size); + loc->locinfo->lc_time_curr = MSVCRT_malloc(size); if(!loc->locinfo->lc_time_curr) { MSVCRT__free_locale(loc); return NULL; @@ -1222,13 +1237,13 @@ ret = 0; for(i=0; i<sizeof(time_data)/sizeof(time_data[0]); i++) { loc->locinfo->lc_time_curr->str.str[i] = &loc->locinfo->lc_time_curr->data[ret]; - if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_short_date, sizeof(cloc_short_date)); ret += sizeof(cloc_short_date); - }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_long_date, sizeof(cloc_long_date)); ret += sizeof(cloc_long_date); - }else if(time_data[i]==LOCALE_STIMEFORMAT && !lcid[LC_TIME]) { + }else if(time_data[i]==LOCALE_STIMEFORMAT && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_time, sizeof(cloc_time)); ret += sizeof(cloc_time); }else { @@ -1238,13 +1253,13 @@ } for(i=0; i<sizeof(time_data)/sizeof(time_data[0]); i++) { loc->locinfo->lc_time_curr->wstr[i] = (wchar_t*)&loc->locinfo->lc_time_curr->data[ret]; - if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_short_dateW, sizeof(cloc_short_dateW)); ret += sizeof(cloc_short_dateW); - }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[LC_TIME]) { + }else if(time_data[i]==LOCALE_SSHORTDATE && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_long_dateW, sizeof(cloc_long_dateW)); ret += sizeof(cloc_long_dateW); - }else if(time_data[i]==LOCALE_STIMEFORMAT && !lcid[LC_TIME]) { + }else if(time_data[i]==LOCALE_STIMEFORMAT && !lcid[MSVCRT_LC_TIME]) { memcpy(&loc->locinfo->lc_time_curr->data[ret], cloc_timeW, sizeof(cloc_timeW)); ret += sizeof(cloc_timeW); }else { @@ -1252,7 +1267,7 @@ (wchar_t*)&loc->locinfo->lc_time_curr->data[ret], size-ret)*sizeof(wchar_t); } } - loc->locinfo->lc_time_curr->lcid = lcid[LC_TIME]; + loc->locinfo->lc_time_curr->lcid = lcid[MSVCRT_LC_TIME];
return loc; } @@ -1265,11 +1280,11 @@ MSVCRT__locale_t loc; MSVCRT_pthreadlocinfo locinfo = get_locinfo();
- if(category<LC_MIN || category>LC_MAX) + if(category<MSVCRT_LC_MIN || category>MSVCRT_LC_MAX) return NULL;
if(!locale) { - if(category == LC_ALL) + if(category == MSVCRT_LC_ALL) return construct_lc_all(locinfo);
return locinfo->lc_category[category].locale; @@ -1284,26 +1299,26 @@ LOCK_LOCALE;
switch(category) { - case LC_ALL: - case LC_COLLATE: + case MSVCRT_LC_ALL: + case MSVCRT_LC_COLLATE: locinfo->lc_collate_cp = loc->locinfo->lc_collate_cp; - locinfo->lc_handle[LC_COLLATE] = - loc->locinfo->lc_handle[LC_COLLATE]; - swap_pointers((void**)&locinfo->lc_category[LC_COLLATE].locale, - (void**)&loc->locinfo->lc_category[LC_COLLATE].locale); - swap_pointers((void**)&locinfo->lc_category[LC_COLLATE].refcount, - (void**)&loc->locinfo->lc_category[LC_COLLATE].refcount); - - if(category != LC_ALL) + locinfo->lc_handle[MSVCRT_LC_COLLATE] = + loc->locinfo->lc_handle[MSVCRT_LC_COLLATE]; + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_COLLATE].locale, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_COLLATE].locale); + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_COLLATE].refcount, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_COLLATE].refcount); + + if(category != MSVCRT_LC_ALL) break; /* fall through */ - case LC_CTYPE: - locinfo->lc_handle[LC_CTYPE] = - loc->locinfo->lc_handle[LC_CTYPE]; - swap_pointers((void**)&locinfo->lc_category[LC_CTYPE].locale, - (void**)&loc->locinfo->lc_category[LC_CTYPE].locale); - swap_pointers((void**)&locinfo->lc_category[LC_CTYPE].refcount, - (void**)&loc->locinfo->lc_category[LC_CTYPE].refcount); + case MSVCRT_LC_CTYPE: + locinfo->lc_handle[MSVCRT_LC_CTYPE] = + loc->locinfo->lc_handle[MSVCRT_LC_CTYPE]; + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_CTYPE].locale, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_CTYPE].locale); + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_CTYPE].refcount, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_CTYPE].refcount);
locinfo->lc_codepage = loc->locinfo->lc_codepage; locinfo->lc_clike = loc->locinfo->lc_clike; @@ -1316,16 +1331,16 @@ swap_pointers((void**)&locinfo->pclmap, (void**)&loc->locinfo->pclmap); swap_pointers((void**)&locinfo->pcumap, (void**)&loc->locinfo->pcumap);
- if(category != LC_ALL) + if(category != MSVCRT_LC_ALL) break; /* fall through */ - case LC_MONETARY: - locinfo->lc_handle[LC_MONETARY] = - loc->locinfo->lc_handle[LC_MONETARY]; - swap_pointers((void**)&locinfo->lc_category[LC_MONETARY].locale, - (void**)&loc->locinfo->lc_category[LC_MONETARY].locale); - swap_pointers((void**)&locinfo->lc_category[LC_MONETARY].refcount, - (void**)&loc->locinfo->lc_category[LC_MONETARY].refcount); + case MSVCRT_LC_MONETARY: + locinfo->lc_handle[MSVCRT_LC_MONETARY] = + loc->locinfo->lc_handle[MSVCRT_LC_MONETARY]; + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_MONETARY].locale, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_MONETARY].locale); + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_MONETARY].refcount, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_MONETARY].refcount);
swap_pointers((void**)&locinfo->lconv->int_curr_symbol, (void**)&loc->locinfo->lconv->int_curr_symbol); @@ -1350,16 +1365,16 @@ locinfo->lconv->p_sign_posn = loc->locinfo->lconv->p_sign_posn; locinfo->lconv->n_sign_posn = loc->locinfo->lconv->n_sign_posn;
- if(category != LC_ALL) + if(category != MSVCRT_LC_ALL) break; /* fall through */ - case LC_NUMERIC: - locinfo->lc_handle[LC_NUMERIC] = - loc->locinfo->lc_handle[LC_NUMERIC]; - swap_pointers((void**)&locinfo->lc_category[LC_NUMERIC].locale, - (void**)&loc->locinfo->lc_category[LC_NUMERIC].locale); - swap_pointers((void**)&locinfo->lc_category[LC_NUMERIC].refcount, - (void**)&loc->locinfo->lc_category[LC_NUMERIC].refcount); + case MSVCRT_LC_NUMERIC: + locinfo->lc_handle[MSVCRT_LC_NUMERIC] = + loc->locinfo->lc_handle[MSVCRT_LC_NUMERIC]; + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_NUMERIC].locale, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_NUMERIC].locale); + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_NUMERIC].refcount, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_NUMERIC].refcount);
swap_pointers((void**)&locinfo->lconv->decimal_point, (void**)&loc->locinfo->lconv->decimal_point); @@ -1368,20 +1383,20 @@ swap_pointers((void**)&locinfo->lconv->grouping, (void**)&loc->locinfo->lconv->grouping);
- if(category != LC_ALL) + if(category != MSVCRT_LC_ALL) break; /* fall through */ - case LC_TIME: - locinfo->lc_handle[LC_TIME] = - loc->locinfo->lc_handle[LC_TIME]; - swap_pointers((void**)&locinfo->lc_category[LC_TIME].locale, - (void**)&loc->locinfo->lc_category[LC_TIME].locale); - swap_pointers((void**)&locinfo->lc_category[LC_TIME].refcount, - (void**)&loc->locinfo->lc_category[LC_TIME].refcount); + case MSVCRT_LC_TIME: + locinfo->lc_handle[MSVCRT_LC_TIME] = + loc->locinfo->lc_handle[MSVCRT_LC_TIME]; + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_TIME].locale, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_TIME].locale); + swap_pointers((void**)&locinfo->lc_category[MSVCRT_LC_TIME].refcount, + (void**)&loc->locinfo->lc_category[MSVCRT_LC_TIME].refcount); swap_pointers((void**)&locinfo->lc_time_curr, (void**)&loc->locinfo->lc_time_curr);
- if(category != LC_ALL) + if(category != MSVCRT_LC_ALL) break; }
@@ -1399,7 +1414,7 @@ MSVCRT___lc_handle[i] = MSVCRT_locale->locinfo->lc_handle[i]; }
- if(category == LC_ALL) + if(category == MSVCRT_LC_ALL) return construct_lc_all(locinfo);
_Analysis_assume_(category <= 5); @@ -1428,7 +1443,7 @@ data->locinfo = locale->locinfo; data->mbcinfo = locale->mbcinfo; data->have_locale = TRUE; - free(locale); + MSVCRT_free(locale); }
return ret;
Modified: trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/_setmb... ============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c [iso-8859-1] Wed Apr 3 22:46:22 2013 @@ -89,7 +89,7 @@
if(lcid == -1) { sprintf(bufA, format, newcp); - mbcinfo->mblcid = MSVCRT_locale_to_LCID(bufA); + mbcinfo->mblcid = MSVCRT_locale_to_LCID(bufA, NULL); } else { mbcinfo->mblcid = lcid; }