Skip to content

Commit a3b8d54

Browse files
committed
add uid/gid, fix access/mod/create date, print all inode fields
1 parent 9a8f1b6 commit a3b8d54

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

orbisFSTool/OrbisFSFormat.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,10 @@ typedef struct {
7979
uint32_t inodeNum;
8080
uint32_t _pad0;
8181
uint16_t fileMode;
82-
uint8_t _pad1[6]; //should be zero
83-
uint64_t unk1;
82+
uint8_t _pad1[2]; //should be zero
83+
uint32_t uid;
84+
uint32_t gid;
85+
uint32_t unk1;
8486
uint32_t unk2;
8587
uint32_t unk3;
8688
uint64_t filesize;
@@ -89,9 +91,9 @@ typedef struct {
8991
uint64_t unk6;
9092
uint64_t createDate;
9193
uint64_t _pad2; //should be zero
92-
uint64_t accessOrModDate;
94+
uint64_t modDate;
9395
uint64_t _pad3; //should be zero
94-
uint64_t modOrAccessDate;
96+
uint64_t accessDate;
9597
uint64_t _pad4; //should be zero
9698
OrbisFSChainLink_t resourceLnk[4];
9799
OrbisFSChainLink_t dataLnk[0x20];

orbisFSTool/OrbisFSFuse.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,18 @@ static int fs_getattr(const char *path, struct stat *stbuf) noexcept{
4040
#ifdef __APPLE__
4141
stbuf->st_birthtimespec.tv_sec = node.createDate;
4242
stbuf->st_birthtimespec.tv_nsec = 0;
43-
stbuf->st_mtimespec.tv_sec = node.modOrAccessDate;
43+
stbuf->st_mtimespec.tv_sec = node.modDate;
4444
stbuf->st_mtimespec.tv_nsec = 0;
45-
stbuf->st_ctimespec.tv_sec = node.modOrAccessDate;
45+
stbuf->st_ctimespec.tv_sec = node.createDate;
4646
stbuf->st_ctimespec.tv_nsec = 0;
47-
stbuf->st_atimespec.tv_sec = node.accessOrModDate;
47+
stbuf->st_atimespec.tv_sec = node.accessDate;
4848
stbuf->st_atimespec.tv_nsec = 0;
4949
#elif defined(__linux__)
50-
/*
51-
birthtime is not available on linux stat
52-
*/
53-
stbuf->st_mtim.tv_sec = node.modOrAccessDate;
50+
stbuf->st_mtim.tv_sec = node.modDate;
5451
stbuf->st_mtim.tv_nsec = 0;
55-
stbuf->st_ctim.tv_sec = node.modOrAccessDate;
52+
stbuf->st_ctim.tv_sec = node.createDate;
5653
stbuf->st_ctim.tv_nsec = 0;
57-
stbuf->st_atim.tv_sec = node.accessOrModDate;
54+
stbuf->st_atim.tv_sec = node.accessDate;
5855
stbuf->st_atim.tv_nsec = 0;
5956
#else
6057
#error unexpected platform!

orbisFSTool/main.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,17 @@ int main_r(int argc, const char * argv[]) {
290290
printInfo += perm;
291291
{
292292
char buf[0x400];
293-
uint64_t fsize = S_ISDIR(node.fileMode) ? 0 : node.filesize;
294-
snprintf(buf, sizeof(buf), "%10llu ",fsize);
295-
printInfo += buf;
296-
printInfo += strForDate(node.accessOrModDate)+"\t";
293+
{
294+
int didprint = snprintf(buf, sizeof(buf), " %d:%d ",node.uid,node.gid);
295+
printInfo += buf;
296+
while (didprint++ < 7) printInfo+=" ";
297+
}
298+
{
299+
uint64_t fsize = S_ISDIR(node.fileMode) ? 0 : node.filesize;
300+
snprintf(buf, sizeof(buf), "%10llu ",fsize);
301+
printInfo += buf;
302+
printInfo += strForDate(node.modDate)+"\t";
303+
}
297304
}
298305
}
299306

@@ -317,10 +324,18 @@ int main_r(int argc, const char * argv[]) {
317324
printf("\tfatStages : 0x%08x\n",node.fatStages);
318325
printf("\tinodeNum : 0x%08x\n",node.inodeNum);
319326
printf("\tfileMode : o0%o\n",node.fileMode);
327+
printf("\tuid : %d\n",node.uid);
328+
printf("\tgid : %d\n",node.gid);
329+
printf("\tunk1 : %d\n",node.unk1);
330+
printf("\tunk2 : %d\n",node.unk2);
331+
printf("\tunk3 : %d\n",node.unk3);
320332
printf("\tfilesize : 0x%016llx (%lld)\n",node.filesize,node.filesize);
333+
printf("\tunk4 : %d\n",node.unk4);
334+
printf("\tunk5 : %d\n",node.unk5);
335+
printf("\tunk6 : %lld\n",node.unk6);
321336
printf("\tcreateDate : %10lld (%s)\n",node.createDate,strForDate(node.createDate).c_str());
322-
printf("\taccessOrModDate : %10lld (%s)\n",node.accessOrModDate,strForDate(node.accessOrModDate).c_str());
323-
printf("\tmodOrAccessDate : %10lld (%s)\n",node.modOrAccessDate,strForDate(node.modOrAccessDate).c_str());
337+
printf("\tmodDate : %10lld (%s)\n",node.modDate,strForDate(node.modDate).c_str());
338+
printf("\taccessDate : %10lld (%s)\n",node.accessDate,strForDate(node.accessDate).c_str());
324339
for (int i=0; i<ARRAYOF(node.resourceLnk); i++) {
325340
if (node.resourceLnk[i].type != ORBIS_FS_CHAINLINK_TYPE_LINK) break;
326341
printf("\tresourceLnk[%2d] : type: 0x%02x blk: %d\n",i,node.resourceLnk[i].type,node.resourceLnk[i].blk);

0 commit comments

Comments
 (0)