r930 - branches/stable-1.0 branches/stable-1.0/archivers trunk trunk/archivers
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Feb 20 07:24:11 EST 2008
Author: icculus
Date: 2008-02-20 07:24:10 -0500 (Wed, 20 Feb 2008)
New Revision: 930
Modified:
branches/stable-1.0/CHANGELOG
branches/stable-1.0/archivers/grp.c
branches/stable-1.0/archivers/hog.c
branches/stable-1.0/archivers/mvl.c
branches/stable-1.0/archivers/qpak.c
branches/stable-1.0/archivers/wad.c
branches/stable-1.0/archivers/zip.c
trunk/CHANGELOG.txt
trunk/archivers/grp.c
trunk/archivers/hog.c
trunk/archivers/mvl.c
trunk/archivers/qpak.c
trunk/archivers/wad.c
trunk/archivers/zip.c
Log:
Various archiver swap and compare functions now check if they are
swapping/comparing an item against itself, for efficiency and to prevent
overlapping memcpy() calls.
Modified: branches/stable-1.0/CHANGELOG
===================================================================
--- branches/stable-1.0/CHANGELOG 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/CHANGELOG 2008-02-20 12:24:10 UTC (rev 930)
@@ -4,6 +4,9 @@
-- stuff in the stable-1.0 branch, backported from 2.0.0 dev branch, etc ---
+02202008 - Various archiver swap and compare functions now check if they are
+ swapping/comparing an item against itself, for efficiency and
+ to prevent overlapping memcpy() calls.
02132008 - Minor Windows fix (thanks, fydo!).
01222008 - Added zlib README, and updated LICENSE.txt.
01212008 - Fixed HTTP header in physfshttpd.c.
Modified: branches/stable-1.0/archivers/grp.c
===================================================================
--- branches/stable-1.0/archivers/grp.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/grp.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -263,19 +263,27 @@
static int grp_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- GRPentry *a = (GRPentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const GRPentry *a = (const GRPentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* grp_entry_cmp */
static void grp_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- GRPentry tmp;
- GRPentry *first = &(((GRPentry *) _a)[one]);
- GRPentry *second = &(((GRPentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (GRPentry));
- memcpy(first, second, sizeof (GRPentry));
- memcpy(second, &tmp, sizeof (GRPentry));
+ if (one != two)
+ {
+ GRPentry tmp;
+ GRPentry *first = &(((GRPentry *) _a)[one]);
+ GRPentry *second = &(((GRPentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (GRPentry));
+ memcpy(first, second, sizeof (GRPentry));
+ memcpy(second, &tmp, sizeof (GRPentry));
+ } /* if */
} /* grp_entry_swap */
Modified: branches/stable-1.0/archivers/hog.c
===================================================================
--- branches/stable-1.0/archivers/hog.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/hog.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -300,19 +300,27 @@
static int hog_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- HOGentry *a = (HOGentry *) _a;
- return(__PHYSFS_platformStricmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const HOGentry *a = (const HOGentry *) _a;
+ return(__PHYSFS_platformStricmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* hog_entry_cmp */
static void hog_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- HOGentry tmp;
- HOGentry *first = &(((HOGentry *) _a)[one]);
- HOGentry *second = &(((HOGentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (HOGentry));
- memcpy(first, second, sizeof (HOGentry));
- memcpy(second, &tmp, sizeof (HOGentry));
+ if (one != two)
+ {
+ HOGentry tmp;
+ HOGentry *first = &(((HOGentry *) _a)[one]);
+ HOGentry *second = &(((HOGentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (HOGentry));
+ memcpy(first, second, sizeof (HOGentry));
+ memcpy(second, &tmp, sizeof (HOGentry));
+ } /* if */
} /* hog_entry_swap */
Modified: branches/stable-1.0/archivers/mvl.c
===================================================================
--- branches/stable-1.0/archivers/mvl.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/mvl.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -266,19 +266,27 @@
static int mvl_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- MVLentry *a = (MVLentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const MVLentry *a = (const MVLentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* mvl_entry_cmp */
static void mvl_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- MVLentry tmp;
- MVLentry *first = &(((MVLentry *) _a)[one]);
- MVLentry *second = &(((MVLentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (MVLentry));
- memcpy(first, second, sizeof (MVLentry));
- memcpy(second, &tmp, sizeof (MVLentry));
+ if (one != two)
+ {
+ MVLentry tmp;
+ MVLentry *first = &(((MVLentry *) _a)[one]);
+ MVLentry *second = &(((MVLentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (MVLentry));
+ memcpy(first, second, sizeof (MVLentry));
+ memcpy(second, &tmp, sizeof (MVLentry));
+ } /* if */
} /* mvl_entry_swap */
Modified: branches/stable-1.0/archivers/qpak.c
===================================================================
--- branches/stable-1.0/archivers/qpak.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/qpak.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -296,19 +296,27 @@
static int qpak_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- QPAKentry *a = (QPAKentry *) _a;
- return(QPAK_strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const QPAKentry *a = (const QPAKentry *) _a;
+ return(QPAK_strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* qpak_entry_cmp */
static void qpak_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- QPAKentry tmp;
- QPAKentry *first = &(((QPAKentry *) _a)[one]);
- QPAKentry *second = &(((QPAKentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (QPAKentry));
- memcpy(first, second, sizeof (QPAKentry));
- memcpy(second, &tmp, sizeof (QPAKentry));
+ if (one != two)
+ {
+ QPAKentry tmp;
+ QPAKentry *first = &(((QPAKentry *) _a)[one]);
+ QPAKentry *second = &(((QPAKentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (QPAKentry));
+ memcpy(first, second, sizeof (QPAKentry));
+ memcpy(second, &tmp, sizeof (QPAKentry));
+ } /* if */
} /* qpak_entry_swap */
Modified: branches/stable-1.0/archivers/wad.c
===================================================================
--- branches/stable-1.0/archivers/wad.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/wad.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -287,19 +287,27 @@
static int wad_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- WADentry *a = (WADentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const WADentry *a = (const WADentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* wad_entry_cmp */
static void wad_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- WADentry tmp;
- WADentry *first = &(((WADentry *) _a)[one]);
- WADentry *second = &(((WADentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (WADentry));
- memcpy(first, second, sizeof (WADentry));
- memcpy(second, &tmp, sizeof (WADentry));
+ if (one != two)
+ {
+ WADentry tmp;
+ WADentry *first = &(((WADentry *) _a)[one]);
+ WADentry *second = &(((WADentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (WADentry));
+ memcpy(first, second, sizeof (WADentry));
+ memcpy(second, &tmp, sizeof (WADentry));
+ } /* if */
} /* wad_entry_swap */
Modified: branches/stable-1.0/archivers/zip.c
===================================================================
--- branches/stable-1.0/archivers/zip.c 2008-02-13 05:48:57 UTC (rev 929)
+++ branches/stable-1.0/archivers/zip.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -992,19 +992,27 @@
static int zip_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- ZIPentry *a = (ZIPentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const ZIPentry *a = (const ZIPentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* zip_entry_cmp */
static void zip_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- ZIPentry tmp;
- ZIPentry *first = &(((ZIPentry *) _a)[one]);
- ZIPentry *second = &(((ZIPentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (ZIPentry));
- memcpy(first, second, sizeof (ZIPentry));
- memcpy(second, &tmp, sizeof (ZIPentry));
+ if (one != two)
+ {
+ ZIPentry tmp;
+ ZIPentry *first = &(((ZIPentry *) _a)[one]);
+ ZIPentry *second = &(((ZIPentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (ZIPentry));
+ memcpy(first, second, sizeof (ZIPentry));
+ memcpy(second, &tmp, sizeof (ZIPentry));
+ } /* if */
} /* zip_entry_swap */
Modified: trunk/CHANGELOG.txt
===================================================================
--- trunk/CHANGELOG.txt 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/CHANGELOG.txt 2008-02-20 12:24:10 UTC (rev 930)
@@ -2,6 +2,9 @@
* CHANGELOG.
*/
+02202008 - Various archiver swap and compare functions now check if they are
+ swapping/comparing an item against itself, for efficiency and
+ to prevent overlapping memcpy() calls.
02132008 - Minor Windows fix (thanks, fydo!).
02012008 - lzma fixes (thanks, eH!).
01222008 - Upgraded lzma sdk, lzma.c improvements (thanks, Dennis!).
Modified: trunk/archivers/grp.c
===================================================================
--- trunk/archivers/grp.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/grp.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -191,19 +191,27 @@
static int grp_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- GRPentry *a = (GRPentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const GRPentry *a = (const GRPentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* grp_entry_cmp */
static void grp_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- GRPentry tmp;
- GRPentry *first = &(((GRPentry *) _a)[one]);
- GRPentry *second = &(((GRPentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (GRPentry));
- memcpy(first, second, sizeof (GRPentry));
- memcpy(second, &tmp, sizeof (GRPentry));
+ if (one != two)
+ {
+ GRPentry tmp;
+ GRPentry *first = &(((GRPentry *) _a)[one]);
+ GRPentry *second = &(((GRPentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (GRPentry));
+ memcpy(first, second, sizeof (GRPentry));
+ memcpy(second, &tmp, sizeof (GRPentry));
+ } /* if */
} /* grp_entry_swap */
Modified: trunk/archivers/hog.c
===================================================================
--- trunk/archivers/hog.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/hog.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -228,19 +228,27 @@
static int hog_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- HOGentry *a = (HOGentry *) _a;
- return(__PHYSFS_stricmpASCII(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const HOGentry *a = (const HOGentry *) _a;
+ return(__PHYSFS_stricmpASCII(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* hog_entry_cmp */
static void hog_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- HOGentry tmp;
- HOGentry *first = &(((HOGentry *) _a)[one]);
- HOGentry *second = &(((HOGentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (HOGentry));
- memcpy(first, second, sizeof (HOGentry));
- memcpy(second, &tmp, sizeof (HOGentry));
+ if (one != two)
+ {
+ HOGentry tmp;
+ HOGentry *first = &(((HOGentry *) _a)[one]);
+ HOGentry *second = &(((HOGentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (HOGentry));
+ memcpy(first, second, sizeof (HOGentry));
+ memcpy(second, &tmp, sizeof (HOGentry));
+ } /* if */
} /* hog_entry_swap */
Modified: trunk/archivers/mvl.c
===================================================================
--- trunk/archivers/mvl.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/mvl.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -194,19 +194,27 @@
static int mvl_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- MVLentry *a = (MVLentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const MVLentry *a = (const MVLentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* mvl_entry_cmp */
static void mvl_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- MVLentry tmp;
- MVLentry *first = &(((MVLentry *) _a)[one]);
- MVLentry *second = &(((MVLentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (MVLentry));
- memcpy(first, second, sizeof (MVLentry));
- memcpy(second, &tmp, sizeof (MVLentry));
+ if (one != two)
+ {
+ MVLentry tmp;
+ MVLentry *first = &(((MVLentry *) _a)[one]);
+ MVLentry *second = &(((MVLentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (MVLentry));
+ memcpy(first, second, sizeof (MVLentry));
+ memcpy(second, &tmp, sizeof (MVLentry));
+ } /* if */
} /* mvl_entry_swap */
Modified: trunk/archivers/qpak.c
===================================================================
--- trunk/archivers/qpak.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/qpak.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -217,19 +217,27 @@
static int qpak_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- QPAKentry *a = (QPAKentry *) _a;
- return(QPAK_strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const QPAKentry *a = (const QPAKentry *) _a;
+ return(QPAK_strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* qpak_entry_cmp */
static void qpak_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- QPAKentry tmp;
- QPAKentry *first = &(((QPAKentry *) _a)[one]);
- QPAKentry *second = &(((QPAKentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (QPAKentry));
- memcpy(first, second, sizeof (QPAKentry));
- memcpy(second, &tmp, sizeof (QPAKentry));
+ if (one != two)
+ {
+ QPAKentry tmp;
+ QPAKentry *first = &(((QPAKentry *) _a)[one]);
+ QPAKentry *second = &(((QPAKentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (QPAKentry));
+ memcpy(first, second, sizeof (QPAKentry));
+ memcpy(second, &tmp, sizeof (QPAKentry));
+ } /* if */
} /* qpak_entry_swap */
Modified: trunk/archivers/wad.c
===================================================================
--- trunk/archivers/wad.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/wad.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -215,19 +215,27 @@
static int wad_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- WADentry *a = (WADentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const WADentry *a = (const WADentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* wad_entry_cmp */
static void wad_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- WADentry tmp;
- WADentry *first = &(((WADentry *) _a)[one]);
- WADentry *second = &(((WADentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (WADentry));
- memcpy(first, second, sizeof (WADentry));
- memcpy(second, &tmp, sizeof (WADentry));
+ if (one != two)
+ {
+ WADentry tmp;
+ WADentry *first = &(((WADentry *) _a)[one]);
+ WADentry *second = &(((WADentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (WADentry));
+ memcpy(first, second, sizeof (WADentry));
+ memcpy(second, &tmp, sizeof (WADentry));
+ } /* if */
} /* wad_entry_swap */
Modified: trunk/archivers/zip.c
===================================================================
--- trunk/archivers/zip.c 2008-02-13 05:48:57 UTC (rev 929)
+++ trunk/archivers/zip.c 2008-02-20 12:24:10 UTC (rev 930)
@@ -952,19 +952,27 @@
static int zip_entry_cmp(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- ZIPentry *a = (ZIPentry *) _a;
- return(strcmp(a[one].name, a[two].name));
+ if (one != two)
+ {
+ const ZIPentry *a = (const ZIPentry *) _a;
+ return(strcmp(a[one].name, a[two].name));
+ } /* if */
+
+ return 0;
} /* zip_entry_cmp */
static void zip_entry_swap(void *_a, PHYSFS_uint32 one, PHYSFS_uint32 two)
{
- ZIPentry tmp;
- ZIPentry *first = &(((ZIPentry *) _a)[one]);
- ZIPentry *second = &(((ZIPentry *) _a)[two]);
- memcpy(&tmp, first, sizeof (ZIPentry));
- memcpy(first, second, sizeof (ZIPentry));
- memcpy(second, &tmp, sizeof (ZIPentry));
+ if (one != two)
+ {
+ ZIPentry tmp;
+ ZIPentry *first = &(((ZIPentry *) _a)[one]);
+ ZIPentry *second = &(((ZIPentry *) _a)[two]);
+ memcpy(&tmp, first, sizeof (ZIPentry));
+ memcpy(first, second, sizeof (ZIPentry));
+ memcpy(second, &tmp, sizeof (ZIPentry));
+ } /* if */
} /* zip_entry_swap */
More information about the physfs-commits
mailing list