[PATCH] gdiplus: Don't return copies of font families from GdipGetFontCollectionFamilyList.

Sven Baars sven.wine at gmail.com
Thu Jan 24 04:59:46 CST 2019


Signed-off-by: Sven Baars <sven.wine at gmail.com>
---
This was added in 5694825ae3c3a581976716a62e1b2d1fb54e5674, but the
corrected test shows this may not be correct. Maybe Vincent still knows
why this was done?

 dlls/gdiplus/font.c       | 20 ++++----------------
 dlls/gdiplus/tests/font.c | 14 +++++++++-----
 2 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c
index 5e6aa5430f..cbe7859fe7 100644
--- a/dlls/gdiplus/font.c
+++ b/dlls/gdiplus/font.c
@@ -1576,7 +1576,6 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(
         GpFontFamily* gpfamilies[], INT* numFound)
 {
     INT i;
-    GpStatus stat=Ok;
 
     TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound);
 
@@ -1585,24 +1584,13 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(
 
     memset(gpfamilies, 0, sizeof(*gpfamilies) * numSought);
 
-    for (i = 0; i < numSought && i < fontCollection->count && stat == Ok; i++)
+    for (i = 0; i < numSought && i < fontCollection->count; i++)
     {
-        stat = GdipCloneFontFamily(fontCollection->FontFamilies[i], &gpfamilies[i]);
+        gpfamilies[i] = fontCollection->FontFamilies[i];
     }
+    *numFound = i;
 
-    if (stat == Ok)
-        *numFound = i;
-    else
-    {
-        int numToFree=i;
-        for (i=0; i<numToFree; i++)
-        {
-            GdipDeleteFontFamily(gpfamilies[i]);
-            gpfamilies[i] = NULL;
-        }
-    }
-
-    return stat;
+    return Ok;
 }
 
 void free_installed_fonts(void)
diff --git a/dlls/gdiplus/tests/font.c b/dlls/gdiplus/tests/font.c
index 03e7a04e08..f91418d806 100644
--- a/dlls/gdiplus/tests/font.c
+++ b/dlls/gdiplus/tests/font.c
@@ -1187,7 +1187,7 @@ todo_wine
 
 static void test_GdipGetFontCollectionFamilyList(void)
 {
-    GpFontFamily *family, *family2;
+    GpFontFamily *family, *family2, **families;
     GpFontCollection *collection;
     INT found, count;
     GpStatus status;
@@ -1228,15 +1228,19 @@ static void test_GdipGetFontCollectionFamilyList(void)
     ok(found == 1, "Unexpected list count %d.\n", found);
     ok(family != NULL, "Expected family instance.\n");
 
-    family = NULL;
+    family2 = NULL;
     found = 0;
     status = GdipGetFontCollectionFamilyList(collection, 1, &family2, &found);
     ok(status == Ok, "Failed to get family list, status %d.\n", status);
     ok(found == 1, "Unexpected list count %d.\n", found);
-    ok(family2 != family, "Unexpected family instance.\n");
+    ok(family2 == family, "Unexpected family instance.\n");
 
-    GdipDeleteFontFamily(family);
-    GdipDeleteFontFamily(family2);
+    families = GdipAlloc((count + 1) * sizeof(*families));
+    found = 0;
+    status = GdipGetFontCollectionFamilyList(collection, count + 1, families, &found);
+    ok(status == Ok, "Failed to get family list, status %d.\n", status);
+    ok(found == count, "Unexpected list count %d, extected %d.\n", found, count);
+    GdipFree(families);
 }
 
 static void test_GdipGetFontCollectionFamilyCount(void)
-- 
2.17.1




More information about the wine-devel mailing list