gdi32: Allocate cache for face enumeration data only when necessary.
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index b72ee50..b48cbcc 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -242,6 +242,13 @@
     FT_Pos size, x_ppem, y_ppem;
 } My_FT_Bitmap_Size;
 
+struct enum_data
+{
+    ENUMLOGFONTEXW elf;
+    NEWTEXTMETRICEXW ntm;
+    DWORD type;
+};
+
 typedef struct tagFace {
     struct list entry;
     WCHAR *StyleName;
@@ -260,10 +267,7 @@
     BOOL external; /* TRUE if we should manually add this font to the registry */
     struct tagFamily *family;
     /* Cached data for Enum */
-    BOOL cache_valid;
-    ENUMLOGFONTEXW elf;
-    NEWTEXTMETRICEXW ntm;
-    DWORD type;
+    struct enum_data *cached_enum_data;
 } Face;
 
 typedef struct tagFamily {
@@ -1239,7 +1243,7 @@
                 }
             }
             face = HeapAlloc(GetProcessHeap(), 0, sizeof(*face));
-            face->cache_valid = FALSE;
+            face->cached_enum_data = NULL;
             list_add_tail(&family->faces, &face->entry);
             face->StyleName = StyleW;
             if (file)
@@ -3290,12 +3294,12 @@
     GdiFont *font;
     LONG width, height;
 
-    if (face->cache_valid)
+    if (face->cached_enum_data)
     {
         TRACE("Cached\n");
-        memcpy(pelf,&face->elf,sizeof(ENUMLOGFONTEXW));
-        memcpy(pntm,&face->ntm,sizeof(NEWTEXTMETRICEXW));
-        *ptype = face->type;
+        memcpy(pelf, &face->cached_enum_data->elf, sizeof(ENUMLOGFONTEXW));
+        memcpy(pntm, &face->cached_enum_data->ntm, sizeof(NEWTEXTMETRICEXW));
+        *ptype = face->cached_enum_data->type;
         return;
     }
 
@@ -3374,10 +3378,13 @@
     if(!(pntm->ntmTm.tmPitchAndFamily & TMPF_VECTOR))
         *ptype |= RASTER_FONTTYPE;
 
-    memcpy(&face->elf,pelf,sizeof(ENUMLOGFONTEXW));
-    memcpy(&face->ntm,pntm,sizeof(NEWTEXTMETRICEXW));
-    face->type = *ptype;
-    face->cache_valid = TRUE;
+    face->cached_enum_data = HeapAlloc(GetProcessHeap(), 0, sizeof(*face->cached_enum_data));
+    if (face->cached_enum_data)
+    {
+        memcpy(&face->cached_enum_data->elf, pelf, sizeof(ENUMLOGFONTEXW));
+        memcpy(&face->cached_enum_data->ntm, pntm, sizeof(NEWTEXTMETRICEXW));
+        face->cached_enum_data->type = *ptype;
+    }
 
     free_font(font);
 }