Commit 464ece64 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

kernel32/lcformat: Get rid of back jumps on errors.

parent 400fb552
...@@ -756,7 +756,6 @@ static INT NLS_GetDateTimeFormatA(LCID lcid, DWORD dwFlags, ...@@ -756,7 +756,6 @@ static INT NLS_GetDateTimeFormatA(LCID lcid, DWORD dwFlags,
if (NLS_IsUnicodeOnlyLcid(lcid)) if (NLS_IsUnicodeOnlyLcid(lcid))
{ {
GetDateTimeFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return 0; return 0;
} }
...@@ -765,7 +764,11 @@ GetDateTimeFormatA_InvalidParameter: ...@@ -765,7 +764,11 @@ GetDateTimeFormatA_InvalidParameter:
{ {
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags); const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node) if (!node)
goto GetDateTimeFormatA_InvalidParameter; {
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
cp = node->dwCodePage; cp = node->dwCodePage;
} }
...@@ -967,7 +970,6 @@ INT WINAPI GetNumberFormatA(LCID lcid, DWORD dwFlags, ...@@ -967,7 +970,6 @@ INT WINAPI GetNumberFormatA(LCID lcid, DWORD dwFlags,
if (NLS_IsUnicodeOnlyLcid(lcid)) if (NLS_IsUnicodeOnlyLcid(lcid))
{ {
GetNumberFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return 0; return 0;
} }
...@@ -976,7 +978,11 @@ GetNumberFormatA_InvalidParameter: ...@@ -976,7 +978,11 @@ GetNumberFormatA_InvalidParameter:
{ {
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags); const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node) if (!node)
goto GetNumberFormatA_InvalidParameter; {
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
cp = node->dwCodePage; cp = node->dwCodePage;
} }
...@@ -1048,9 +1054,7 @@ INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, ...@@ -1048,9 +1054,7 @@ INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags,
!IsValidLocale(lcid, 0) || !IsValidLocale(lcid, 0) ||
(lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep))) (lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep)))
{ {
GetNumberFormatW_Error: goto error;
SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS : ERROR_INVALID_PARAMETER);
return 0;
} }
if (!lpFormat) if (!lpFormat)
...@@ -1058,7 +1062,7 @@ GetNumberFormatW_Error: ...@@ -1058,7 +1062,7 @@ GetNumberFormatW_Error:
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags); const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node) if (!node)
goto GetNumberFormatW_Error; goto error;
lpFormat = &node->fmt; lpFormat = &node->fmt;
lpszNegStart = lpszNeg = GetNegative(node); lpszNegStart = lpszNeg = GetNegative(node);
} }
...@@ -1089,23 +1093,23 @@ GetNumberFormatW_Error: ...@@ -1089,23 +1093,23 @@ GetNumberFormatW_Error:
else if (*szSrc == '-') else if (*szSrc == '-')
{ {
if (dwState) if (dwState)
goto GetNumberFormatW_Error; /* '-' not first character */ goto error; /* '-' not first character */
dwState |= NF_ISNEGATIVE; dwState |= NF_ISNEGATIVE;
} }
else if (*szSrc == '.') else if (*szSrc == '.')
{ {
if (dwState & NF_ISREAL) if (dwState & NF_ISREAL)
goto GetNumberFormatW_Error; /* More than one '.' */ goto error; /* More than one '.' */
dwState |= NF_ISREAL; dwState |= NF_ISREAL;
} }
else else
goto GetNumberFormatW_Error; /* Invalid char */ goto error; /* Invalid char */
szSrc++; szSrc++;
} }
szSrc--; /* Point to last character */ szSrc--; /* Point to last character */
if (!(dwState & NF_DIGITS)) if (!(dwState & NF_DIGITS))
goto GetNumberFormatW_Error; /* No digits */ goto error; /* No digits */
/* Add any trailing negative sign */ /* Add any trailing negative sign */
if (dwState & NF_ISNEGATIVE) if (dwState & NF_ISNEGATIVE)
...@@ -1263,6 +1267,10 @@ GetNumberFormatW_Error: ...@@ -1263,6 +1267,10 @@ GetNumberFormatW_Error:
} }
} }
return iRet; return iRet;
error:
SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS : ERROR_INVALID_PARAMETER);
return 0;
} }
/************************************************************************** /**************************************************************************
...@@ -1307,7 +1315,6 @@ INT WINAPI GetCurrencyFormatA(LCID lcid, DWORD dwFlags, ...@@ -1307,7 +1315,6 @@ INT WINAPI GetCurrencyFormatA(LCID lcid, DWORD dwFlags,
if (NLS_IsUnicodeOnlyLcid(lcid)) if (NLS_IsUnicodeOnlyLcid(lcid))
{ {
GetCurrencyFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return 0; return 0;
} }
...@@ -1316,7 +1323,11 @@ GetCurrencyFormatA_InvalidParameter: ...@@ -1316,7 +1323,11 @@ GetCurrencyFormatA_InvalidParameter:
{ {
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags); const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node) if (!node)
goto GetCurrencyFormatA_InvalidParameter; {
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
cp = node->dwCodePage; cp = node->dwCodePage;
} }
...@@ -1416,9 +1427,7 @@ INT WINAPI GetCurrencyFormatW(LCID lcid, DWORD dwFlags, ...@@ -1416,9 +1427,7 @@ INT WINAPI GetCurrencyFormatW(LCID lcid, DWORD dwFlags,
!lpFormat->lpCurrencySymbol || lpFormat->NegativeOrder > 15 || !lpFormat->lpCurrencySymbol || lpFormat->NegativeOrder > 15 ||
lpFormat->PositiveOrder > 3))) lpFormat->PositiveOrder > 3)))
{ {
GetCurrencyFormatW_Error: goto error;
SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS : ERROR_INVALID_PARAMETER);
return 0;
} }
if (!lpFormat) if (!lpFormat)
...@@ -1426,7 +1435,8 @@ GetCurrencyFormatW_Error: ...@@ -1426,7 +1435,8 @@ GetCurrencyFormatW_Error:
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags); const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node) if (!node)
goto GetCurrencyFormatW_Error; goto error;
lpFormat = &node->cyfmt; lpFormat = &node->cyfmt;
lpszNegStart = lpszNeg = GetNegative(node); lpszNegStart = lpszNeg = GetNegative(node);
} }
...@@ -1459,23 +1469,23 @@ GetCurrencyFormatW_Error: ...@@ -1459,23 +1469,23 @@ GetCurrencyFormatW_Error:
else if (*szSrc == '-') else if (*szSrc == '-')
{ {
if (dwState) if (dwState)
goto GetCurrencyFormatW_Error; /* '-' not first character */ goto error; /* '-' not first character */
dwState |= NF_ISNEGATIVE; dwState |= NF_ISNEGATIVE;
} }
else if (*szSrc == '.') else if (*szSrc == '.')
{ {
if (dwState & NF_ISREAL) if (dwState & NF_ISREAL)
goto GetCurrencyFormatW_Error; /* More than one '.' */ goto error; /* More than one '.' */
dwState |= NF_ISREAL; dwState |= NF_ISREAL;
} }
else else
goto GetCurrencyFormatW_Error; /* Invalid char */ goto error; /* Invalid char */
szSrc++; szSrc++;
} }
szSrc--; /* Point to last character */ szSrc--; /* Point to last character */
if (!(dwState & NF_DIGITS)) if (!(dwState & NF_DIGITS))
goto GetCurrencyFormatW_Error; /* No digits */ goto error; /* No digits */
if (dwState & NF_ISNEGATIVE) if (dwState & NF_ISNEGATIVE)
dwFmt = NLS_NegCyFormats[lpFormat->NegativeOrder]; dwFmt = NLS_NegCyFormats[lpFormat->NegativeOrder];
...@@ -1650,6 +1660,10 @@ GetCurrencyFormatW_Error: ...@@ -1650,6 +1660,10 @@ GetCurrencyFormatW_Error:
} }
} }
return iRet; return iRet;
error:
SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS : ERROR_INVALID_PARAMETER);
return 0;
} }
/* FIXME: Everything below here needs to move somewhere else along with the /* FIXME: Everything below here needs to move somewhere else along with the
...@@ -1949,7 +1963,7 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale, ...@@ -1949,7 +1963,7 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale,
if (opt == NULL) if (opt == NULL)
{ {
SetLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
goto NLS_EnumCalendarInfoAW_Cleanup; goto cleanup;
} }
if (GetLocaleInfoW(locale, LOCALE_IOPTIONALCALENDAR, opt, optSz)) if (GetLocaleInfoW(locale, LOCALE_IOPTIONALCALENDAR, opt, optSz))
iter = opt; iter = opt;
...@@ -1976,14 +1990,14 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale, ...@@ -1976,14 +1990,14 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale,
if (bufSz >= newSz) if (bufSz >= newSz)
{ {
ERR("Buffer resizing disorder: was %d, requested %d.\n", bufSz, newSz); ERR("Buffer resizing disorder: was %d, requested %d.\n", bufSz, newSz);
goto NLS_EnumCalendarInfoAW_Cleanup; goto cleanup;
} }
bufSz = newSz; bufSz = newSz;
WARN("Buffer too small; resizing to %d bytes.\n", bufSz); WARN("Buffer too small; resizing to %d bytes.\n", bufSz);
buf = HeapReAlloc(GetProcessHeap(), 0, buf, bufSz); buf = HeapReAlloc(GetProcessHeap(), 0, buf, bufSz);
if (buf == NULL) if (buf == NULL)
goto NLS_EnumCalendarInfoAW_Cleanup; goto cleanup;
} else goto NLS_EnumCalendarInfoAW_Cleanup; } else goto cleanup;
} }
} while (!ret); } while (!ret);
...@@ -2017,7 +2031,7 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale, ...@@ -2017,7 +2031,7 @@ static BOOL NLS_EnumCalendarInfoAW(void *calinfoproc, LCID locale,
} }
} }
NLS_EnumCalendarInfoAW_Cleanup: cleanup:
HeapFree(GetProcessHeap(), 0, opt); HeapFree(GetProcessHeap(), 0, opt);
HeapFree(GetProcessHeap(), 0, buf); HeapFree(GetProcessHeap(), 0, buf);
return ret; return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment