diff options
| author | robojumper <robojumper@gmail.com> | 2024-09-30 02:34:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-29 20:34:33 -0400 |
| commit | ed4aa2311932f216067bfbc31bb692247c93ac55 (patch) | |
| tree | 569fb28a5dd77a9996cdb67abb455a63388e86d8 /src/d/d_rawarchive.cpp | |
| parent | fe1c06e056e3c9cfe96edd44af7a879175005f27 (diff) | |
d_rawarchive followups (#42)
* d_rawarchive followups
* symbols hygiene
* Add Egg function
Diffstat (limited to 'src/d/d_rawarchive.cpp')
| -rw-r--r-- | src/d/d_rawarchive.cpp | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/src/d/d_rawarchive.cpp b/src/d/d_rawarchive.cpp index e475eeaf..b69e1a2b 100644 --- a/src/d/d_rawarchive.cpp +++ b/src/d/d_rawarchive.cpp @@ -1,18 +1,8 @@ #include <d/d_rawarchive.h> #include <rvl/VI.h> -class UnkManager { -public: - /* vtable at 8050df50 */ - /** 800651c0 */ - virtual void CreateArc(void *data, const char *path); - /** 800653d0 */ - virtual void DestroyArc(const char *path); - - u32 stage; -}; - -extern "C" int fn_80061B10(void *d, u32 len) { + +int computeChecksumInner(void *d, u32 len) { u32 *data = (u32 *)d; u32 result = 0; // Compiler will unroll this loop @@ -22,16 +12,15 @@ extern "C" int fn_80061B10(void *d, u32 len) { return result; } -extern "C" int fn_80061BA0(void *data, u32 len) { - int result = fn_80061B10(data, len); +int computeChecksum(void *data, u32 len) { + int result = computeChecksumInner(data, len); return result != 0 ? result : -1; } -extern "C" void fn_80061BE0(UnkManager *mgr, const char *name, size_t len) { - // Sets stage to all spaces - mgr->stage = 0x20202020; - // copies the stage name? - memcpy((char *)&mgr->stage, name, len); +void setPrefix(ArcCallbackHandler *mgr, const char *name, size_t len) { + mgr->mPrefix = ' '; + // Copy the actual name + memcpy(&mgr->mPrefix, name, len); } dRawArcEntry_c::dRawArcEntry_c() { @@ -55,18 +44,18 @@ dRawArcEntry_c::~dRawArcEntry_c() { } void dRawArcEntry_c::searchCallback(void *arg, void *data, const ARCDirEntry *entry, const char *path, bool ctrl) { - UnkManager *mgr = (UnkManager *)arg; + ArcCallbackHandler *mgr = (ArcCallbackHandler *)arg; if (entry->isDir) { int len = strlen(entry->name); - fn_80061BE0(mgr, entry->name, len <= 4 ? len : 4); + setPrefix(mgr, entry->name, len <= 4 ? len : 4); } else { // dolphin: arg vtable at 8050df50 // any others? if (ctrl) { - mgr->CreateArc(data, path); + mgr->CreateArcEntry(data, path); // branch to 800651c0, sets up room } else { - mgr->DestroyArc(path); + mgr->DestroyArcEntry(path); // branch to 800653d0, destroys room } } @@ -153,7 +142,7 @@ BOOL dRawArcEntry_c::checkArcExistsOnDiskInner(SizedString<128> &path, const cha return true; } -int dRawArcEntry_c::mount(const char *name, void *data, void *callbackArg, u8 mountDirection, EGG::Heap *heap) { +int dRawArcEntry_c::mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap) { mArcName = name; mpArc = EGG::Archive::mount(data, heap, (mountDirection == 0 || mountDirection == 1) ? 4 : -4); if (mpArc == nullptr) { @@ -201,7 +190,7 @@ int dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { int result = onMount(callbackArg); mHeap::restoreCurrentHeap(); mHeap::adjustFrmHeap(mpFrmHeap); - mChecksum = fn_80061BA0(mpData, mAmountRead); + mChecksum = computeChecksum(mpData, mAmountRead); if (result == -1) { return result; } @@ -233,7 +222,7 @@ dRawArcTable_c::~dRawArcTable_c() { } } -bool dRawArcTable_c::init(u16 count, void *callbackArg, EGG::Heap *heap) { +bool dRawArcTable_c::init(u16 count, ArcCallbackHandler *callbackArg, EGG::Heap *heap) { mpEntries = new (heap, 0x04) dRawArcEntry_c[count](); if (mpEntries == nullptr) { return false; |
