Austin English : kernel32: Implement IsValidLocaleName (with tests).
Alexandre Julliard
julliard at winehq.org
Thu Aug 16 15:26:14 CDT 2012
Module: wine
Branch: master
Commit: 5dfc2a34eac326bcab6990693eb1935306f86a33
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5dfc2a34eac326bcab6990693eb1935306f86a33
Author: Austin English <austinenglish at gmail.com>
Date: Thu Jul 26 20:00:24 2012 -0700
kernel32: Implement IsValidLocaleName (with tests).
---
dlls/kernel32/kernel32.spec | 1 +
dlls/kernel32/locale.c | 15 +++++++++++++++
dlls/kernel32/tests/locale.c | 27 +++++++++++++++++++++++++++
3 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index b8c6a3c..736fbde 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -779,6 +779,7 @@
@ stdcall IsValidCodePage(long)
@ stdcall IsValidLanguageGroup(long long)
@ stdcall IsValidLocale(long long)
+@ stdcall IsValidLocaleName(wstr)
# @ stub IsValidUILanguage
@ stdcall IsWow64Process(ptr ptr)
@ stdcall K32EmptyWorkingSet(long)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index 3867d8d..29e38c9 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -2210,6 +2210,21 @@ BOOL WINAPI IsValidLocale( LCID lcid, DWORD flags )
(LPCWSTR)LOCALE_ILANGUAGE, LANGIDFROMLCID(lcid)) != 0;
}
+/******************************************************************************
+ * IsValidLocaleName (KERNEL32.@)
+ */
+BOOL WINAPI IsValidLocaleName( LPCWSTR locale )
+{
+ struct locale_name locale_name;
+
+ /* string parsing */
+ parse_locale_name( locale, &locale_name );
+
+ TRACE( "found lcid %x for %s, matches %d\n",
+ locale_name.lcid, debugstr_w(locale), locale_name.matches );
+
+ return locale_name.matches > 0;
+}
static BOOL CALLBACK enum_lang_proc_a( HMODULE hModule, LPCSTR type,
LPCSTR name, WORD LangID, LONG_PTR lParam )
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 397b30e..a2a33fa 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -86,6 +86,7 @@ static INT (WINAPI *pIdnToNameprepUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
static INT (WINAPI *pIdnToAscii)(DWORD, LPCWSTR, INT, LPWSTR, INT);
static INT (WINAPI *pIdnToUnicode)(DWORD, LPCWSTR, INT, LPWSTR, INT);
static INT (WINAPI *pGetLocaleInfoEx)(LPCWSTR, LCTYPE, LPWSTR, INT);
+static BOOL (WINAPI *pIsValidLocaleName)(LPCWSTR);
static void InitFunctionPointers(void)
{
@@ -104,6 +105,7 @@ static void InitFunctionPointers(void)
pIdnToAscii = (void*)GetProcAddress(hKernel32, "IdnToAscii");
pIdnToUnicode = (void*)GetProcAddress(hKernel32, "IdnToUnicode");
pGetLocaleInfoEx = (void*)GetProcAddress(hKernel32, "GetLocaleInfoEx");
+ pIsValidLocaleName = (void*)GetProcAddress(hKernel32, "IsValidLocaleName");
}
#define eq(received, expected, label, type) \
@@ -3435,6 +3437,30 @@ todo_wine
}
}
+static void test_IsValidLocaleName(void)
+{
+ static const WCHAR enW[] = {'e','n',0};
+ static const WCHAR enusW[] = {'e','n','-','U','S',0};
+ static const WCHAR zzW[] = {'z','z',0};
+ static const WCHAR zzzzW[] = {'z','z','-','Z','Z',0};
+ BOOL ret;
+
+ if (!pIsValidLocaleName)
+ {
+ win_skip("IsValidLocaleName not supported\n");
+ return;
+ }
+
+ ret = pIsValidLocaleName(enW);
+ ok(ret, "IsValidLocaleName failed\n");
+ ret = pIsValidLocaleName(enusW);
+ ok(ret, "IsValidLocaleName failed\n");
+ ret = pIsValidLocaleName(zzW);
+ ok(!ret, "IsValidLocaleName should have failed\n");
+ ret = pIsValidLocaleName(zzzzW);
+ ok(!ret, "IsValidLocaleName should have failed\n");
+}
+
START_TEST(locale)
{
InitFunctionPointers();
@@ -3468,6 +3494,7 @@ START_TEST(locale)
test_IdnToNameprepUnicode();
test_IdnToAscii();
test_IdnToUnicode();
+ test_IsValidLocaleName();
/* this requires collation table patch to make it MS compatible */
if (0) test_sorting();
}
More information about the wine-cvs
mailing list