Module: wine Branch: master Commit: d9fcbf451a90d62b9a362da6ded0f8f8da5b419e URL: https://gitlab.winehq.org/wine/wine/-/commit/d9fcbf451a90d62b9a362da6ded0f8f...
Author: Santino Mazza smazza@codeweavers.com Date: Thu Nov 23 21:36:00 2023 -0300
mlang: Implement codepages priority.
---
dlls/mlang/mlang.c | 7 ++++--- dlls/mlang/tests/mlang.c | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index 6b0f2922a77..9846e3ad0e4 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -3333,10 +3333,12 @@ static HRESULT WINAPI fnIMLangFontLink2_GetStrCodePages( IMLangFontLink2* iface,
for (i = 0; i < src_len; i++) { - DWORD cp; + DWORD cp, next_cp = 0; HRESULT ret;
ret = IMLangFontLink2_GetCharCodePages(iface, src[i], &cp); + if (i + 1 < src_len) + ret = IMLangFontLink2_GetCharCodePages(iface, src[i + 1], &next_cp); if (ret != S_OK) return E_FAIL;
if (!cps) cps = cp; @@ -3347,8 +3349,7 @@ static HRESULT WINAPI fnIMLangFontLink2_GetStrCodePages( IMLangFontLink2* iface, break; }
- /* FIXME: not tested */ - if (priority_cp & cps) break; + if ((priority_cp & cps) && !(priority_cp & next_cp)) break; }
if (codepages) *codepages = cps; diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index 1047e8a029d..704576005d2 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -1298,16 +1298,16 @@ static void IMLangFontLink_Test(IMLangFontLink* iMLFL) processed = 0; ret = IMLangFontLink_GetStrCodePages(iMLFL, str, 4, FS_CYRILLIC, &dwCodePages, &processed); ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %lx\n", ret); - todo_wine ok(dwCodePages == dwCmpCodePages, "expected %lx, got %lx\n", dwCmpCodePages, dwCodePages); - todo_wine ok(processed == 2, "expected 2, got %ld\n", processed); + ok(dwCodePages == dwCmpCodePages, "expected %lx, got %lx\n", dwCmpCodePages, dwCodePages); + ok(processed == 2, "expected 2, got %ld\n", processed);
dwCmpCodePages = FS_JISJAPAN; dwCodePages = 0; processed = 0; ret = IMLangFontLink_GetStrCodePages(iMLFL, str, 4, FS_JISJAPAN, &dwCodePages, &processed); ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %lx\n", ret); - todo_wine ok(dwCodePages == dwCmpCodePages, "expected %lx, got %lx\n", dwCmpCodePages, dwCodePages); - todo_wine ok(processed == 3, "expected 3, got %ld\n", processed); + ok(dwCodePages == dwCmpCodePages, "expected %lx, got %lx\n", dwCmpCodePages, dwCodePages); + ok(processed == 3, "expected 3, got %ld\n", processed);
dwCmpCodePages = FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC | FS_GREEK | FS_TURKISH | FS_HEBREW | FS_ARABIC | FS_BALTIC | FS_VIETNAMESE | FS_THAI