From a9d6c82b69e39530438b13d5d166204f9829c42a Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Thu, 22 Sep 2022 19:56:34 +0200 Subject: [PATCH] Fix duplicate parsing of dir contents --- src/RDat.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/RDat.cpp b/src/RDat.cpp index cda6c7b..2ac2ab2 100644 --- a/src/RDat.cpp +++ b/src/RDat.cpp @@ -151,7 +151,7 @@ RDI_RESULT RDat::ProcessFilesTree() { } RDI_RESULT RDat::ProcessDirectoryContents( DirectoryEntry* pCurDir, MEMFILE pDesc, const unsigned int count, MEMFILE pSectionStart ) { - unsigned int i; + unsigned int i, newDRECnt; DAT_FILE_FLAGS curEntryFlags = {0}; FileEntry* newFile = nullptr; @@ -176,10 +176,10 @@ RDI_RESULT RDat::ProcessDirectoryContents( DirectoryEntry* pCurDir, MEMFILE pDes newDir = new DirectoryEntry(tmpStr, curEntryFlags); pCurDir->AddEntry(newDir); - ProcessDirectoryContents(newDir, - pDesc + (i + 1) * sizeof(T_FILE_HEADER), - (((T_FILE_HEADER*)(pDesc + i * sizeof(T_FILE_HEADER)))->dir_entries_size - sizeof(T_FILE_HEADER)) / sizeof(T_FILE_HEADER), - pSectionStart); + // Keep entries count in new directory to jump over after processing it. + newDRECnt = (((T_FILE_HEADER*)(pDesc + i * sizeof(T_FILE_HEADER)))->dir_entries_size - sizeof(T_FILE_HEADER)) / sizeof(T_FILE_HEADER); + ProcessDirectoryContents(newDir, pDesc + (i + 1) * sizeof(T_FILE_HEADER), newDRECnt, pSectionStart); + if (newDRECnt <= count) i += newDRECnt; } }