MCPcopy Create free account
hub / github.com/doldecomp/mkdd / open

Method open

libs/JSystem/JKernel/JKRCompArchive.cpp:62–217  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60}
61
62bool JKRCompArchive::open(long entryNum) {
63 mArcInfoBlock = nullptr;
64 _64 = 0;
65 mAramPart = nullptr;
66 _6C = 0;
67 mSizeOfMemPart = 0;
68 mSizeOfAramPart = 0;
69 _7C = 0;
70 mDirectories = nullptr;
71 mFileEntries = nullptr;
72 mStrTable = nullptr;
73
74 mDvdFile = new (JKRGetSystemHeap(), 0) JKRDvdFile(entryNum);
75 if(mDvdFile == nullptr) {
76 mMountMode = 0;
77 return 0;
78 }
79 SArcHeader *arcHeader = (SArcHeader *)JKRAllocFromSysHeap(sizeof(SArcHeader), -32); // NOTE: unconfirmed if this struct is used
80 if(arcHeader == nullptr) {
81 mMountMode = 0;
82 }
83 else {
84 int alignment;
85
86 JKRDvdToMainRam(entryNum, (u8 *)arcHeader, EXPAND_SWITCH_DECOMPRESS, 32, nullptr, JKRDvdRipper::ALLOC_DIR_TOP, 0, &mCompression, nullptr);
87 DCInvalidateRange(arcHeader, 32);
88
89 mSizeOfMemPart = arcHeader->_14;
90 mSizeOfAramPart = arcHeader->_18;
91#line 352
92 JUT_ASSERT(( mSizeOfMemPart & 0x1f ) == 0);
93 JUT_ASSERT(( mSizeOfAramPart & 0x1f ) == 0);
94
95 switch (mCompression)
96 {
97 case JKRCOMPRESSION_NONE:
98 case JKRCOMPRESSION_YAZ0:
99 alignment = mMountDirection == 1 ? 32 : -32;
100 mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset + mSizeOfMemPart, alignment);
101 if (mArcInfoBlock == nullptr) {
102 mMountMode = 0;
103 }
104 else
105 {
106 JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_DECOMPRESS, (u32)arcHeader->file_data_offset + mSizeOfMemPart,
107 nullptr, JKRDvdRipper::ALLOC_DIR_TOP, 0x20, nullptr, nullptr);
108 DCInvalidateRange(mArcInfoBlock, (u32)arcHeader->file_data_offset + mSizeOfMemPart);
109 _64 = (u32)mArcInfoBlock + arcHeader->file_data_offset;
110
111 if (mSizeOfAramPart != 0) {
112 mAramPart = JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::AM_Head);
113 if(mAramPart == nullptr) {
114 mMountMode = 0;
115 break;
116 }
117
118 JKRDvdToAram(entryNum, mAramPart->getAddress(), EXPAND_SWITCH_DECOMPRESS, arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart, 0, nullptr);
119 }

Callers

nothing calls this directly

Calls 14

JKRGetSystemHeapFunction · 0.85
JKRAllocFromSysHeapFunction · 0.85
JKRDvdToMainRamFunction · 0.85
JKRAllocFromHeapFunction · 0.85
JKRAllocFromAramFunction · 0.85
JKRDvdToAramFunction · 0.85
JKRDecompExpandSizeFunction · 0.85
JKRDecompressFunction · 0.85
JKRFreeToSysHeapFunction · 0.85
JKRMainRamToAramFunction · 0.85
absFunction · 0.85
memsetFunction · 0.85

Tested by

no test coverage detected