X-Git-Url: https://sfsrealm.hopto.org/projects/gitweb.cgi?p=SFmpqapi.git;a=blobdiff_plain;f=SFmpqapi.cpp;h=a5b264fd90f88708386cb5399ee7f1991652de91;hp=c9a7322030b4a7fa1a8b52451a5df41251dd9bec;hb=46511c53b667ffb988cf1673c3939e9ef3d26dd8;hpb=95d2f3da180aa6c7e67dcd3477cd133e2371e983 diff --git a/SFmpqapi.cpp b/SFmpqapi.cpp index c9a7322..a5b264f 100644 --- a/SFmpqapi.cpp +++ b/SFmpqapi.cpp @@ -12,7 +12,7 @@ #include #endif -#include "SComp.h" +#include "../SComp/SComp.h" #include "SFmpqapi.h" @@ -3227,12 +3227,19 @@ MPQHANDLE GetFreeHashTableEntry(MPQHANDLE hMPQ, LPCSTR lpFileName, LCID FileLoca DWORD dwTablePos = HashString(lpFileName,HASH_POSITION) % mpqOpenArc->MpqHeader.dwHashTableSize; DWORD dwNameHashA = HashString(lpFileName,HASH_NAME_A); DWORD dwNameHashB = HashString(lpFileName,HASH_NAME_B); - DWORD i=dwTablePos; + DWORD i=dwTablePos, nFirstFree = 0xFFFFFFFF; do { - if ((mpqOpenArc->lpHashTable[i].dwBlockTableIndex&0xFFFFFFFE)==0xFFFFFFFE) + if ((mpqOpenArc->lpHashTable[i].dwBlockTableIndex&0xFFFFFFFE)==0xFFFFFFFE && nFirstFree == 0xFFFFFFFF) { - return (MPQHANDLE)&mpqOpenArc->lpHashTable[i]; + if (mpqOpenArc->lpHashTable[i].dwBlockTableIndex == 0xFFFFFFFF) + { + if (nFirstFree == 0xFFFFFFFF) + return (MPQHANDLE)&mpqOpenArc->lpHashTable[i]; + else + return (MPQHANDLE)&mpqOpenArc->lpHashTable[nFirstFree]; + } + else nFirstFree = i; } else if (mpqOpenArc->lpHashTable[i].dwNameHashA==dwNameHashA && mpqOpenArc->lpHashTable[i].dwNameHashB==dwNameHashB && mpqOpenArc->lpHashTable[i].lcLocale==FileLocale) {