diff --git a/dlls/gdi/metafile.c b/dlls/gdi/metafile.c index 2e95947b57c..2606aab3d0f 100644 --- a/dlls/gdi/metafile.c +++ b/dlls/gdi/metafile.c @@ -379,12 +379,10 @@ static METAHEADER *MF_LoadDiskBasedMetaFile(METAHEADER *mh) METAHEADER *MF_CreateMetaHeaderDisk(METAHEADER *mh, LPCVOID filename, BOOL uni ) { METAHEADERDISK *mhd; - DWORD size; mh = HeapReAlloc( GetProcessHeap(), 0, mh, sizeof(METAHEADER) + sizeof(METAHEADERDISK)); mh->mtType = METAFILE_DISK; - size = HeapSize( GetProcessHeap(), 0, mh ); mhd = (METAHEADERDISK *)((char *)mh + sizeof(METAHEADER)); if( uni ) @@ -475,7 +473,6 @@ HMETAFILE WINAPI CopyMetaFileW( HMETAFILE hSrcMetaFile, LPCWSTR lpFilename ) } WriteFile(hFile, mh2, mh2->mtSize * 2, &w, NULL); CloseHandle(hFile); - mh2 = MF_CreateMetaHeaderDisk(mh2, lpFilename, TRUE); } return MF_Create_HMETAFILE( mh2 ); diff --git a/dlls/gdi/tests/metafile.c b/dlls/gdi/tests/metafile.c index 365242e9d8f..c32d8fef67b 100644 --- a/dlls/gdi/tests/metafile.c +++ b/dlls/gdi/tests/metafile.c @@ -357,14 +357,53 @@ static int compare_mf_bits (const HMETAFILE mf, const unsigned char *bits, UINT return diff; } +static int compare_mf_disk_bits(LPCSTR name, const BYTE *bits, UINT bsize, const char *desc) +{ + unsigned char buf[MF_BUFSIZE]; + DWORD mfsize, rd_size, i; + int diff; + HANDLE hfile; + BOOL ret; + + hfile = CreateFileA(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); + assert(hfile != INVALID_HANDLE_VALUE); + + mfsize = GetFileSize(hfile, NULL); + assert(mfsize <= MF_BUFSIZE); + + ret = ReadFile(hfile, buf, sizeof(buf), &rd_size, NULL); + ok( ret && rd_size == mfsize, "ReadFile: error %ld\n", GetLastError()); + + CloseHandle(hfile); + + ok(mfsize == bsize, "%s: mfsize=%ld, bsize=%d.\n", desc, mfsize, bsize); + + if (mfsize != bsize) + return -1; + + diff = 0; + for (i=0; i