[PATCH 2/5] msvcrt: Refactor failure code for create_locinfo.
Jeff Smith
whydoubt at gmail.com
Mon Dec 2 11:52:01 CST 2019
Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
dlls/msvcrt/locale.c | 328 +++++++++++++++----------------------------
1 file changed, 112 insertions(+), 216 deletions(-)
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c
index fc41f05da2..f472432144 100644
--- a/dlls/msvcrt/locale.c
+++ b/dlls/msvcrt/locale.c
@@ -1048,25 +1048,19 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->refcount = 1;
locinfo->lconv = MSVCRT_malloc(sizeof(struct MSVCRT_lconv));
- if(!locinfo->lconv) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->lconv)
+ goto failed;
memset(locinfo->lconv, 0, sizeof(struct MSVCRT_lconv));
locinfo->pclmap = MSVCRT_malloc(sizeof(char[256]));
locinfo->pcumap = MSVCRT_malloc(sizeof(char[256]));
- if(!locinfo->pclmap || !locinfo->pcumap) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->pclmap || !locinfo->pcumap)
+ goto failed;
if(locale_name[MSVCRT_LC_COLLATE] &&
!init_category_name(locale_name[MSVCRT_LC_COLLATE],
- locale_len[MSVCRT_LC_COLLATE], locinfo, MSVCRT_LC_COLLATE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ locale_len[MSVCRT_LC_COLLATE], locinfo, MSVCRT_LC_COLLATE))
+ goto failed;
if(!category_needs_update(MSVCRT_LC_COLLATE, category, old_locinfo,
lcid[MSVCRT_LC_COLLATE], cp[MSVCRT_LC_COLLATE])) {
@@ -1074,26 +1068,20 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lc_id[MSVCRT_LC_COLLATE].wCodePage = old_locinfo->lc_id[MSVCRT_LC_COLLATE].wCodePage;
} else 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], locinfo, MSVCRT_LC_COLLATE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ cp[MSVCRT_LC_COLLATE], locinfo, MSVCRT_LC_COLLATE))
+ goto failed;
locinfo->lc_collate_cp = locinfo->lc_id[MSVCRT_LC_COLLATE].wCodePage;
- if(!set_lc_locale_name(locinfo, MSVCRT_LC_COLLATE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!set_lc_locale_name(locinfo, MSVCRT_LC_COLLATE))
+ goto failed;
} else
locinfo->lc_category[MSVCRT_LC_COLLATE].locale = MSVCRT__strdup("C");
if(locale_name[MSVCRT_LC_CTYPE] &&
!init_category_name(locale_name[MSVCRT_LC_CTYPE],
- locale_len[MSVCRT_LC_CTYPE], locinfo, MSVCRT_LC_CTYPE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ locale_len[MSVCRT_LC_CTYPE], locinfo, MSVCRT_LC_CTYPE))
+ goto failed;
if(!category_needs_update(MSVCRT_LC_CTYPE, category, old_locinfo,
lcid[MSVCRT_LC_CTYPE], cp[MSVCRT_LC_CTYPE])) {
@@ -1104,25 +1092,19 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
int j;
if(!update_threadlocinfo_category(lcid[MSVCRT_LC_CTYPE],
- cp[MSVCRT_LC_CTYPE], locinfo, MSVCRT_LC_CTYPE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ cp[MSVCRT_LC_CTYPE], locinfo, MSVCRT_LC_CTYPE))
+ goto failed;
locinfo->lc_codepage = locinfo->lc_id[MSVCRT_LC_CTYPE].wCodePage;
locinfo->lc_clike = 1;
- if(!GetCPInfo(locinfo->lc_codepage, &cp_info)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!GetCPInfo(locinfo->lc_codepage, &cp_info))
+ goto failed;
locinfo->mb_cur_max = cp_info.MaxCharSize;
locinfo->ctype1_refcount = MSVCRT_malloc(sizeof(int));
locinfo->ctype1 = MSVCRT_malloc(sizeof(short[257]));
- if(!locinfo->ctype1_refcount || !locinfo->ctype1) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->ctype1_refcount || !locinfo->ctype1)
+ goto failed;
*locinfo->ctype1_refcount = 1;
locinfo->ctype1[0] = 0;
@@ -1143,10 +1125,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
for(j=cp_info.LeadByte[i]; j<=cp_info.LeadByte[i+1]; j++)
locinfo->ctype1[j+1] |= MSVCRT__LEADBYTE;
- if(!set_lc_locale_name(locinfo, MSVCRT_LC_CTYPE)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!set_lc_locale_name(locinfo, MSVCRT_LC_CTYPE))
+ goto failed;
for(i=0; i<256; i++) {
if(locinfo->pctype[i] & MSVCRT__LEADBYTE)
@@ -1180,10 +1160,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
if(locale_name[MSVCRT_LC_MONETARY] &&
!init_category_name(locale_name[MSVCRT_LC_MONETARY],
- locale_len[MSVCRT_LC_MONETARY], locinfo, MSVCRT_LC_MONETARY)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ locale_len[MSVCRT_LC_MONETARY], locinfo, MSVCRT_LC_MONETARY))
+ goto failed;
if(!category_needs_update(MSVCRT_LC_MONETARY, category, old_locinfo,
lcid[MSVCRT_LC_MONETARY], cp[MSVCRT_LC_MONETARY])) {
@@ -1191,17 +1169,13 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lc_id[MSVCRT_LC_MONETARY].wCodePage = old_locinfo->lc_id[MSVCRT_LC_MONETARY].wCodePage;
} else 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], locinfo, MSVCRT_LC_MONETARY)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ cp[MSVCRT_LC_MONETARY], locinfo, MSVCRT_LC_MONETARY))
+ goto failed;
locinfo->lconv_intl_refcount = MSVCRT_malloc(sizeof(int));
locinfo->lconv_mon_refcount = MSVCRT_malloc(sizeof(int));
- if(!locinfo->lconv_intl_refcount || !locinfo->lconv_mon_refcount) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->lconv_intl_refcount || !locinfo->lconv_mon_refcount)
+ goto failed;
*locinfo->lconv_intl_refcount = 1;
*locinfo->lconv_mon_refcount = 1;
@@ -1210,37 +1184,29 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->int_curr_symbol = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->int_curr_symbol, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SCURRENCY
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->currency_symbol = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->currency_symbol, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONDECIMALSEP
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->mon_decimal_point = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->mon_decimal_point, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONTHOUSANDSEP
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->mon_thousands_sep = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->mon_thousands_sep, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONGROUPING
|LOCALE_NOUSEROVERRIDE, buf, 256);
@@ -1252,153 +1218,117 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lconv->mon_grouping[i/2] = buf[i]-'0';
if(buf[i] != '0')
locinfo->lconv->mon_grouping[i/2+1] = 127;
- } else {
- free_locinfo(locinfo);
- return NULL;
- }
+ } else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SPOSITIVESIGN
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->positive_sign = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->positive_sign, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_SNEGATIVESIGN
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->negative_sign = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->negative_sign, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IINTLCURRDIGITS
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->int_frac_digits = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_ICURRDIGITS
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->frac_digits = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSYMPRECEDES
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->p_cs_precedes = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSEPBYSPACE
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->p_sep_by_space = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSYMPRECEDES
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->n_cs_precedes = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSEPBYSPACE
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->n_sep_by_space = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSIGNPOSN
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->p_sign_posn = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSIGNPOSN
|LOCALE_NOUSEROVERRIDE, buf, 256))
locinfo->lconv->n_sign_posn = atoi(buf);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
#if _MSVCR_VER >= 100
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SINTLSYMBOL
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_int_curr_symbol = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_int_curr_symbol, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SCURRENCY
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_currency_symbol = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_currency_symbol, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONDECIMALSEP
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_mon_decimal_point = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_mon_decimal_point, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SMONTHOUSANDSEP
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_mon_thousands_sep = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_mon_thousands_sep, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SPOSITIVESIGN
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_positive_sign = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_positive_sign, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_SNEGATIVESIGN
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_negative_sign = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_negative_sign, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
#endif
- if(!set_lc_locale_name(locinfo, MSVCRT_LC_MONETARY)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!set_lc_locale_name(locinfo, MSVCRT_LC_MONETARY))
+ goto failed;
} else {
locinfo->lconv->int_curr_symbol = MSVCRT_malloc(sizeof(char));
locinfo->lconv->currency_symbol = MSVCRT_malloc(sizeof(char));
@@ -1411,10 +1341,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
if(!locinfo->lconv->int_curr_symbol || !locinfo->lconv->currency_symbol
|| !locinfo->lconv->mon_decimal_point || !locinfo->lconv->mon_thousands_sep
|| !locinfo->lconv->mon_grouping || !locinfo->lconv->positive_sign
- || !locinfo->lconv->negative_sign) {
- free_locinfo(locinfo);
- return NULL;
- }
+ || !locinfo->lconv->negative_sign)
+ goto failed;
locinfo->lconv->int_curr_symbol[0] = '\0';
locinfo->lconv->currency_symbol[0] = '\0';
@@ -1442,10 +1370,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
if(!locinfo->lconv->_W_int_curr_symbol || !locinfo->lconv->_W_currency_symbol
|| !locinfo->lconv->_W_mon_decimal_point || !locinfo->lconv->_W_mon_thousands_sep
- || !locinfo->lconv->positive_sign || !locinfo->lconv->negative_sign) {
- free_locinfo(locinfo);
- return NULL;
- }
+ || !locinfo->lconv->positive_sign || !locinfo->lconv->negative_sign)
+ goto failed;
locinfo->lconv->_W_int_curr_symbol[0] = '\0';
locinfo->lconv->_W_currency_symbol[0] = '\0';
@@ -1460,10 +1386,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
if(locale_name[MSVCRT_LC_NUMERIC] &&
!init_category_name(locale_name[MSVCRT_LC_NUMERIC],
- locale_len[MSVCRT_LC_NUMERIC], locinfo, MSVCRT_LC_NUMERIC)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ locale_len[MSVCRT_LC_NUMERIC], locinfo, MSVCRT_LC_NUMERIC))
+ goto failed;
if(!category_needs_update(MSVCRT_LC_NUMERIC, category, old_locinfo,
lcid[MSVCRT_LC_NUMERIC], cp[MSVCRT_LC_NUMERIC])) {
@@ -1471,18 +1395,14 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lc_id[MSVCRT_LC_NUMERIC].wCodePage = old_locinfo->lc_id[MSVCRT_LC_NUMERIC].wCodePage;
} else 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], locinfo, MSVCRT_LC_NUMERIC)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ cp[MSVCRT_LC_NUMERIC], locinfo, MSVCRT_LC_NUMERIC))
+ goto failed;
if(!locinfo->lconv_intl_refcount)
locinfo->lconv_intl_refcount = MSVCRT_malloc(sizeof(int));
locinfo->lconv_num_refcount = MSVCRT_malloc(sizeof(int));
- if(!locinfo->lconv_intl_refcount || !locinfo->lconv_num_refcount) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->lconv_intl_refcount || !locinfo->lconv_num_refcount)
+ goto failed;
*locinfo->lconv_intl_refcount = 1;
*locinfo->lconv_num_refcount = 1;
@@ -1491,19 +1411,15 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->decimal_point = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->decimal_point, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_NUMERIC], LOCALE_STHOUSAND
|LOCALE_NOUSEROVERRIDE, buf, 256);
if(i && (locinfo->lconv->thousands_sep = MSVCRT_malloc(i)))
memcpy(locinfo->lconv->thousands_sep, buf, i);
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoA(lcid[MSVCRT_LC_NUMERIC], LOCALE_SGROUPING
|LOCALE_NOUSEROVERRIDE, buf, 256);
@@ -1515,44 +1431,34 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lconv->grouping[i/2] = buf[i]-'0';
if(buf[i] != '0')
locinfo->lconv->grouping[i/2+1] = 127;
- } else {
- free_locinfo(locinfo);
- return NULL;
- }
+ } else
+ goto failed;
#if _MSVCR_VER >= 100
i = GetLocaleInfoW(lcid[MSVCRT_LC_NUMERIC], LOCALE_SDECIMAL
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_decimal_point = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_decimal_point, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
i = GetLocaleInfoW(lcid[MSVCRT_LC_NUMERIC], LOCALE_STHOUSAND
|LOCALE_NOUSEROVERRIDE, wbuf, 256);
if(i && (locinfo->lconv->_W_thousands_sep = MSVCRT_malloc(i * sizeof(MSVCRT_wchar_t))))
memcpy(locinfo->lconv->_W_thousands_sep, wbuf, i * sizeof(MSVCRT_wchar_t));
- else {
- free_locinfo(locinfo);
- return NULL;
- }
+ else
+ goto failed;
#endif
- if(!set_lc_locale_name(locinfo, MSVCRT_LC_NUMERIC)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!set_lc_locale_name(locinfo, MSVCRT_LC_NUMERIC))
+ goto failed;
} else {
locinfo->lconv->decimal_point = MSVCRT_malloc(sizeof(char[2]));
locinfo->lconv->thousands_sep = MSVCRT_malloc(sizeof(char));
locinfo->lconv->grouping = MSVCRT_malloc(sizeof(char));
if(!locinfo->lconv->decimal_point || !locinfo->lconv->thousands_sep
- || !locinfo->lconv->grouping) {
- free_locinfo(locinfo);
- return NULL;
- }
+ || !locinfo->lconv->grouping)
+ goto failed;
locinfo->lconv->decimal_point[0] = '.';
locinfo->lconv->decimal_point[1] = '\0';
@@ -1563,10 +1469,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
locinfo->lconv->_W_decimal_point = MSVCRT_malloc(sizeof(MSVCRT_wchar_t[2]));
locinfo->lconv->_W_thousands_sep = MSVCRT_malloc(sizeof(MSVCRT_wchar_t));
- if(!locinfo->lconv->_W_decimal_point || !locinfo->lconv->_W_thousands_sep) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->lconv->_W_decimal_point || !locinfo->lconv->_W_thousands_sep)
+ goto failed;
locinfo->lconv->_W_decimal_point[0] = '.';
locinfo->lconv->_W_decimal_point[1] = '\0';
@@ -1578,10 +1482,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
if(locale_name[MSVCRT_LC_TIME] &&
!init_category_name(locale_name[MSVCRT_LC_TIME],
- locale_len[MSVCRT_LC_TIME], locinfo, MSVCRT_LC_TIME)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ locale_len[MSVCRT_LC_TIME], locinfo, MSVCRT_LC_TIME))
+ goto failed;
if(!category_needs_update(MSVCRT_LC_TIME, category, old_locinfo,
lcid[MSVCRT_LC_TIME], cp[MSVCRT_LC_TIME])) {
@@ -1592,15 +1494,11 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
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], locinfo, MSVCRT_LC_TIME)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ cp[MSVCRT_LC_TIME], locinfo, MSVCRT_LC_TIME))
+ goto failed;
- if(!set_lc_locale_name(locinfo, MSVCRT_LC_TIME)) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!set_lc_locale_name(locinfo, MSVCRT_LC_TIME))
+ goto failed;
} else
locinfo->lc_category[MSVCRT_LC_TIME].locale = MSVCRT__strdup("C");
@@ -1613,17 +1511,13 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
size += sizeof(cloc_long_date) + sizeof(cloc_long_dateW);
}else {
ret = GetLocaleInfoA(lcid_tmp, time_data[i]|flags, NULL, 0);
- if(!ret) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!ret)
+ goto failed;
size += ret;
ret = GetLocaleInfoW(lcid_tmp, time_data[i]|flags, NULL, 0);
- if(!ret) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!ret)
+ goto failed;
size += ret*sizeof(MSVCRT_wchar_t);
}
}
@@ -1632,10 +1526,8 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
#endif
locinfo->lc_time_curr = MSVCRT_malloc(size);
- if(!locinfo->lc_time_curr) {
- free_locinfo(locinfo);
- return NULL;
- }
+ if(!locinfo->lc_time_curr)
+ goto failed;
ret = 0;
for(i=0; i<ARRAY_SIZE(time_data); i++) {
@@ -1680,6 +1572,10 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
}
return locinfo;
+
+failed:
+ free_locinfo(locinfo);
+ return NULL;
}
/*********************************************************************
--
2.23.0
More information about the wine-devel
mailing list