mlang [2/2]: Use recently added support for LOCALE_SNAME to
implement LcidToRfc1766 and GetRfc1766FromLcid
Dmitry Timoshkov
dmitry at codeweavers.com
Wed Nov 22 01:19:03 CST 2006
Hello,
Changelog:
mlang [2/2]: Use recently added support for LOCALE_SNAME to implement
LcidToRfc1766 and GetRfc1766FromLcid.
---
dlls/mlang/Makefile.in | 1 +
dlls/mlang/mlang.c | 69 ++++++++++++++++++++++++++++++++++++++----------
2 files changed, 56 insertions(+), 14 deletions(-)
diff --git a/dlls/mlang/Makefile.in b/dlls/mlang/Makefile.in
index 60393b0..956fd89 100644
--- a/dlls/mlang/Makefile.in
+++ b/dlls/mlang/Makefile.in
@@ -5,6 +5,7 @@ VPATH = @srcdir@
MODULE = mlang.dll
IMPORTLIB = libmlang.$(IMPLIBEXT)
IMPORTS = ole32 user32 gdi32 advapi32 kernel32 ntdll
+DELAYIMPORTS = oleaut32
EXTRALIBS = -luuid
EXTRADEFS = -DCOM_NO_WINDOWS_H
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c
index 295aa85..90fc3c5 100644
--- a/dlls/mlang/mlang.c
+++ b/dlls/mlang/mlang.c
@@ -654,21 +654,49 @@ HRESULT WINAPI IsConvertINetStringAvaila
return S_FALSE;
}
+static inline INT lcid_to_rfc1766A( LCID lcid, LPSTR rfc1766, INT len )
+{
+ if ((len = GetLocaleInfoA( lcid, LOCALE_SNAME, rfc1766, len )))
+ {
+ LCMapStringA( LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, rfc1766, len, rfc1766, len );
+ return len;
+ }
+ return 0;
+}
+
+static inline INT lcid_to_rfc1766W( LCID lcid, LPWSTR rfc1766, INT len )
+{
+ if ((len = GetLocaleInfoW( lcid, LOCALE_SNAME, rfc1766, len )))
+ {
+ LCMapStringW( LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, rfc1766, len, rfc1766, len );
+ return len;
+ }
+ return 0;
+}
+
HRESULT WINAPI LcidToRfc1766A(
- LCID Locale,
+ LCID lcid,
LPSTR pszRfc1766,
INT nChar)
{
- FIXME("%d %s %u\n", Locale, pszRfc1766, nChar);
+ TRACE("%04x %p %u\n", lcid, pszRfc1766, nChar);
+
+ if (lcid_to_rfc1766A( lcid, pszRfc1766, nChar ))
+ return S_OK;
+
return S_FALSE;
}
HRESULT WINAPI LcidToRfc1766W(
- LCID Locale,
+ LCID lcid,
LPWSTR pszRfc1766,
INT nChar)
{
- FIXME("%d %p %u\n", Locale, pszRfc1766, nChar);
+ TRACE("%04x %p %u\n", lcid, pszRfc1766, nChar);
+
+ if (lcid_to_rfc1766W( lcid, pszRfc1766, nChar ))
+ return S_OK;
+
return S_FALSE;
}
@@ -1552,11 +1580,19 @@ static HRESULT WINAPI fnIMultiLanguage_C
static HRESULT WINAPI fnIMultiLanguage_GetRfc1766FromLcid(
IMultiLanguage* iface,
- LCID Locale,
+ LCID lcid,
BSTR* pbstrRfc1766)
{
- FIXME("\n");
- return E_NOTIMPL;
+ WCHAR buf[MAX_RFC1766_NAME];
+
+ TRACE("%p %04x %p\n", iface, lcid, pbstrRfc1766);
+
+ if (lcid_to_rfc1766W( lcid, buf, MAX_RFC1766_NAME ))
+ {
+ *pbstrRfc1766 = SysAllocString( buf );
+ return S_OK;
+ }
+ return E_FAIL;
}
static HRESULT WINAPI fnIMultiLanguage_GetLcidFromRfc1766(
@@ -1709,7 +1745,6 @@ struct enum_locales_data
static BOOL CALLBACK enum_locales_proc(LPWSTR locale)
{
- DWORD n;
WCHAR *end;
struct enum_locales_data *data = TlsGetValue(MLANG_tls_index);
RFC1766INFO *info;
@@ -1730,9 +1765,7 @@ static BOOL CALLBACK enum_locales_proc(L
return FALSE;
info->wszRfc1766[0] = 0;
- n = GetLocaleInfoW(info->lcid, LOCALE_SNAME, info->wszRfc1766, MAX_RFC1766_NAME);
- if (n)
- LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, info->wszRfc1766, -1, info->wszRfc1766, MAX_RFC1766_NAME);
+ lcid_to_rfc1766W( info->lcid, info->wszRfc1766, MAX_RFC1766_NAME );
info->wszLocaleName[0] = 0;
GetLocaleInfoW(info->lcid, LOCALE_SLANGUAGE, info->wszLocaleName, MAX_LOCALE_NAME);
@@ -2063,11 +2096,19 @@ static HRESULT WINAPI fnIMultiLanguage2_
static HRESULT WINAPI fnIMultiLanguage2_GetRfc1766FromLcid(
IMultiLanguage3* iface,
- LCID Locale,
+ LCID lcid,
BSTR* pbstrRfc1766)
{
- FIXME("\n");
- return E_NOTIMPL;
+ WCHAR buf[MAX_RFC1766_NAME];
+
+ TRACE("%p %04x %p\n", iface, lcid, pbstrRfc1766);
+
+ if (lcid_to_rfc1766W( lcid, buf, MAX_RFC1766_NAME ))
+ {
+ *pbstrRfc1766 = SysAllocString( buf );
+ return S_OK;
+ }
+ return E_FAIL;
}
static HRESULT WINAPI fnIMultiLanguage2_GetLcidFromRfc1766(
--
1.4.2
More information about the wine-patches
mailing list