Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56600
-- v2: mlang: Return the correct interface in GetGlobalFontLinkObject.
From: Fabian Maurer dark.shadow4@web.de
--- dlls/mlang/tests/mlang.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index 6bb973dc285..988e48ee178 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -2308,6 +2308,7 @@ static void test_GetGlobalFontLinkObject(void) IMLangFontLink *IMLFL; IMLangCodePages *IMLCP; IMultiLanguage *IML; + IMultiLanguage2 *IML2;
ret = GetGlobalFontLinkObject(NULL); ok(ret == E_INVALIDARG, "expected E_INVALIDARG got %#lx\n", ret); @@ -2327,6 +2328,10 @@ static void test_GetGlobalFontLinkObject(void) todo_wine ok(ret == E_NOINTERFACE, "expected E_NOINTERFACE got %#lx\n", ret); if (ret == S_OK) IMultiLanguage_Release(IML);
+ ret = IUnknown_QueryInterface((IUnknown*)unknown, &IID_IMultiLanguage2, (void**)&IML2); + todo_wine ok(ret == E_NOINTERFACE, "expected E_NOINTERFACE got %#lx\n", ret); + if (ret == S_OK) IMultiLanguage2_Release(IML2); + ret = IUnknown_QueryInterface((IUnknown*)unknown, &IID_IMLangFontLink, (void**)&IMLFL); ok(ret == S_OK, "expected S_OK got %#lx\n", ret); IMLangFontLink_Release(IMLFL);
From: Fabian Maurer dark.shadow4@web.de
--- dlls/mlang/tests/mlang.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index 988e48ee178..7d94003bc78 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -2340,6 +2340,10 @@ static void test_GetGlobalFontLinkObject(void) ok(ret == S_OK, "expected S_OK got %#lx\n", ret); IMLangCodePages_Release(IMLCP);
+ todo_wine + ok(unknown == IMLFL, "IUnknown from GetGlobalFontLinkObject isn't IMLangFontLink\n"); + todo_wine + ok(unknown == IMLCP, "IUnknown from GetGlobalFontLinkObject isn't IMLangCodePages\n");
refcount = IUnknown_Release((IUnknown*)unknown); ok(refcount == 1, "Got refcount %ld\n", refcount);
From: Fabian Maurer dark.shadow4@web.de
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56600 --- dlls/gdiplus/graphics.c | 5 +---- dlls/mlang/mlang.c | 11 ++++------- dlls/mlang/tests/mlang.c | 4 +--- include/mlang.idl | 2 +- 4 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 265b3363ca9..1c0e6aa07d6 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -5354,7 +5354,6 @@ GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics *graphics, INT x, INT y, INT w /* Populates gdip_font_link_info struct based on the base_font and input string */ static void generate_font_link_info(struct gdip_format_string_info *info, DWORD length, GDIPCONST GpFont *base_font) { - IUnknown *unk; IMLangFontLink *iMLFL; GpFont *gpfont; HFONT map_hfont, hfont, old_font; @@ -5365,9 +5364,7 @@ static void generate_font_link_info(struct gdip_format_string_info *info, DWORD list_init(&info->font_link_info.sections); info->font_link_info.base_font = base_font;
- GetGlobalFontLinkObject((void**)&unk); - IUnknown_QueryInterface(unk, &IID_IMLangFontLink, (void**)&iMLFL); - IUnknown_Release(unk); + GetGlobalFontLinkObject(&iMLFL);
get_font_hfont(info->graphics, base_font, NULL, &hfont, NULL, NULL); IMLangFontLink_GetFontCodePages(iMLFL, info->hdc, hfont, &font_codepages); diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index c7e7f360f0b..fd78f47fdb2 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -3887,11 +3887,11 @@ static BOOL WINAPI allocate_font_link_cb(PINIT_ONCE init_once, PVOID args, PVOID return SUCCEEDED(MultiLanguage_create(NULL, (void**)&font_link_global)); }
-HRESULT WINAPI GetGlobalFontLinkObject(void **unknown) +HRESULT WINAPI GetGlobalFontLinkObject(IMLangFontLink **obj) { - TRACE("%p\n", unknown); + TRACE("%p\n", obj);
- if (!unknown) return E_INVALIDARG; + if (!obj) return E_INVALIDARG;
if (!InitOnceExecuteOnce(&font_link_global_init_once, allocate_font_link_cb, NULL, NULL)) { @@ -3899,8 +3899,5 @@ HRESULT WINAPI GetGlobalFontLinkObject(void **unknown) return E_FAIL; }
- IUnknown_AddRef(font_link_global); - *unknown = font_link_global; - - return S_OK; + return IUnknown_QueryInterface(font_link_global, &IID_IMLangFontLink, (void**)obj); } diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index 7d94003bc78..d104d4d5184 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -2314,7 +2314,7 @@ static void test_GetGlobalFontLinkObject(void) ok(ret == E_INVALIDARG, "expected E_INVALIDARG got %#lx\n", ret);
unknown = (void *)0xdeadbeef; - ret = GetGlobalFontLinkObject(&unknown); + ret = GetGlobalFontLinkObject((IMLangFontLink**)&unknown); ok(ret == S_OK, "expected S_OK got %#lx\n", ret); ok(unknown != NULL && unknown != (void *)0xdeadbeef, "GetGlobalFontLinkObject() returned %p\n", unknown); @@ -2340,9 +2340,7 @@ static void test_GetGlobalFontLinkObject(void) ok(ret == S_OK, "expected S_OK got %#lx\n", ret); IMLangCodePages_Release(IMLCP);
- todo_wine ok(unknown == IMLFL, "IUnknown from GetGlobalFontLinkObject isn't IMLangFontLink\n"); - todo_wine ok(unknown == IMLCP, "IUnknown from GetGlobalFontLinkObject isn't IMLangCodePages\n");
refcount = IUnknown_Release((IUnknown*)unknown); diff --git a/include/mlang.idl b/include/mlang.idl index 7c4398feafd..c9b5912b0e3 100644 --- a/include/mlang.idl +++ b/include/mlang.idl @@ -762,7 +762,7 @@ cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);") cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);") cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
-cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);") +cpp_quote("STDAPI GetGlobalFontLinkObject(IMLangFontLink **unknown);") cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);") cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);") cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=146723
Your paranoid android.
=== debian11b (64 bit WoW report) ===
user32: input.c:5864: Test failed: got pos (49,51)
On Mon Jul 1 18:27:41 2024 +0000, Nikolay Sivov wrote:
It might as well use "IMLangFontLink **" argument type to begin with. Naming it "iface" would be unusual, I think it's usually used for method implementation functions.
Thanks, updated