GDI: unicodify CreateMetaFile (take 2)

Mike McCormack mike at codeweavers.com
Sun Mar 28 07:20:07 CST 2004


ChangeLog:
* unicodify CreateMetaFile

-------------- next part --------------
? dlls/gdi/gdi32.spec.c
? dlls/gdi/tests/gdi32_test.exe.spec.c
Index: objects/metafile.c
===================================================================
RCS file: /home/wine/wine/objects/metafile.c,v
retrieving revision 1.64
diff -u -r1.64 metafile.c
--- objects/metafile.c	4 Mar 2004 20:41:12 -0000	1.64
+++ objects/metafile.c	28 Mar 2004 12:28:45 -0000
@@ -370,7 +370,7 @@
  * Take a memory based METAHEADER and change it to a disk based METAHEADER
  * assosiated with filename.  Note: Trashes contents of old one.
  */
-METAHEADER *MF_CreateMetaHeaderDisk(METAHEADER *mh, LPCSTR filename)
+METAHEADER *MF_CreateMetaHeaderDisk(METAHEADER *mh, LPCVOID filename, BOOL uni )
 {
     METAHEADERDISK *mhd;
     DWORD size;
@@ -380,7 +380,12 @@
     mh->mtType = METAFILE_DISK;
     size = HeapSize( GetProcessHeap(), 0, mh );
     mhd = (METAHEADERDISK *)((char *)mh + sizeof(METAHEADER));
-    strcpy(mhd->filename, filename);
+
+    if( uni )
+        WideCharToMultiByte(CP_ACP, 0, filename, -1, 
+                   mhd->filename, sizeof mhd->filename, NULL, NULL);
+    else
+        strncpy( mhd->filename, filename, sizeof mhd->filename );
     return mh;
 }
 
@@ -413,7 +418,7 @@
 	}
 	WriteFile(hFile, mh2, mh2->mtSize * 2, NULL, NULL);
 	CloseHandle(hFile);
-	mh2 = MF_CreateMetaHeaderDisk(mh2, lpFilename);
+	mh2 = MF_CreateMetaHeaderDisk(mh2, lpFilename, FALSE);
     }
 
     return MF_Create_HMETAFILE16( mh2 );
@@ -455,8 +460,6 @@
     }
 
     if(lpFilename) {         /* disk based metafile */
-        DWORD len;
-        LPSTR lpFilenameA;
         if((hFile = CreateFileW(lpFilename, GENERIC_WRITE, 0, NULL,
 				CREATE_ALWAYS, 0, 0)) == INVALID_HANDLE_VALUE) {
 	    HeapFree( GetProcessHeap(), 0, mh2 );
@@ -464,11 +467,7 @@
 	}
 	WriteFile(hFile, mh2, mh2->mtSize * 2, NULL, NULL);
 	CloseHandle(hFile);
-        len = WideCharToMultiByte(CP_ACP, 0, lpFilename, -1, NULL, 0, NULL, NULL);
-        lpFilenameA = HeapAlloc(GetProcessHeap(), 0, len);
-        WideCharToMultiByte(CP_ACP, 0, lpFilename, -1, lpFilenameA, len, NULL, NULL);
-        mh2 = MF_CreateMetaHeaderDisk(mh2, lpFilenameA);
-        HeapFree(GetProcessHeap(), 0, lpFilenameA);
+        mh2 = MF_CreateMetaHeaderDisk(mh2, lpFilename, TRUE);
     }
 
     return MF_Create_HMETAFILE( mh2 );
Index: dlls/gdi/gdi_private.h
===================================================================
RCS file: /home/wine/wine/dlls/gdi/gdi_private.h,v
retrieving revision 1.10
diff -u -r1.10 gdi_private.h
--- dlls/gdi/gdi_private.h	12 Mar 2004 19:46:13 -0000	1.10
+++ dlls/gdi/gdi_private.h	28 Mar 2004 12:28:45 -0000
@@ -356,7 +356,7 @@
 /* metafile.c */
 extern HMETAFILE MF_Create_HMETAFILE(METAHEADER *mh);
 extern HMETAFILE16 MF_Create_HMETAFILE16(METAHEADER *mh);
