Nikolay Sivov : dwrite: Use array allocation helper for in-memory loader.

Alexandre Julliard julliard at winehq.org
Tue May 14 15:43:02 CDT 2019


Module: wine
Branch: master
Commit: 3cfd0a7a4b29cb081508705731eb01e90cd77517
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3cfd0a7a4b29cb081508705731eb01e90cd77517

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue May 14 13:27:25 2019 +0300

dwrite: Use array allocation helper for in-memory loader.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dwrite/font.c | 36 +++++++++++-------------------------
 1 file changed, 11 insertions(+), 25 deletions(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index de7ccef..5f4abc7 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -4588,8 +4588,8 @@ struct dwrite_inmemory_fileloader
     LONG ref;
 
     struct dwrite_inmemory_stream_data **streams;
-    UINT32 filecount;
-    UINT32 capacity;
+    size_t size;
+    size_t count;
 };
 
 static inline struct dwrite_localfontfileloader *impl_from_IDWriteLocalFontFileLoader(IDWriteLocalFontFileLoader *iface)
@@ -6208,13 +6208,12 @@ static ULONG WINAPI inmemoryfontfileloader_Release(IDWriteInMemoryFontFileLoader
 {
     struct dwrite_inmemory_fileloader *loader = impl_from_IDWriteInMemoryFontFileLoader(iface);
     ULONG ref = InterlockedDecrement(&loader->ref);
+    size_t i;
 
     TRACE("(%p)->(%u)\n", loader, ref);
 
     if (!ref) {
-        UINT32 i;
-
-        for (i = 0; i < loader->filecount; i++)
+        for (i = 0; i < loader->count; ++i)
             release_inmemory_stream(loader->streams[i]);
         heap_free(loader->streams);
         heap_free(loader);
@@ -6239,7 +6238,7 @@ static HRESULT WINAPI inmemoryfontfileloader_CreateStreamFromKey(IDWriteInMemory
 
     index = *(DWORD *)key;
 
-    if (index >= loader->filecount)
+    if (index >= loader->count)
         return E_INVALIDARG;
 
     if (!(stream = heap_alloc(sizeof(*stream))))
@@ -6266,21 +6265,8 @@ static HRESULT WINAPI inmemoryfontfileloader_CreateInMemoryFontFileReference(IDW
 
     *fontfile = NULL;
 
-    if (loader->filecount == loader->capacity) {
-        if (loader->streams) {
-            struct dwrite_inmemory_stream_data **ptr;
-
-            if (!(ptr = heap_realloc(loader->streams, 2 * loader->capacity * sizeof(*loader->streams))))
-                return E_OUTOFMEMORY;
-
-            loader->streams = ptr;
-            loader->capacity *= 2;
-        }
-        else {
-            loader->capacity = 16;
-            loader->streams = heap_calloc(loader->capacity, sizeof(*loader->streams));
-        }
-    }
+    if (!dwrite_array_reserve((void **)&loader->streams, &loader->size, loader->count + 1, sizeof(*loader->streams)))
+        return E_OUTOFMEMORY;
 
     if (!(stream = heap_alloc(sizeof(*stream))))
         return E_OUTOFMEMORY;
@@ -6300,8 +6286,8 @@ static HRESULT WINAPI inmemoryfontfileloader_CreateInMemoryFontFileReference(IDW
         memcpy(stream->data, data, data_size);
     }
 
-    key = loader->filecount;
-    loader->streams[loader->filecount++] = stream;
+    key = loader->count;
+    loader->streams[loader->count++] = stream;
 
     return IDWriteFactory_CreateCustomFontFileReference(factory, &key, sizeof(key),
             (IDWriteFontFileLoader *)&loader->IDWriteInMemoryFontFileLoader_iface, fontfile);
@@ -6311,9 +6297,9 @@ static UINT32 WINAPI inmemoryfontfileloader_GetFileCount(IDWriteInMemoryFontFile
 {
     struct dwrite_inmemory_fileloader *loader = impl_from_IDWriteInMemoryFontFileLoader(iface);
 
-    TRACE("(%p)\n", loader);
+    TRACE("%p.\n", iface);
 
-    return loader->filecount;
+    return loader->count;
 }
 
 static const IDWriteInMemoryFontFileLoaderVtbl inmemoryfontfileloadervtbl =




More information about the wine-cvs mailing list