Skip to content

Commit 4a6aa59

Browse files
committed
added dirElem type field and (potential) values
1 parent f8ce011 commit 4a6aa59

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

orbisFSTool/OrbisFSFormat.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,22 @@ typedef struct {
104104
uint32_t _pad;
105105
} ATTRIBUTE_PACKED OrbisFSAllocatorInfoElem_t;
106106

107+
108+
//#define DT_UNKNOWN 0
109+
//#define DT_FIFO 1
110+
//#define DT_CHR 2
111+
#define ORBIS_FS_DIRELEM_TYPE_DIR 4
112+
//#define DT_BLK 6
113+
#define ORBIS_FS_DIRELEM_TYPE_REG 8
114+
//#define DT_LNK 10
115+
//#define DT_SOCK 12
116+
//#define DT_WHT 14
107117
typedef struct {
108118
uint32_t inodeNum;
109-
uint32_t unk0;
119+
uint32_t unk0_is_0x00100000; //is expected to be 0x00100000
110120
uint32_t elemSize;
111121
uint16_t namelen;
112-
uint16_t unk2;
122+
uint16_t type;
113123
char name[];
114124
} ATTRIBUTE_PACKED OrbisFSDirectoryElem_t;
115125

orbisFSTool/OrbisFSInodeDirectory.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,14 @@ std::vector<std::pair<std::string, OrbisFSInode_t>> OrbisFSInodeDirectory::listF
5252
retassure(elem->inodeNum, "unexpected zero elem");
5353
retassure(offset + elem->elemSize <= node->filesize, "elemsize goes oob");
5454
retassure(sizeof(*elem)+elem->namelen <= elem->elemSize, "namelen too long");
55-
55+
#ifdef DEBUG
56+
retassure(elem->unk0_is_0x00100000 == 0x00100000, "elem->unk0_is_0x00100000 is 0x%08x",elem->unk0_is_0x00100000);
57+
#endif
58+
5659
std::string elemName{elem->name,elem->name+elem->namelen};
5760
if (!includeSelfAndParent && (elemName == "." || elemName == "..")) continue;
5861

59-
OrbisFSInode_t *curInode = NULL;
60-
try {
61-
curInode = findInode(elem->inodeNum);
62-
} catch (tihmstar::OrbisFSInodeBadMagic &e) {
63-
#ifdef XCODE
64-
debug("Ignoring vanished elem '%s'",elemName.c_str());
65-
#endif
66-
continue;
67-
}
62+
OrbisFSInode_t *curInode = findInode(elem->inodeNum);
6863
ret.push_back({
6964
elemName,
7065
*curInode
@@ -87,20 +82,15 @@ OrbisFSInode_t *OrbisFSInodeDirectory::findChildInDirectory(OrbisFSInode_t *node
8782
retassure(elem->inodeNum, "unexpected zero elem");
8883
retassure(offset + elem->elemSize <= node->filesize, "elemsize goes oob");
8984
retassure(sizeof(*elem)+elem->namelen <= elem->elemSize, "namelen too long");
85+
#ifdef DEBUG
86+
retassure(elem->unk0_is_0x00100000 == 0x00100000, "elem->unk0_is_0x00100000 is 0x%08x",elem->unk0_is_0x00100000);
87+
#endif
9088

9189
std::string elemName{elem->name,elem->name+elem->namelen};
9290
if (elemName == "." || elemName == "..") continue;
9391
if (elemName != childname) continue;
9492

95-
OrbisFSInode_t *curInode = NULL;
96-
try {
97-
curInode = findInode(elem->inodeNum);
98-
} catch (tihmstar::OrbisFSInodeBadMagic &e) {
99-
#ifdef XCODE
100-
debug("Ignoring vanished elem '%s'",elemName.c_str());
101-
#endif
102-
continue;
103-
}
93+
OrbisFSInode_t *curInode = findInode(elem->inodeNum);
10494
return curInode;
10595
}
10696
error:

0 commit comments

Comments
 (0)