Author: spouliot
Date: 2007-03-22 12:03:09 -0500 (Thu, 22 Mar 2007)
New Revision: 74820

Modified:
   trunk/libgdiplus/src/emfcodec.c
   trunk/libgdiplus/src/emfcodec.h
   trunk/libgdiplus/src/metafile.c
Log:
reworked endian fixes

Modified: trunk/libgdiplus/src/emfcodec.c
===================================================================
--- trunk/libgdiplus/src/emfcodec.c     2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/emfcodec.c     2007-03-22 17:03:09 UTC (rev 74820)
@@ -84,6 +84,14 @@
        return &emf_codec;
 }
 
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GETDW(x)       (*(DWORD*)(data + (x)))
+#define GETFLOAT(x)    (*(float*)(data + (x)))
+#else
+#define GETDW(x)       (GUINT32_FROM_LE(*(DWORD*)(data + (x))))
+#define GETFLOAT(x)    ((float)GETDW(x))
+#endif
+
 static DWORD
 GetColor (DWORD color)
 {

Modified: trunk/libgdiplus/src/emfcodec.h
===================================================================
--- trunk/libgdiplus/src/emfcodec.h     2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/emfcodec.h     2007-03-22 17:03:09 UTC (rev 74820)
@@ -41,14 +41,6 @@
                if (params < (x)) goto cleanup; \
        } while (0)
 
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define GETDW(x)       (*(DWORD*)(data + (x)))
-#define GETFLOAT(x)    (*(float*)(data + (x)))
-#else
-#define GETDW(x)       (GUINT32_FROM_LE(*(DWORD*)(data + (x))))
-#define GETFLOAT(x)    ((float)GETDW(x))
-#endif
-
 #define EMF_FUNCTION   0
 #define EMF_RECORDSIZE 4
 #define DWP1           8

Modified: trunk/libgdiplus/src/metafile.c
===================================================================
--- trunk/libgdiplus/src/metafile.c     2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/metafile.c     2007-03-22 17:03:09 UTC (rev 74820)
@@ -1059,9 +1059,24 @@
        return Ok;
 }
 
+static void
+WmfPlaceableFileHeaderLE (WmfPlaceableFileHeader *wmfPlaceableFileHeader)
+{
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+       /* header->Key is already adjusted */
+       wmfPlaceableFileHeader->Hmf = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Hmf);
+       wmfPlaceableFileHeader->BoundingBox.Left = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Left);
+       wmfPlaceableFileHeader->BoundingBox.Top = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Top);
+       wmfPlaceableFileHeader->BoundingBox.Right = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Right);
+       wmfPlaceableFileHeader->BoundingBox.Bottom = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Bottom);
+       wmfPlaceableFileHeader->Inch = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Inch);
+       wmfPlaceableFileHeader->Reserved = GUINT32_FROM_LE 
(wmfPlaceableFileHeader->Reserved);
+       wmfPlaceableFileHeader->Checksum = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Checksum);
+#endif
+}
 
-static GpStatus
-combine_headers (GDIPCONST WmfPlaceableFileHeader *wmfPlaceableFileHeader, 
MetafileHeader *header)
+static void
+MetafileHeaderLE (MetafileHeader *header)
 {
 #if G_BYTE_ORDER != G_LITTLE_ENDIAN
        header->WmfHeader.mtType = GUINT16_FROM_LE (header->WmfHeader.mtType);
@@ -1071,18 +1086,12 @@
        header->WmfHeader.mtNoObjects = GUINT16_FROM_LE 
(header->WmfHeader.mtNoObjects);
        header->WmfHeader.mtMaxRecord = GUINT32_FROM_LE 
(header->WmfHeader.mtMaxRecord);
        header->WmfHeader.mtNoParameters = GUINT16_FROM_LE 
(header->WmfHeader.mtNoParameters);
-       if (wmfPlaceableFileHeader) {
-               /* header->Key is already adjusted */
-               wmfPlaceableFileHeader->Hmf = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Hmf);
-               wmfPlaceableFileHeader->BoundingBox.Left = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Left);
-               wmfPlaceableFileHeader->BoundingBox.Top = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Top);
-               wmfPlaceableFileHeader->BoundingBox.Right = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Right);
-               wmfPlaceableFileHeader->BoundingBox.Bottom = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->BoundingBox.Bottom);
-               wmfPlaceableFileHeader->Inch = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Inch);
-               wmfPlaceableFileHeader->Reserved = GUINT32_FROM_LE 
(wmfPlaceableFileHeader->Reserved);
-               wmfPlaceableFileHeader->Checksum = GUINT16_FROM_LE 
(wmfPlaceableFileHeader->Checksum);
-       }
 #endif
+}
+
+static GpStatus
+combine_headers (GDIPCONST WmfPlaceableFileHeader *wmfPlaceableFileHeader, 
MetafileHeader *header)
+{
        if (wmfPlaceableFileHeader) {
                header->Type = METAFILETYPE_WMFPLACEABLE;
                header->X = wmfPlaceableFileHeader->BoundingBox.Left;
@@ -1172,6 +1181,8 @@
                if (gdip_read_wmf_data (pointer, (void*)&header->WmfHeader, 
size, useFile) != size)
                        return InvalidParameter;
 
+               WmfPlaceableFileHeaderLE (&aldus_header);
+               MetafileHeaderLE (header);
                status = combine_headers (&aldus_header, header);
                break;
        case WMF_TYPE_AND_HEADERSIZE_KEY:
@@ -1181,6 +1192,7 @@
                if (gdip_read_wmf_data (pointer, (void*)(&header->WmfHeader) + 
sizeof (DWORD), size, useFile) != size)
                        return InvalidParameter;
 
+               MetafileHeaderLE (header);
                status = combine_headers (NULL, header);
                break;
        case EMF_EMR_HEADER_KEY:

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to