Switch to xxHash for hashing lump data
And shrink lumpinfo_t to a nice, round 32 bytes. We don't support 64-bit file sizes anyway
This commit is contained in:
parent
4ffd4621e4
commit
4a3ae30984
2 changed files with 29 additions and 25 deletions
|
|
@ -1860,8 +1860,8 @@ void R_LoadSpriteInfoLumps(UINT16 wadnum)
|
||||||
{ "SPR_", 4 },
|
{ "SPR_", 4 },
|
||||||
};
|
};
|
||||||
|
|
||||||
UINT16 i = W_CheckNumForNameMultiPrefixPwad(&sprtinfoprfx, NUMPREFIXES, wadnum, 0);
|
UINT16 i = W_CheckNumForNameMultiPrefixPwad(sprtinfoprfx, NUMPREFIXES, wadnum, 0);
|
||||||
for (; i != INT16_MAX; i = W_CheckNumForNameMultiPrefixPwad(&sprtinfoprfx, NUMPREFIXES, wadnum, i + 1))
|
for (; i != INT16_MAX; i = W_CheckNumForNameMultiPrefixPwad(sprtinfoprfx, NUMPREFIXES, wadnum, i + 1))
|
||||||
{
|
{
|
||||||
R_ParseSPRTINFOLump(wadnum, i);
|
R_ParseSPRTINFOLump(wadnum, i);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
50
src/w_wad.c
50
src/w_wad.c
|
|
@ -158,13 +158,13 @@ typedef struct zlentry_s
|
||||||
// a memory entry of the wad directory
|
// a memory entry of the wad directory
|
||||||
struct lumpinfo_t
|
struct lumpinfo_t
|
||||||
{
|
{
|
||||||
unsigned long position; // filelump_t filepos
|
UINT32 hash; // hash for longname in ALL CAPS
|
||||||
unsigned long disksize; // filelump_t size
|
UINT32 longname; // e.g. "LongEntryName"
|
||||||
size_t size; // real (uncompressed) size
|
UINT32 fullname; // e.g. "Folder/Subfolder/LongEntryName.extension"
|
||||||
UINT32 hash;
|
UINT32 position; // filelump_t filepos
|
||||||
UINT32 longname; // e.g. "LongEntryName"
|
UINT32 disksize; // filelump_t size
|
||||||
UINT32 fullname; // e.g. "Folder/Subfolder/LongEntryName.extension"
|
|
||||||
compmethod compression; // lump compression method
|
compmethod compression; // lump compression method
|
||||||
|
size_t size; // real (uncompressed) size
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
@ -180,7 +180,7 @@ typedef struct
|
||||||
typedef struct lumpnum_cache_s
|
typedef struct lumpnum_cache_s
|
||||||
{
|
{
|
||||||
char lumpname[32];
|
char lumpname[32];
|
||||||
UINT32 lumphash;
|
UINT32 lumphash; // hash for lumpname WITHOUT all caps
|
||||||
lumpnum_t lumpnum;
|
lumpnum_t lumpnum;
|
||||||
} lumpnum_cache_t;
|
} lumpnum_cache_t;
|
||||||
|
|
||||||
|
|
@ -518,7 +518,10 @@ static lumpinfo_t* ResGetLumpsStandalone (FILE* handle, UINT16* numlumps, const
|
||||||
fseek(handle, 0, SEEK_SET);
|
fseek(handle, 0, SEEK_SET);
|
||||||
|
|
||||||
lumpinfo->longname = lumpinfo->fullname = strbuf_append(&lumpnamebuf, lumpname);
|
lumpinfo->longname = lumpinfo->fullname = strbuf_append(&lumpnamebuf, lumpname);
|
||||||
lumpinfo->hash = quickncasehash(lumpname, 8);
|
char *name = strdup(lumpname);
|
||||||
|
strupr(name);
|
||||||
|
lumpinfo->hash = HASH32(lumpname, strlen(name));
|
||||||
|
free(name);
|
||||||
|
|
||||||
*numlumps = 1;
|
*numlumps = 1;
|
||||||
return lumpinfo;
|
return lumpinfo;
|
||||||
|
|
@ -657,7 +660,8 @@ static lumpinfo_t* ResGetLumpsWad (FILE* handle, UINT16* nlmp, const char* filen
|
||||||
CONS_Debug(DBG_SETUP, "WADNAME handling:\n -- path %s\n -- interpreted lumpname %s\n", filename, name);
|
CONS_Debug(DBG_SETUP, "WADNAME handling:\n -- path %s\n -- interpreted lumpname %s\n", filename, name);
|
||||||
|
|
||||||
// Grab the hash from the first part
|
// Grab the hash from the first part
|
||||||
lump_p->hash = quickncasehash(name, 8);
|
strupr(name);
|
||||||
|
lump_p->hash = HASH32(name, strlen(name));
|
||||||
free(name);
|
free(name);
|
||||||
|
|
||||||
wadnamelump = i | (numwadfiles << 16);
|
wadnamelump = i | (numwadfiles << 16);
|
||||||
|
|
@ -671,7 +675,8 @@ static lumpinfo_t* ResGetLumpsWad (FILE* handle, UINT16* nlmp, const char* filen
|
||||||
lump_p->longname = lump_p->fullname = strbuf_append(&lumpnamebuf, name);
|
lump_p->longname = lump_p->fullname = strbuf_append(&lumpnamebuf, name);
|
||||||
|
|
||||||
// Set up true hash
|
// Set up true hash
|
||||||
lump_p->hash = quickncasehash(name, 8);
|
strupr(name);
|
||||||
|
lump_p->hash = HASH32(name, strlen(name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(fileinfov);
|
free(fileinfov);
|
||||||
|
|
@ -781,15 +786,11 @@ static lumpinfo_t* ResGetLumpsZip (FILE* handle, UINT16* nlmp)
|
||||||
if ((dotpos = strrchr(trimname, '.')) == 0)
|
if ((dotpos = strrchr(trimname, '.')) == 0)
|
||||||
dotpos = fullname + strlen(fullname); // Watch for files without extension.
|
dotpos = fullname + strlen(fullname); // Watch for files without extension.
|
||||||
|
|
||||||
char backup = trimname[dotpos - trimname];
|
lump_p->fullname = strbuf_append(&lumpnamebuf, fullname);
|
||||||
trimname[dotpos - trimname] = '\0';
|
trimname[dotpos - trimname] = '\0';
|
||||||
lump_p->longname = strbuf_append(&lumpnamebuf, trimname);
|
lump_p->longname = strbuf_append(&lumpnamebuf, trimname);
|
||||||
char name[8];
|
strupr(trimname);
|
||||||
strncpy(name, trimname, 8);
|
lump_p->hash = HASH32(trimname, strlen(trimname));
|
||||||
lump_p->hash = quickncasehash(name, 8);
|
|
||||||
trimname[dotpos - trimname] = backup;
|
|
||||||
|
|
||||||
lump_p->fullname = strbuf_append(&lumpnamebuf, fullname);
|
|
||||||
|
|
||||||
switch(zentry.compression)
|
switch(zentry.compression)
|
||||||
{
|
{
|
||||||
|
|
@ -1232,7 +1233,7 @@ UINT16 W_CheckNumForNamePwad(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
|
|
||||||
strlcpy(uname, name, sizeof uname);
|
strlcpy(uname, name, sizeof uname);
|
||||||
strupr(uname);
|
strupr(uname);
|
||||||
hash = quickncasehash(uname, 8);
|
hash = HASH32(uname, strlen(uname));
|
||||||
|
|
||||||
//
|
//
|
||||||
// scan forward
|
// scan forward
|
||||||
|
|
@ -1268,7 +1269,7 @@ UINT16 W_CheckNumForLongNamePwad(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
|
|
||||||
strlcpy(uname, name, sizeof uname);
|
strlcpy(uname, name, sizeof uname);
|
||||||
strupr(uname);
|
strupr(uname);
|
||||||
hash = quickncasehash(uname, 8); // Not a mistake, legacy system for short lumpnames
|
hash = HASH32(uname, strlen(uname));
|
||||||
|
|
||||||
//
|
//
|
||||||
// scan forward
|
// scan forward
|
||||||
|
|
@ -1400,7 +1401,7 @@ UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
lumpnum_t W_CheckNumForName(const char *name)
|
lumpnum_t W_CheckNumForName(const char *name)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
UINT32 hash = name ? quickncasehash(name, 8) : 0;
|
UINT32 hash = name ? HASH32(name, strlen(name)) : 0;
|
||||||
lumpnum_t check = INT16_MAX;
|
lumpnum_t check = INT16_MAX;
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
|
|
@ -1452,7 +1453,7 @@ lumpnum_t W_CheckNumForName(const char *name)
|
||||||
lumpnum_t W_CheckNumForLongName(const char *name)
|
lumpnum_t W_CheckNumForLongName(const char *name)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
UINT32 hash = name ? quickncasehash(name, 8) : 0;
|
UINT32 hash = name ? HASH32(name, strlen(name)) : 0;
|
||||||
lumpnum_t check = INT16_MAX;
|
lumpnum_t check = INT16_MAX;
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
|
|
@ -1502,7 +1503,7 @@ lumpnum_t W_CheckNumForLongName(const char *name)
|
||||||
lumpnum_t W_CheckNumForMap(const char *name)
|
lumpnum_t W_CheckNumForMap(const char *name)
|
||||||
{
|
{
|
||||||
lumpnum_t check = INT16_MAX;
|
lumpnum_t check = INT16_MAX;
|
||||||
UINT32 uhash, hash = quickncasehash(name, LUMPNUMCACHENAME);
|
UINT32 uhash, hash = HASH32(name, min(strlen(name), LUMPNUMCACHENAME));
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
// Check the lumpnumcache first. Loop backwards so that we check
|
// Check the lumpnumcache first. Loop backwards so that we check
|
||||||
|
|
@ -1517,7 +1518,10 @@ lumpnum_t W_CheckNumForMap(const char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uhash = quickncasehash(name, 8); // Not a mistake, legacy system for short lumpnames
|
char *uname = strdup(name);
|
||||||
|
strupr(uname);
|
||||||
|
uhash = HASH32(name, strlen(uname));
|
||||||
|
free(uname);
|
||||||
|
|
||||||
for (i = numwadfiles - 1; i >= 0; i--)
|
for (i = numwadfiles - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue