Fixed strict-aliasing issue that gcc 4.4 complains about.
--- 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--)
{