summaryrefslogtreecommitdiff
path: root/src/JSystem/JKernel/JKRArchivePri.cpp
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2026-01-04 17:22:56 -0800
committerGitHub <noreply@github.com>2026-01-04 17:22:56 -0800
commitdeb7bead205cb35ff5f57ee3d466179defde44cb (patch)
tree22809a707a49f0253f05d45659cd142dacc0ca83 /src/JSystem/JKernel/JKRArchivePri.cpp
parent1400687731baedd9419dbf3972c50e3faab0f24e (diff)
JKernel debug (#3012)
Diffstat (limited to 'src/JSystem/JKernel/JKRArchivePri.cpp')
-rw-r--r--src/JSystem/JKernel/JKRArchivePri.cpp54
1 files changed, 32 insertions, 22 deletions
diff --git a/src/JSystem/JKernel/JKRArchivePri.cpp b/src/JSystem/JKernel/JKRArchivePri.cpp
index 92d655ec9a..c39d1bc70a 100644
--- a/src/JSystem/JKernel/JKRArchivePri.cpp
+++ b/src/JSystem/JKernel/JKRArchivePri.cpp
@@ -7,6 +7,11 @@
u32 JKRArchive::sCurrentDirID;
+JKRArchive::JKRArchive() {
+ mIsMounted = false;
+ mMountDirection = MOUNT_DIRECTION_HEAD;
+}
+
JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) {
mIsMounted = false;
mMountMode = mountMode;
@@ -19,9 +24,9 @@ JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) {
}
mEntryNum = entryNumber;
- if (getCurrentVolume() == NULL) {
- setCurrentVolume(this);
- setCurrentDirID(0);
+ if (sCurrentVolume == NULL) {
+ sCurrentVolume = this;
+ sCurrentDirID = 0;
}
}
@@ -36,14 +41,12 @@ bool JKRArchive::isSameName(JKRArchive::CArcName& name, u32 nameOffset, u16 name
JKRArchive::SDIDirEntry* JKRArchive::findResType(u32 type) const {
SDIDirEntry* node = mNodes;
- u32 count = 0;
- while (count < mArcInfoBlock->num_nodes) {
+ for (u32 count = 0; count < mArcInfoBlock->num_nodes; count++) {
if (node->type == type) {
return node;
}
node++;
- count++;
}
return NULL;
@@ -58,13 +61,14 @@ JKRArchive::SDIDirEntry* JKRArchive::findDirectory(const char* name, u32 directo
SDIDirEntry* dirEntry = mNodes + directoryId;
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
- for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
- if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->name_hash)) {
- if (fileEntry->isDirectory()) {
+ for (int i = 0; i < dirEntry->num_entries; i++) {
+ if (isSameName(arcName, fileEntry->type_flags_and_name_offset & 0xFFFFFF, fileEntry->name_hash)) {
+ if ((fileEntry->type_flags_and_name_offset >> 24) & 2) {
return findDirectory(name, fileEntry->data_offset);
}
break;
}
+ fileEntry++;
}
return NULL;
@@ -77,10 +81,11 @@ JKRArchive::SDIFileEntry* JKRArchive::findTypeResource(u32 type, const char* nam
if (dirEntry) {
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
- for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
- if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->getNameHash())) {
+ for (int i = 0; i < dirEntry->num_entries; i++) {
+ if (isSameName(arcName, fileEntry->type_flags_and_name_offset & 0xFFFFFF, fileEntry->name_hash)) {
return fileEntry;
}
+ fileEntry++;
}
}
}
@@ -94,9 +99,9 @@ JKRArchive::SDIFileEntry* JKRArchive::findFsResource(const char* name, u32 direc
SDIDirEntry* dirEntry = mNodes + directoryId;
SDIFileEntry* fileEntry = mFiles + dirEntry->first_file_index;
- for (int i = 0; i < dirEntry->num_entries; fileEntry++, i++) {
- if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->name_hash)) {
- if (fileEntry->isDirectory()) {
+ for (int i = 0; i < dirEntry->num_entries; i++) {
+ if (isSameName(arcName, fileEntry->type_flags_and_name_offset & 0xFFFFFF, fileEntry->name_hash)) {
+ if ((fileEntry->type_flags_and_name_offset >> 24) & 2) {
return findFsResource(name, fileEntry->data_offset);
}
@@ -106,6 +111,7 @@ JKRArchive::SDIFileEntry* JKRArchive::findFsResource(const char* name, u32 direc
return NULL;
}
+ fileEntry++;
}
}
@@ -124,10 +130,11 @@ JKRArchive::SDIFileEntry* JKRArchive::findNameResource(const char* name) const {
SDIFileEntry* fileEntry = mFiles;
CArcName arcName(name);
- for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
- if (isSameName(arcName, fileEntry->getNameOffset(), fileEntry->getNameHash())) {
+ for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
+ if (isSameName(arcName, fileEntry->type_flags_and_name_offset & 0xFFFFFF, fileEntry->name_hash)) {
return fileEntry;
}
+ fileEntry++;
}
return NULL;
@@ -135,10 +142,11 @@ JKRArchive::SDIFileEntry* JKRArchive::findNameResource(const char* name) const {
JKRArchive::SDIFileEntry* JKRArchive::findPtrResource(const void* resource) const {
SDIFileEntry* fileEntry = mFiles;
- for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
+ for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
if (fileEntry->data == resource) {
return fileEntry;
}
+ fileEntry++;
}
return NULL;
@@ -146,18 +154,20 @@ JKRArchive::SDIFileEntry* JKRArchive::findPtrResource(const void* resource) cons
JKRArchive::SDIFileEntry* JKRArchive::findIdResource(u16 id) const {
if (id != 0xFFFF) {
+ SDIFileEntry* fileEntry;
if (id < mArcInfoBlock->num_file_entries) {
- SDIFileEntry* fileEntry = mFiles + id;
- if (fileEntry->file_id == id && fileEntry->isUnknownFlag1()) {
+ fileEntry = mFiles + id;
+ if (fileEntry->file_id == id && ((fileEntry->type_flags_and_name_offset >> 24) & 1)) {
return fileEntry;
}
}
- SDIFileEntry* fileEntry = mFiles;
- for (int i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
- if (fileEntry->file_id == id && fileEntry->isUnknownFlag1()) {
+ fileEntry = mFiles;
+ for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
+ if (fileEntry->file_id == id && ((fileEntry->type_flags_and_name_offset >> 24) & 1)) {
return fileEntry;
}
+ fileEntry++;
}
}