-extern METAHEADER *MF_CreateMetaHeaderDisk(METAHEADER *mr, LPCSTR filename);
+extern METAHEADER *MF_CreateMetaHeaderDisk(METAHEADER *mr, LPCVOID filename, BOOL unicode );
 
 /* path.c */
 
Index: dlls/gdi/mfdrv/init.c
===================================================================
RCS file: /home/wine/wine/dlls/gdi/mfdrv/init.c,v
retrieving revision 1.29
diff -u -r1.29 init.c
--- dlls/gdi/mfdrv/init.c	15 Jan 2004 00:35:40 -0000	1.29
+++ dlls/gdi/mfdrv/init.c	28 Mar 2004 12:28:45 -0000
@@ -222,7 +222,7 @@
 
 
 /**********************************************************************
- *	     CreateMetaFileA   (GDI32.@)
+ *	     CreateMetaFileW   (GDI32.@)
  *
  *  Create a new DC and associate it with a metafile. Pass a filename
  *  to create a disk-based metafile, NULL to create a memory metafile.
@@ -230,14 +230,14 @@
  * RETURNS
  *  A handle to the metafile DC if successful, NULL on failure.
  */
-HDC WINAPI CreateMetaFileA( LPCSTR filename ) /* [in] Filename of disk metafile */
+HDC WINAPI CreateMetaFileW( LPCWSTR filename ) /* [in] Filename of disk metafile */
 {
     HDC ret;
     DC *dc;
     METAFILEDRV_PDEVICE *physDev;
     HANDLE hFile;
 
-    TRACE("'%s'\n", filename );
+    TRACE("'%s'\n", debugstr_w(filename) );
 
     if (!(dc = MFDRV_AllocMetaFile())) return 0;
     physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
@@ -245,12 +245,12 @@
     if (filename)  /* disk based metafile */
     {
         physDev->mh->mtType = METAFILE_DISK;
-        if ((hFile = CreateFileA(filename, GENERIC_WRITE, 0, NULL,
+        if ((hFile = CreateFileW(filename, GENERIC_WRITE, 0, NULL,
 				CREATE_ALWAYS, 0, 0)) == INVALID_HANDLE_VALUE) {
             MFDRV_DeleteDC( dc->physDev );
             return 0;
         }
-        if (!WriteFile( hFile, (LPSTR)physDev->mh, sizeof(*physDev->mh), NULL,
+        if (!WriteFile( hFile, physDev->mh, sizeof(*physDev->mh), NULL,
 			NULL )) {
             MFDRV_DeleteDC( dc->physDev );
             return 0;
@@ -258,7 +258,7 @@
 	physDev->hFile = hFile;
 
 	/* Grow METAHEADER to include filename */
-	physDev->mh = MF_CreateMetaHeaderDisk(physDev->mh, filename);
+	physDev->mh = MF_CreateMetaHeaderDisk(physDev->mh, filename, TRUE);
     }
     else  /* memory based metafile */
 	physDev->mh->mtType = METAFILE_MEMORY;
@@ -270,23 +270,23 @@
 }
 
 /**********************************************************************
- *          CreateMetaFileW   (GDI32.@)
+ *          CreateMetaFileA   (GDI32.@)
  */
-HDC WINAPI CreateMetaFileW(LPCWSTR filename)
+HDC WINAPI CreateMetaFileA(LPCSTR filename)
 {
-    LPSTR filenameA;
+    LPWSTR filenameW;
     DWORD len;
     HDC hReturnDC;
 
-    if (!filename) return CreateMetaFileA(NULL);
+    if (!filename) return CreateMetaFileW(NULL);
 
-    len = WideCharToMultiByte( CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL );
-    filenameA = HeapAlloc( GetProcessHeap(), 0, len );
-    WideCharToMultiByte( CP_ACP, 0, filename, -1, filenameA, len, NULL, NULL );
+    len = MultiByteToWideChar( CP_ACP, 0, filename, -1, NULL, 0 );
+    filenameW = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
+    MultiByteToWideChar( CP_ACP, 0, filename, -1, filenameW, len );
 
-    hReturnDC = CreateMetaFileA(filenameA);
+    hReturnDC = CreateMetaFileW(filenameW);
 
-    HeapFree( GetProcessHeap(), 0, filenameA );
+    HeapFree( GetProcessHeap(), 0, filenameW );
 
     return hReturnDC;
 }


More information about the wine-patches mailing list