Avoid excessive heap memory reallocation when generating EMF
metarecords in memory.

diff --git a/dlls/gdi/enhmfdrv/init.c b/dlls/gdi/enhmfdrv/init.c
index 4c7323b..9ce5460 100644
--- a/dlls/gdi/enhmfdrv/init.c
+++ b/dlls/gdi/enhmfdrv/init.c
@@ -185,12 +185,16 @@
 	if (!WriteFile(physDev->hFile, (char *)emr, emr->nSize, NULL, NULL))
 	    return FALSE;
     } else {
-	len = physDev->emh->nBytes;
-	emh = HeapReAlloc( GetProcessHeap(), 0, physDev->emh, len );
-        if (!emh) return FALSE;
-        physDev->emh = emh;
-	memcpy((CHAR *)physDev->emh + physDev->emh->nBytes - emr->nSize, emr,
-	       emr->nSize);
+        DWORD nEmfSize = HeapSize(GetProcessHeap(), 0, physDev->emh);
+        len = physDev->emh->nBytes;
+        if (len > nEmfSize) {
+            nEmfSize += (nEmfSize / 2) + emr->nSize;
+            emh = HeapReAlloc(GetProcessHeap(), 0, physDev->emh, nEmfSize);
+            if (!emh) return FALSE;
+            physDev->emh = emh;
+        }
+        memcpy((CHAR *)physDev->emh + physDev->emh->nBytes - emr->nSize, emr,
+               emr->nSize);
     }
     return TRUE;
 }