[PATCH 4/5] dwrite: Accept local loader in CreateCustomFontFileReference()
Nikolay Sivov
nsivov at codeweavers.com
Tue Apr 19 11:38:07 CDT 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/main.c | 4 +++-
dlls/dwrite/tests/font.c | 24 ++++++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index da12669..8b87590 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -807,7 +807,9 @@ static HRESULT WINAPI dwritefactory_CreateCustomFontFileReference(IDWriteFactory
*font_file = NULL;
- if (!loader || !factory_get_file_loader(This, loader))
+ /* local loader is accepted as well */
+ if (!loader || !(factory_get_file_loader(This, loader) ||
+ (IDWriteFontFileLoader*)This->localfontfileloader == loader))
return E_INVALIDARG;
return create_font_file(loader, reference_key, key_size, font_file);
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 1f6ec0f..7e14c90 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -2431,6 +2431,7 @@ static void test_CreateCustomFontFileReference(void)
IDWriteFontFileLoader floader2 = { &dwritefontfileloadervtbl };
IDWriteFontFileLoader floader3 = { &dwritefontfileloadervtbl };
IDWriteFactory *factory, *factory2;
+ IDWriteFontFileLoader *loader;
IDWriteFontFile *file, *file2;
BOOL support;
DWRITE_FONT_FILE_TYPE file_type;
@@ -2441,6 +2442,11 @@ static void test_CreateCustomFontFileReference(void)
HRSRC fontrsrc;
UINT32 codePoints[1] = {0xa8};
UINT16 indices[2];
+ const void *key;
+ UINT32 key_size;
+ WCHAR *path;
+
+ path = create_testfontfile(test_fontfile);
factory = create_factory();
factory2 = create_factory();
@@ -2449,6 +2455,23 @@ if (0) { /* crashes on win10 */
hr = IDWriteFactory_RegisterFontFileLoader(factory, NULL);
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
}
+ /* local loader is accepted too */
+ hr = IDWriteFactory_CreateFontFileReference(factory, path, NULL, &file);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDWriteFontFile_GetLoader(file, &loader);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDWriteFontFile_GetReferenceKey(file, &key, &key_size);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDWriteFactory_CreateCustomFontFileReference(factory, key, key_size, loader, &file2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ IDWriteFontFile_Release(file2);
+ IDWriteFontFile_Release(file);
+ IDWriteFontFileLoader_Release(loader);
+
hr = IDWriteFactory_RegisterFontFileLoader(factory, &floader);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFactory_RegisterFontFileLoader(factory, &floader2);
@@ -2582,6 +2605,7 @@ if (0) /* crashes on native */
IDWriteFactory_Release(factory2);
IDWriteFactory_Release(factory);
+ DELETE_FONTFILE(path);
}
static void test_CreateFontFileReference(void)
--
2.8.0.rc3
More information about the wine-patches
mailing list