mlang: Implement IMultiLanguage::GetLcidFromRfc1766.
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c
index 6d5142b..b5b8e0d 100644
--- a/dlls/mlang/mlang.c
+++ b/dlls/mlang/mlang.c
@@ -740,6 +740,28 @@
return S_FALSE;
}
+static HRESULT lcid_from_rfc1766(IEnumRfc1766 *iface, LCID *lcid, LPCWSTR rfc1766)
+{
+ RFC1766INFO info;
+ ULONG num;
+
+ while (IEnumRfc1766_Next(iface, 1, &info, &num) == S_OK)
+ {
+ if (!strcmpW(info.wszRfc1766, rfc1766))
+ {
+ *lcid = info.lcid;
+ return S_OK;
+ }
+ if (strlenW(rfc1766) == 2 && !memcmp(info.wszRfc1766, rfc1766, 2 * sizeof(WCHAR)))
+ {
+ *lcid = PRIMARYLANGID(info.lcid);
+ return S_OK;
+ }
+ }
+
+ return E_FAIL;
+}
+
/******************************************************************************
* MLANG ClassFactory
*/
@@ -1656,8 +1678,22 @@
LCID* pLocale,
BSTR bstrRfc1766)
{
- FIXME("\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ IEnumRfc1766 *rfc1766;
+
+ TRACE("%p %p %s\n", iface, pLocale, debugstr_w(bstrRfc1766));
+
+ if (!pLocale || !bstrRfc1766)
+ return E_INVALIDARG;
+
+ hr = IMultiLanguage_EnumRfc1766(iface, &rfc1766);
+ if (FAILED(hr))
+ return hr;
+
+ hr = lcid_from_rfc1766(rfc1766, pLocale, bstrRfc1766);
+
+ IEnumRfc1766_Release(rfc1766);
+ return hr;
}
/******************************************************************************/
@@ -2172,8 +2208,22 @@
LCID* pLocale,
BSTR bstrRfc1766)
{
- FIXME("\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ IEnumRfc1766 *rfc1766;
+
+ TRACE("%p %p %s\n", iface, pLocale, debugstr_w(bstrRfc1766));
+
+ if (!pLocale || !bstrRfc1766)
+ return E_INVALIDARG;
+
+ hr = IMultiLanguage2_EnumRfc1766(iface, 0, &rfc1766);
+ if (FAILED(hr))
+ return hr;
+
+ hr = lcid_from_rfc1766(rfc1766, pLocale, bstrRfc1766);
+
+ IEnumRfc1766_Release(rfc1766);
+ return hr;
}
static HRESULT WINAPI fnIMultiLanguage2_EnumRfc1766(