[KERNEL32]

- Sync lcformat.c to Wine-1.3. This fixes (a number of potential) problems introduced by new nls data files being synced recently and led to crashes on locales having different months genitives. Original issue confirmed by Sergey Gusev <evilslon@mail.ru> and Igor Paliychuk.

svn path=/trunk/; revision=48433
This commit is contained in:
Aleksey Bragin 2010-08-03 20:23:43 +00:00
parent cf02088179
commit f986e82a8d
3 changed files with 343 additions and 457 deletions

View file

@ -158,142 +158,6 @@ ConvertDefaultLocale(LCID lcid)
}
/**************************************************************************
* EnumDateFormatsExA (KERNEL32.@)
*
* FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
* LOCALE_NOUSEROVERRIDE here as well?
*/
BOOL
WINAPI
EnumDateFormatsExA(
DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx,
LCID Locale,
DWORD dwFlags)
{
CALID cal_id;
char szBuf[256];
if (!lpDateFmtEnumProcEx)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (!GetLocaleInfoW(Locale,
LOCALE_ICALENDARTYPE|LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id,
sizeof(cal_id)/sizeof(WCHAR)))
{
return FALSE;
}
switch (dwFlags & ~LOCALE_USE_CP_ACP)
{
case 0:
case DATE_SHORTDATE:
if (GetLocaleInfoA(Locale,
LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
case DATE_LONGDATE:
if (GetLocaleInfoA(Locale,
LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
case DATE_YEARMONTH:
if (GetLocaleInfoA(Locale,
LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
szBuf, 256))
{
lpDateFmtEnumProcEx(szBuf, cal_id);
}
break;
default:
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
return TRUE;
}
/**************************************************************************
* EnumDateFormatsExW (KERNEL32.@)
*/
BOOL
WINAPI
EnumDateFormatsExW(
DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx,
LCID Locale,
DWORD dwFlags)
{
CALID cal_id;
WCHAR wbuf[256]; // FIXME
if (!lpDateFmtEnumProcEx)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (!GetLocaleInfoW(Locale,
LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id,
sizeof(cal_id)/sizeof(WCHAR)))
{
return FALSE;
}
switch (dwFlags & ~LOCALE_USE_CP_ACP)
{
case 0:
case DATE_SHORTDATE:
if (GetLocaleInfoW(Locale,
LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
case DATE_LONGDATE:
if (GetLocaleInfoW(Locale,
LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
case DATE_YEARMONTH:
if (GetLocaleInfoW(Locale,
LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
wbuf,
256))
{
lpDateFmtEnumProcEx(wbuf, cal_id);
}
break;
default:
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
return TRUE;
}
static BOOL NLS_RegEnumValue(HANDLE hKey, UINT ulIndex,
LPWSTR szValueName, ULONG valueNameSize,
LPWSTR szValueData, ULONG valueDataSize)

File diff suppressed because it is too large Load diff

View file

@ -218,7 +218,7 @@ gdi32 -
kernel32 -
reactos/dll/win32/kernel32/misc/errormsg.c # Out of sync
reactos/dll/win32/kernel32/misc/profile.c # Out of sync
reactos/dll/win32/kernel32/misc/lcformat.c # Out of sync
reactos/dll/win32/kernel32/misc/lcformat.c # Synced to Wine-1_3
reactos/dll/win32/kernel32/misc/lzexpand.c # Synced to Wine-1_1_23
msvcrt -