Module: wine Branch: master Commit: 46532e8d8a5cd0f963231e15cb7d80cc88b3de2d URL: http://source.winehq.org/git/wine.git/?a=commit;h=46532e8d8a5cd0f963231e15cb...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jan 15 12:54:02 2013 +0100
gdi32: Add support for .fot files in RemoveFontResource.
---
dlls/gdi32/font.c | 20 +++++++++++++++++++- dlls/gdi32/tests/font.c | 15 ++++----------- 2 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index c6a6946..fe211a1 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -3565,7 +3565,25 @@ BOOL WINAPI RemoveFontResourceExA( LPCSTR str, DWORD fl, PVOID pdv ) */ BOOL WINAPI RemoveFontResourceExW( LPCWSTR str, DWORD fl, PVOID pdv ) { - return WineEngRemoveFontResourceEx(str, fl, pdv); + int ret = WineEngRemoveFontResourceEx( str, fl, pdv ); + WCHAR *filename; + + if (ret == 0) + { + /* FreeType <2.3.5 has problems reading resources wrapped in PE files. */ + HMODULE hModule = LoadLibraryExW(str, NULL, LOAD_LIBRARY_AS_DATAFILE); + if (hModule != NULL) + { + WARN("Can't unload resources from PE file %s\n", wine_dbgstr_w(str)); + FreeLibrary(hModule); + } + else if ((filename = get_scalable_filename( str )) != NULL) + { + ret = WineEngRemoveFontResourceEx( filename, fl, pdv ); + HeapFree( GetProcessHeap(), 0, filename ); + } + } + return ret; }
/*********************************************************************** diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index 1dfdd11..62997d1 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -4475,22 +4475,11 @@ static void test_CreateScalableFontResource(void)
SetLastError(0xdeadbeef); ret = pRemoveFontResourceExA(fot_name, 0, 0); -todo_wine ok(ret, "RemoveFontResourceEx() error %d\n", GetLastError());
ret = is_truetype_font_installed("wine_test"); -todo_wine ok(!ret, "font wine_test should not be enumerated\n");
- /* FIXME: since RemoveFontResource is a stub correct testing is impossible */ - if (ret) - { - /* remove once RemoveFontResource is implemented */ - DeleteFile(fot_name); - DeleteFile(ttf_name); - return; - } - ret = pRemoveFontResourceExA(fot_name, 0, 0); ok(!ret, "RemoveFontResourceEx() should fail\n");
@@ -4509,17 +4498,21 @@ todo_wine ok(ret, "AddFontResourceEx() error %d\n", GetLastError());
ret = is_truetype_font_installed("wine_test"); + todo_wine ok(!ret, "font wine_test should not be enumerated\n");
/* XP allows removing a private font added with 0 flags */ SetLastError(0xdeadbeef); ret = pRemoveFontResourceExA(fot_name, FR_PRIVATE, 0); + todo_wine ok(ret, "RemoveFontResourceEx() error %d\n", GetLastError());
ret = is_truetype_font_installed("wine_test"); + todo_wine ok(!ret, "font wine_test should not be enumerated\n");
ret = pRemoveFontResourceExA(fot_name, 0, 0); + todo_wine ok(!ret, "RemoveFontResourceEx() should fail\n");
DeleteFile(fot_name);