forked from Mirrors/wine-wine
Set the correct last error in EnumUILanguagesA, with tests.
parent
a773f43f9c
commit
ddae31893d
|
@ -3170,7 +3170,14 @@ BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags
|
||||||
{
|
{
|
||||||
static char value[] = "0409";
|
static char value[] = "0409";
|
||||||
|
|
||||||
if(!pUILangEnumProc) return FALSE;
|
if(!pUILangEnumProc) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if(dwFlags) {
|
||||||
|
SetLastError(ERROR_INVALID_FLAGS);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
|
FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
|
||||||
pUILangEnumProc, dwFlags, lParam, debugstr_a(value));
|
pUILangEnumProc, dwFlags, lParam, debugstr_a(value));
|
||||||
|
@ -3186,7 +3193,14 @@ BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags
|
||||||
{
|
{
|
||||||
static WCHAR value[] = {'0','4','0','9',0};
|
static WCHAR value[] = {'0','4','0','9',0};
|
||||||
|
|
||||||
if(!pUILangEnumProc) return FALSE;
|
if(!pUILangEnumProc) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if(dwFlags) {
|
||||||
|
SetLastError(ERROR_INVALID_FLAGS);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
|
FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
|
||||||
pUILangEnumProc, dwFlags, lParam, debugstr_w(value));
|
pUILangEnumProc, dwFlags, lParam, debugstr_w(value));
|
||||||
|
|
|
@ -64,6 +64,7 @@ inline static int isdigitW( WCHAR wc )
|
||||||
|
|
||||||
/* Some functions are only in later versions of kernel32.dll */
|
/* Some functions are only in later versions of kernel32.dll */
|
||||||
static HMODULE hKernel32;
|
static HMODULE hKernel32;
|
||||||
|
static WORD enumCount;
|
||||||
|
|
||||||
typedef BOOL (WINAPI *EnumSystemLanguageGroupsAFn)(LANGUAGEGROUP_ENUMPROC,
|
typedef BOOL (WINAPI *EnumSystemLanguageGroupsAFn)(LANGUAGEGROUP_ENUMPROC,
|
||||||
DWORD, LONG_PTR);
|
DWORD, LONG_PTR);
|
||||||
|
@ -71,6 +72,9 @@ static EnumSystemLanguageGroupsAFn pEnumSystemLanguageGroupsA;
|
||||||
typedef BOOL (WINAPI *EnumLanguageGroupLocalesAFn)(LANGGROUPLOCALE_ENUMPROC,
|
typedef BOOL (WINAPI *EnumLanguageGroupLocalesAFn)(LANGGROUPLOCALE_ENUMPROC,
|
||||||
LGRPID, DWORD, LONG_PTR);
|
LGRPID, DWORD, LONG_PTR);
|
||||||
static EnumLanguageGroupLocalesAFn pEnumLanguageGroupLocalesA;
|
static EnumLanguageGroupLocalesAFn pEnumLanguageGroupLocalesA;
|
||||||
|
typedef BOOL (WINAPI *EnumUILanguagesAFn)(UILANGUAGE_ENUMPROC,
|
||||||
|
DWORD, LONG_PTR);
|
||||||
|
static EnumUILanguagesAFn pEnumUILanguagesA;
|
||||||
|
|
||||||
typedef INT (WINAPI *FoldStringAFn)(DWORD, LPCSTR, INT, LPSTR, INT);
|
typedef INT (WINAPI *FoldStringAFn)(DWORD, LPCSTR, INT, LPSTR, INT);
|
||||||
static FoldStringAFn pFoldStringA;
|
static FoldStringAFn pFoldStringA;
|
||||||
|
@ -91,6 +95,7 @@ static void InitFunctionPointers(void)
|
||||||
pFoldStringA = (void*)GetProcAddress(hKernel32, "FoldStringA");
|
pFoldStringA = (void*)GetProcAddress(hKernel32, "FoldStringA");
|
||||||
pFoldStringW = (void*)GetProcAddress(hKernel32, "FoldStringW");
|
pFoldStringW = (void*)GetProcAddress(hKernel32, "FoldStringW");
|
||||||
pIsValidLanguageGroup = (void*)GetProcAddress(hKernel32, "IsValidLanguageGroup");
|
pIsValidLanguageGroup = (void*)GetProcAddress(hKernel32, "IsValidLanguageGroup");
|
||||||
|
pEnumUILanguagesA = (void*)GetProcAddress(hKernel32, "EnumUILanguagesA");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,6 +130,8 @@ char GlobalBuffer[BUFFER_SIZE]; /* Buffer used by callback function */
|
||||||
SetLastError(0); buffer[0] = '\0'
|
SetLastError(0); buffer[0] = '\0'
|
||||||
#define EXPECT_LENW EXPECT_LEN((int)strlenW(Expected)+1)
|
#define EXPECT_LENW EXPECT_LEN((int)strlenW(Expected)+1)
|
||||||
#define EXPECT_EQW ok(strncmpW(buffer, Expected, strlenW(Expected)) == 0, "Bad conversion\n")
|
#define EXPECT_EQW ok(strncmpW(buffer, Expected, strlenW(Expected)) == 0, "Bad conversion\n")
|
||||||
|
#define EXPECT_FALSE ok(FALSE == ret, "Expected return value FALSE, got TRUE\n")
|
||||||
|
#define EXPECT_TRUE ok(TRUE == ret, "Expected return value TRUE, got FALSE\n")
|
||||||
|
|
||||||
#define NUO LOCALE_NOUSEROVERRIDE
|
#define NUO LOCALE_NOUSEROVERRIDE
|
||||||
|
|
||||||
|
@ -2023,6 +2030,51 @@ static void test_SetLocaleInfoA(void)
|
||||||
EXPECT_FLAGS;
|
EXPECT_FLAGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK luilocale_proc1A(LPSTR value, LONG_PTR lParam) {
|
||||||
|
trace("%s %08lx\n", value, lParam);
|
||||||
|
return(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK luilocale_proc2A(LPSTR value, LONG_PTR lParam) {
|
||||||
|
ok(!enumCount, "callback called again unexpected\n");
|
||||||
|
enumCount++;
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK luilocale_proc3A(LPSTR value, LONG_PTR lParam) {
|
||||||
|
ok(0,"callback called unexpected\n");
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_EnumUILanguageA(void)
|
||||||
|
{ BOOL ret;
|
||||||
|
if (!pEnumUILanguagesA) {
|
||||||
|
trace("EnumUILanguagesA is not available on Win9x\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLastError(ERROR_SUCCESS);
|
||||||
|
ret = pEnumUILanguagesA(luilocale_proc1A, 0, 0);
|
||||||
|
EXPECT_TRUE; EXPECT_VALID;
|
||||||
|
|
||||||
|
enumCount = 0;
|
||||||
|
SetLastError(ERROR_SUCCESS);
|
||||||
|
ret = pEnumUILanguagesA(luilocale_proc2A, 0, 0);
|
||||||
|
EXPECT_TRUE; EXPECT_VALID;
|
||||||
|
|
||||||
|
SetLastError(ERROR_SUCCESS);
|
||||||
|
ret = pEnumUILanguagesA(NULL, 0, 0);
|
||||||
|
EXPECT_FALSE; EXPECT_INVALID;
|
||||||
|
|
||||||
|
SetLastError(ERROR_SUCCESS);
|
||||||
|
ret = pEnumUILanguagesA(luilocale_proc3A, 0x5a5a5a5a, 0);
|
||||||
|
EXPECT_FALSE; EXPECT_FLAGS;
|
||||||
|
|
||||||
|
SetLastError(ERROR_SUCCESS);
|
||||||
|
ret = pEnumUILanguagesA(NULL, 0x5a5a5a5a, 0);
|
||||||
|
EXPECT_FALSE; EXPECT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(locale)
|
START_TEST(locale)
|
||||||
{
|
{
|
||||||
InitFunctionPointers();
|
InitFunctionPointers();
|
||||||
|
@ -2048,4 +2100,5 @@ START_TEST(locale)
|
||||||
#if 0 /* this requires collation table patch to make it MS compatible */
|
#if 0 /* this requires collation table patch to make it MS compatible */
|
||||||
test_sorting();
|
test_sorting();
|
||||||
#endif
|
#endif
|
||||||
|
test_EnumUILanguageA();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue