Browse Source

Clean up mpqapi_parse_archive_header

pull/114/head
Anders Jenbo 7 years ago
parent
commit
8af652c4e1
  1. 70
      Source/mpqapi.cpp
  2. 2
      Source/mpqapi.h

70
Source/mpqapi.cpp

@ -545,47 +545,45 @@ BOOL mpqapi_open_archive(const char *pszArchive, BOOL hidden, int dwChar) // Ope
// 65AB14: using guessed type char save_archive_open; // 65AB14: using guessed type char save_archive_open;
// 679660: using guessed type char gbMaxPlayers; // 679660: using guessed type char gbMaxPlayers;
BOOLEAN mpqapi_parse_archive_header(_FILEHEADER *pHdr, int *pdwNextFileStart) // ParseMPQHeader BOOL mpqapi_parse_archive_header(_FILEHEADER *pHdr, int *pdwNextFileStart) // ParseMPQHeader
{ {
int *v2; // ebp DWORD size;
_FILEHEADER *v3; // esi DWORD NumberOfBytesRead;
DWORD v4; // eax
DWORD v5; // edi size = GetFileSize(sghArchive, 0);
DWORD NumberOfBytesRead; // [esp+10h] [ebp-4h] *pdwNextFileStart = size;
v2 = pdwNextFileStart; if (size == -1
v3 = pHdr; || size < 0x68
v4 = GetFileSize(sghArchive, 0); || !ReadFile(sghArchive, pHdr, 0x68u, &NumberOfBytesRead, NULL)
v5 = v4;
*v2 = v4;
if (v4 == -1
|| v4 < 0x68
|| !ReadFile(sghArchive, v3, 0x68u, &NumberOfBytesRead, NULL)
|| NumberOfBytesRead != 104 || NumberOfBytesRead != 104
|| v3->signature != '\x1AQPM' || pHdr->signature != '\x1AQPM'
|| v3->headersize != 32 || pHdr->headersize != 32
|| v3->version > 0u || pHdr->version > 0u
|| v3->sectorsizeid != 3 || pHdr->sectorsizeid != 3
|| v3->filesize != v5 || pHdr->filesize != size
|| v3->hashoffset != 32872 || pHdr->hashoffset != 32872
|| v3->blockoffset != 104 || pHdr->blockoffset != 104
|| v3->hashcount != 2048 || pHdr->hashcount != 2048
|| v3->blockcount != 2048) { || pHdr->blockcount != 2048) {
if (SetFilePointer(sghArchive, 0, NULL, FILE_BEGIN) == -1 || !SetEndOfFile(sghArchive))
return 0; if (SetFilePointer(sghArchive, 0, NULL, FILE_BEGIN) == -1)
memset(v3, 0, 0x68u); return FALSE;
v3->signature = '\x1AQPM'; if (!SetEndOfFile(sghArchive))
v3->headersize = 32; return FALSE;
v3->sectorsizeid = 3;
v3->version = 0; memset(pHdr, 0, 0x68u);
*v2 = 0x10068; pHdr->signature = '\x1AQPM';
pHdr->headersize = 32;
pHdr->sectorsizeid = 3;
pHdr->version = 0;
*pdwNextFileStart = 0x10068;
save_archive_modified = 1; save_archive_modified = 1;
save_archive_open = 1; save_archive_open = 1;
} }
return 1;
return TRUE;
} }
// 65AB0C: using guessed type int save_archive_modified;
// 65AB14: using guessed type char save_archive_open;
void mpqapi_close_archive(const char *pszArchive, BOOL bFree, int dwChar) // CloseMPQ void mpqapi_close_archive(const char *pszArchive, BOOL bFree, int dwChar) // CloseMPQ
{ {
@ -606,8 +604,6 @@ void mpqapi_close_archive(const char *pszArchive, BOOL bFree, int dwChar) // Clo
mpqapi_store_creation_time(pszArchive, dwChar); mpqapi_store_creation_time(pszArchive, dwChar);
} }
} }
// 65AB0C: using guessed type int save_archive_modified;
// 65AB14: using guessed type char save_archive_open;
void mpqapi_store_modified_time(const char *pszArchive, int dwChar) void mpqapi_store_modified_time(const char *pszArchive, int dwChar)
{ {

2
Source/mpqapi.h

@ -26,7 +26,7 @@ int mpqapi_find_free_block(int size, int *block_size);
void mpqapi_rename(char *pszOld, char *pszNew); void mpqapi_rename(char *pszOld, char *pszNew);
BOOL mpqapi_has_file(const char *pszName); BOOL mpqapi_has_file(const char *pszName);
BOOL mpqapi_open_archive(const char *pszArchive, BOOL hidden, int dwChar); BOOL mpqapi_open_archive(const char *pszArchive, BOOL hidden, int dwChar);
BOOLEAN mpqapi_parse_archive_header(_FILEHEADER *pHdr, int *pdwNextFileStart); BOOL mpqapi_parse_archive_header(_FILEHEADER *pHdr, int *pdwNextFileStart);
void mpqapi_close_archive(const char *pszArchive, BOOL bFree, int dwChar); void mpqapi_close_archive(const char *pszArchive, BOOL bFree, int dwChar);
void mpqapi_store_modified_time(const char *pszArchive, int dwChar); void mpqapi_store_modified_time(const char *pszArchive, int dwChar);
void mpqapi_flush_and_close(const char *pszArchive, BOOL bFree, int dwChar); void mpqapi_flush_and_close(const char *pszArchive, BOOL bFree, int dwChar);

Loading…
Cancel
Save