From: Elizabeth Figura <zfigura@codeweavers.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58963 --- dlls/gdi32/tests/font.c | 2 +- dlls/gdi32/text.c | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index 87cb27ba710..c56180b1ce6 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -7991,7 +7991,7 @@ static void test_add_font_path(void) * Stratego (1997) depends on it being redirected, * and fails on 64-bit Windows */ count = AddFontResourceExA( "winetest_font.ttf", 0, NULL ); - todo_wine ok( count == 1 || broken( wow64 ), "got %d\n", count ); + ok( count == 1 || broken( wow64 ), "got %d\n", count ); if (count == 1) { path = get_font_path( "wine_heavy" ); diff --git a/dlls/gdi32/text.c b/dlls/gdi32/text.c index b0a3e98f588..000878ccf6a 100644 --- a/dlls/gdi32/text.c +++ b/dlls/gdi32/text.c @@ -2524,7 +2524,24 @@ static int add_font_resource( const WCHAR *str, DWORD flags, void *dv ) if (!ret && !wcschr( str, '\\' )) { /* try as system font */ - ret = NtGdiAddFontResourceW( str, lstrlenW( str ) + 1, 1, flags, 0, dv ); + WCHAR *system_dir; + + if ((ret = NtGdiAddFontResourceW( str, wcslen( str ) + 1, 1, flags, 0, dv ))) + return ret; + + if (!(system_dir = malloc( (MAX_PATH + 1 + wcslen( str )) * sizeof(WCHAR) ))) + return 0; + GetSystemDirectoryW( system_dir, MAX_PATH + 1 + wcslen( str )); + wcscat( system_dir, L"\\" ); + wcscat( system_dir, str ); + if (!RtlDosPathNameToNtPathName_U( system_dir, &nt_name, NULL, NULL )) + { + free( system_dir ); + return 0; + } + ret = NtGdiAddFontResourceW( nt_name.Buffer, nt_name.Length / sizeof(WCHAR) + 1, + 1, flags, 0, dv ); + RtlFreeUnicodeString( &nt_name ); } return ret; } @@ -2559,7 +2576,24 @@ static int remove_font_resource( const WCHAR *str, DWORD flags, void *dv ) if (!ret && !wcschr( str, '\\' )) { /* try as system font */ - ret = NtGdiRemoveFontResourceW( str, lstrlenW( str ) + 1, 1, flags, 0, dv ); + WCHAR *system_dir; + + if ((ret = NtGdiRemoveFontResourceW( str, wcslen( str ) + 1, 1, flags, 0, dv ))) + return ret; + + if (!(system_dir = malloc( (MAX_PATH + 1 + wcslen( str )) * sizeof(WCHAR) ))) + return 0; + GetSystemDirectoryW( system_dir, MAX_PATH + 1 + wcslen( str )); + wcscat( system_dir, L"\\" ); + wcscat( system_dir, str ); + if (!RtlDosPathNameToNtPathName_U( system_dir, &nt_name, NULL, NULL )) + { + free( system_dir ); + return 0; + } + ret = NtGdiRemoveFontResourceW( nt_name.Buffer, nt_name.Length / sizeof(WCHAR) + 1, + 1, flags, 0, dv ); + RtlFreeUnicodeString( &nt_name ); } return ret; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10073