diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c index 6ad050205c1..0919b66e05e 100644 --- a/dlls/gdiplus/font.c +++ b/dlls/gdiplus/font.c @@ -411,10 +411,25 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily* FontFamily, GpFontFamily** { if (!(FontFamily && clonedFontFamily)) return InvalidParameter; - FIXME("stub: %p (%s), %p\n", FontFamily, + TRACE("stub: %p (%s), %p\n", FontFamily, debugstr_w(FontFamily->FamilyName), clonedFontFamily); - return NotImplemented; + *clonedFontFamily = GdipAlloc(sizeof(GpFontFamily)); + if (!*clonedFontFamily) return OutOfMemory; + + **clonedFontFamily = *FontFamily; + + (*clonedFontFamily)->FamilyName = GdipAlloc(sizeof(WCHAR) * LF_FACESIZE); + if (!(*clonedFontFamily)->FamilyName) + { + GdipFree (clonedFontFamily); + return OutOfMemory; + } + + lstrcpynW((*clonedFontFamily)->FamilyName, FontFamily->FamilyName, + LF_FACESIZE); + + return Ok; } /******************************************************************************* diff --git a/dlls/gdiplus/tests/font.c b/dlls/gdiplus/tests/font.c index 2178c8414fd..0aa597ddb7f 100644 --- a/dlls/gdiplus/tests/font.c +++ b/dlls/gdiplus/tests/font.c @@ -150,7 +150,7 @@ static void test_logfont(void) static void test_fontfamily (void) { - GpFontFamily* family; + GpFontFamily *family, *clonedFontFamily; WCHAR itsName[LF_FACESIZE]; GpStatus stat; @@ -180,7 +180,16 @@ static void test_fontfamily (void) expect (Ok, stat); } + /* Make sure we don't read old data */ + ZeroMemory (itsName, sizeof(itsName)); + stat = GdipCloneFontFamily(family, &clonedFontFamily); + expect (Ok, stat); GdipDeleteFontFamily(family); + stat = GdipGetFamilyName(clonedFontFamily, itsName, LANG_NEUTRAL); + expect(Ok, stat); + expect(0, lstrcmpiW(itsName, arial)); + + GdipDeleteFontFamily(clonedFontFamily); }