remove file size limitation

This commit is contained in:
CraftyBoss
2022-11-25 00:38:38 -08:00
parent 798b11c605
commit fe9bdb44f9
2 changed files with 75 additions and 38 deletions
+15 -12
View File
@@ -24,7 +24,7 @@ struct FlatBufferLoaderInfo
struct FlatBufferLoader
{
void *__vftable;
void* field_8;
void *field_8;
char gap_10[48];
FlatBufferLoaderInfo *mFileInfo;
char gap_48[88];
@@ -33,17 +33,20 @@ struct FlatBufferLoader
bool field_A8;
FlatBufferReadInfo mReadInfo;
char gap_C8[128];
void* field_148;
void* field_150;
void* field_158;
char gap_160[32];
void *field_148;
void *field_150;
void *field_158;
void *field_160;
void *mAllocator1;
char gap_170[16];
int field_180;
void* struct_188;
void* field_190;
char gap_188[70];
long field_1E0;
void *struct_188;
void *field_190;
char gap_188[64];
long mBufferSize;
long mReadPosition;
void *mFlatBuffer;
void* class_1F0;
void* field_1F8;
void* field_200;
void *mAllocator2;
void *field_1F8;
void *field_200;
};
+60 -26
View File
@@ -61,41 +61,69 @@ HOOK_DEFINE_REPLACE(AbortImplOverloadHook) {
}
};
// this isnt 100% working yet i believe, needs more testing
FlatBufferReadInfo newReadInfo;
nn::Result readResult = -1;
void NOINLINE fileRedirectionFunc(FlatBufferLoader *loader) {
if(loader->mFileInfo && loader->field_148 && loader->field_A8) {
if(isEqualSubString(loader->mFileInfo->mPath, "chara/share/cm_drs")) {
Logger::log("Path: %s\n", loader->mFileInfo->mPath);
}
readResult = nn::fs::OpenFile(&newReadInfo.mHandle, loader->mFileInfo->mPath, nn::fs::OpenMode::OpenMode_Read);
if(readResult.isSuccess()) {
Logger::log("Found Replacement file in romfs!\n");
Logger::log("Path: %s\n", loader->mFileInfo->mPath);
nn::fs::GetFileSize(&newReadInfo.mSize, newReadInfo.mHandle);
Logger::log("Original Size: %lu New Size: %lu\n", loader->mBufferSize, newReadInfo.mSize);
loader->mBufferSize = newReadInfo.mSize;
}
}
}
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBufferHook) {
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
fileRedirectionFunc(thisPtr);
return Orig(thisPtr);
}
};
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBuffer2Hook) {
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
fileRedirectionFunc(thisPtr);
return Orig(thisPtr);
}
};
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBuffer3Hook) {
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
fileRedirectionFunc(thisPtr);
return Orig(thisPtr);
}
};
HOOK_DEFINE_TRAMPOLINE(FlatBufferLoaderHook) {
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr, void *buffer, ulong bufferSize) {
if(thisPtr->mFileInfo && thisPtr->field_148 && thisPtr->field_A8) {
// Logger::log("Size: %lu Path: %s\n", bufferSize, thisPtr->mFileInfo->mPath);
if(readResult.isSuccess()) {
FlatBufferReadInfo newReadInfo;
newReadInfo.mPosition = 0;
nn::Result result = nn::fs::OpenFile(&newReadInfo.mHandle, thisPtr->mFileInfo->mPath, nn::fs::OpenMode::OpenMode_Read);
auto result = BinaryPointers::instance().readFileToBuffer(&newReadInfo, buffer, bufferSize);
if(result.isSuccess()) {
thisPtr->field_180 = 1;
thisPtr->mReadPosition = newReadInfo.mPosition;
Logger::log("Path: %s\n",thisPtr->mFileInfo->mPath);
Logger::log("Found Replacement file in romfs!\n");
nn::fs::GetFileSize(&newReadInfo.mSize, newReadInfo.mHandle);
Logger::log("Original Size: %lu New Size: %lu\n", bufferSize, newReadInfo.mSize);
if(bufferSize >= newReadInfo.mSize) {
newReadInfo.mPosition = 0;
auto result = BinaryPointers::instance().readFileToBuffer(&newReadInfo, buffer, bufferSize);
thisPtr->field_180 = 1;
thisPtr->field_1E0 = newReadInfo.mPosition;
return result;
}else {
Logger::log("Replacement file is larger than original! Unable to Load all data into existing Buffer.\n");
}
return result;
}
}
@@ -122,6 +150,12 @@ extern "C" void exl_main(void* x0, void* x1) {
FlatBufferLoaderHook::InstallAtOffset(0xBEBCD4);
FlatBufferCreateFlatBufferHook::InstallAtOffset(0xBEBB90);
FlatBufferCreateFlatBuffer2Hook::InstallAtOffset(0x1DD78A4);
FlatBufferCreateFlatBuffer3Hook::InstallAtOffset(0x1E211B0);
runCodePatches();
}