Fixed strict-aliasing issue that gcc 4.4 complains about. stable-2.0
authorRyan C. Gordon <icculus@icculus.org>
Sun, 03 May 2009 01:24:41 -0700
branchstable-2.0
changeset 996 0410dc655d45
parent 971 845a258ba28e
child 997 1c207582d809
child 1000 66f622c889bc
Fixed strict-aliasing issue that gcc 4.4 complains about.
archivers/zip.c
--- a/archivers/zip.c	Mon Mar 23 16:57:59 2009 -0400
+++ b/archivers/zip.c	Sun May 03 01:24:41 2009 -0700
@@ -375,13 +375,13 @@
 static PHYSFS_sint64 zip_find_end_of_central_dir(void *in, PHYSFS_sint64 *len)
 {
     PHYSFS_uint8 buf[256];
+    PHYSFS_uint8 extra[4];
     PHYSFS_sint32 i = 0;
     PHYSFS_sint64 filelen;
     PHYSFS_sint64 filepos;
     PHYSFS_sint32 maxread;
     PHYSFS_sint32 totalread = 0;
     int found = 0;
-    PHYSFS_uint32 extra = 0;
 
     filelen = __PHYSFS_platformFileLength(in);
     BAIL_IF_MACRO(filelen == -1, NULL, 0);  /* !!! FIXME: unlocalized string */
@@ -419,7 +419,7 @@
         {
             if (__PHYSFS_platformRead(in, buf, maxread - 4, 1) != 1)
                 return(-1);
-            *((PHYSFS_uint32 *) (&buf[maxread - 4])) = extra;
+            memcpy(&buf[maxread - 4], &extra, sizeof (extra));
             totalread += maxread - 4;
         } /* if */
         else
@@ -429,7 +429,7 @@
             totalread += maxread;
         } /* else */
 
-        extra = *((PHYSFS_uint32 *) (&buf[0]));
+        memcpy(&extra, buf, sizeof (extra));
 
         for (i = maxread - 4; i > 0; i--)
         {