Piotr Caban : oleaut32: Take lcid into account while parsing input variant in VARIANT_FormatString.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 16 09:43:46 CST 2015


Module: wine
Branch: master
Commit: f9041da281e9c34202f5a0a8667d4d6cf7adca4d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f9041da281e9c34202f5a0a8667d4d6cf7adca4d

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Sat Nov 14 13:17:39 2015 +0100

oleaut32: Take lcid into account while parsing input variant in VARIANT_FormatString.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/oleaut32/tests/varformat.c | 23 +++++++++++++++++++++++
 dlls/oleaut32/varformat.c       |  2 +-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/dlls/oleaut32/tests/varformat.c b/dlls/oleaut32/tests/varformat.c
index 9d7400b..9547c89 100644
--- a/dlls/oleaut32/tests/varformat.c
+++ b/dlls/oleaut32/tests/varformat.c
@@ -568,6 +568,10 @@ static void test_VarFormatFromTokens(void)
     static const WCHAR date[] = {'1','2','-','1','1',0};
     static const WCHAR date_us[] = {'1','1','-','1','2',0};
 
+    static WCHAR string_fmt[] = {'@',0};
+    static const WCHAR string_de[] = {'1',',','5',0};
+    static const WCHAR string_us[] = {'1','.','5',0};
+
     BYTE buff[256];
     LCID lcid;
     VARIANT var;
@@ -615,6 +619,25 @@ static void test_VarFormatFromTokens(void)
     SysFreeString(bstr);
 
     VariantClear(&var);
+
+    V_VT(&var) = VT_R4;
+    V_R4(&var) = 1.5;
+
+    lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
+    hres = VarTokenizeFormatString(string_fmt, buff, sizeof(buff), 1, 1, lcid, NULL);
+    ok(hres == S_OK, "VarTokenizeFormatString failed: %x\n", hres);
+    hres = VarFormatFromTokens(&var, string_fmt, buff, 0, &bstr, lcid);
+    ok(hres == S_OK, "VarFormatFromTokens failed: %x\n", hres);
+    ok(!strcmpW(bstr, string_us), "incorrectly formatted string: %s\n", wine_dbgstr_w(bstr));
+    SysFreeString(bstr);
+
+    lcid = MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), SORT_DEFAULT);
+    hres = VarTokenizeFormatString(string_fmt, buff, sizeof(buff), 1, 1, lcid, NULL);
+    ok(hres == S_OK, "VarTokenizeFormatString failed: %x\n", hres);
+    hres = VarFormatFromTokens(&var, string_fmt, buff, 0, &bstr, lcid);
+    ok(hres == S_OK, "VarFormatFromTokens failed: %x\n", hres);
+    ok(!strcmpW(bstr, string_de), "incorrectly formatted string: %s\n", wine_dbgstr_w(bstr));
+    SysFreeString(bstr);
 }
 
 START_TEST(varformat)
diff --git a/dlls/oleaut32/varformat.c b/dlls/oleaut32/varformat.c
index 25feec1..a4969c2 100644
--- a/dlls/oleaut32/varformat.c
+++ b/dlls/oleaut32/varformat.c
@@ -1960,7 +1960,7 @@ static HRESULT VARIANT_FormatString(LPVARIANT pVarIn, LPOLESTR lpszFormat,
   }
   else
   {
-    hRes = VariantChangeTypeEx(&vStr, pVarIn, LCID_US, VARIANT_NOUSEROVERRIDE, VT_BSTR);
+    hRes = VariantChangeTypeEx(&vStr, pVarIn, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR);
     if (FAILED(hRes))
       return hRes;
 




More information about the wine-cvs mailing list