Module: wine Branch: master Commit: 5694825ae3c3a581976716a62e1b2d1fb54e5674 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5694825ae3c3a581976716a62e...
Author: Vincent Povirk vincent@codeweavers.com Date: Sat Jun 19 17:50:00 2010 -0500
gdiplus: Return copies of fonts from GdipGetFontCollectionFamilyList.
---
dlls/gdiplus/font.c | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c index f198863..2670e81 100644 --- a/dlls/gdiplus/font.c +++ b/dlls/gdiplus/font.c @@ -963,18 +963,33 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( GpFontFamily* gpfamilies[], INT* numFound) { INT i; + GpStatus stat=Ok;
TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound);
if (!(fontCollection && gpfamilies && numFound)) return InvalidParameter;
- for (i = 0; i < numSought && i < fontCollection->count; i++) + memset(gpfamilies, 0, sizeof(*gpfamilies) * numSought); + + for (i = 0; i < numSought && i < fontCollection->count && stat == Ok; i++) { - gpfamilies[i] = fontCollection->FontFamilies[i]; + stat = GdipCloneFontFamily(fontCollection->FontFamilies[i], &gpfamilies[i]); } - *numFound = i; - return Ok; + + if (stat == Ok) + *numFound = i; + else + { + int numToFree=i; + for (i=0; i<numToFree; i++) + { + GdipDeleteFontFamily(gpfamilies[i]); + gpfamilies[i] = NULL; + } + } + + return stat; }
void free_installed_fonts(void)