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

This commit is contained in:
Nikolay Sivov 2010-03-01 01:22:28 +03:00 committed by Alexandre Julliard
parent 400fb55219
commit 464ece6474

View File

@ -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:
{ {
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,
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:
{ {
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,
!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:
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:
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:
} }
} }
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,
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:
{ {
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,
!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:
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:
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:
} }
} }
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,
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,
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,
} }
} }
NLS_EnumCalendarInfoAW_Cleanup: cleanup:
HeapFree(GetProcessHeap(), 0, opt); HeapFree(GetProcessHeap(), 0, opt);
HeapFree(GetProcessHeap(), 0, buf); HeapFree(GetProcessHeap(), 0, buf);
return ret; return ret;