mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-11-24 10:34:54 +00:00
Allocate buffer for support/font/lang files properly (#894)
Merged, thank you!
This commit is contained in:
parent
e83f58e841
commit
320a3fe0ee
@ -7,19 +7,25 @@
|
||||
#define SUPPORT_DIR_PATHS "V:", "0:/gm9", "1:/gm9"
|
||||
|
||||
|
||||
bool CheckSupportFile(const char* fname)
|
||||
bool CheckSupportFile(const char* fname, size_t* fsize)
|
||||
{
|
||||
// try VRAM0 first
|
||||
if (FindVTarFileInfo(fname, NULL))
|
||||
u64 tar_fsize;
|
||||
if (FindVTarFileInfo(fname, &tar_fsize)) {
|
||||
if (fsize) *fsize = tar_fsize; // truncated but should be fine for vtar
|
||||
return true;
|
||||
}
|
||||
|
||||
// try support file paths
|
||||
const char* base_paths[] = { SUPPORT_FILE_PATHS };
|
||||
for (u32 i = 0; i < countof(base_paths); i++) {
|
||||
char path[256];
|
||||
FILINFO fno;
|
||||
snprintf(path, sizeof(path), "%s/%s", base_paths[i], fname);
|
||||
if (fvx_stat(path, NULL) == FR_OK)
|
||||
if (fvx_stat(path, &fno) == FR_OK) {
|
||||
if (fsize) *fsize = fno.fsize;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#define LUASCRIPTS_DIR "luascripts"
|
||||
#define PAYLOADS_DIR "payloads"
|
||||
|
||||
bool CheckSupportFile(const char* fname);
|
||||
bool CheckSupportFile(const char* fname, size_t* fsize);
|
||||
size_t LoadSupportFile(const char* fname, void* buffer, size_t max_len);
|
||||
bool SaveSupportFile(const char* fname, void* buffer, size_t len);
|
||||
bool SetAsSupportFile(const char* fname, const char* source);
|
||||
|
||||
@ -2164,18 +2164,20 @@ u32 FileHandlerMenu(char* current_path, u32* cursor, u32* scroll, PaneData** pan
|
||||
return 0;
|
||||
}
|
||||
else if (user_select == font) { // set font
|
||||
u8* font = (u8*) malloc(0x20000); // arbitrary, should be enough by far
|
||||
size_t fsize = FileGetSize(file_path);
|
||||
u8* font = (u8*) malloc(fsize);
|
||||
if (!font) return 1;
|
||||
u32 font_size = FileGetData(file_path, font, 0x20000, 0);
|
||||
u32 font_size = FileGetData(file_path, font, fsize, 0);
|
||||
if (font_size) SetFont(font, font_size);
|
||||
ClearScreenF(true, true, COLOR_STD_BG);
|
||||
free(font);
|
||||
return 0;
|
||||
}
|
||||
else if (user_select == translation) { // set translation
|
||||
u8* translation = (u8*) malloc(0x20000); // arbitrary, should be enough by far
|
||||
size_t fsize = FileGetSize(file_path);
|
||||
u8* translation = (u8*) malloc(fsize);
|
||||
if (!translation) return 1;
|
||||
u32 translation_size = FileGetData(file_path, translation, 0x20000, 0);
|
||||
u32 translation_size = FileGetData(file_path, translation, fsize, 0);
|
||||
if (translation_size) SetLanguage(translation, translation_size);
|
||||
ClearScreenF(true, true, COLOR_STD_BG);
|
||||
free(translation);
|
||||
@ -2442,17 +2444,18 @@ u32 GodMode(int entrypoint) {
|
||||
SetScreenBrightness(brightness);
|
||||
|
||||
// custom font handling
|
||||
if (CheckSupportFile("font.frf")) {
|
||||
u8* riff = (u8*) malloc(0x20000); // arbitrary, should be enough by far
|
||||
size_t support_size;
|
||||
if (CheckSupportFile("font.frf", &support_size)) {
|
||||
u8* riff = (u8*) malloc(support_size);
|
||||
if (riff) {
|
||||
u32 riff_size = LoadSupportFile("font.frf", riff, 0x20000);
|
||||
u32 riff_size = LoadSupportFile("font.frf", riff, support_size);
|
||||
if (riff_size) SetFont(riff, riff_size);
|
||||
free(riff);
|
||||
}
|
||||
} else if (CheckSupportFile("font.pbm")) {
|
||||
u8* pbm = (u8*) malloc(0x10000); // arbitrary, should be enough by far
|
||||
} else if (CheckSupportFile("font.pbm", &support_size)) {
|
||||
u8* pbm = (u8*) malloc(support_size);
|
||||
if (pbm) {
|
||||
u32 pbm_size = LoadSupportFile("font.pbm", pbm, 0x10000);
|
||||
u32 pbm_size = LoadSupportFile("font.pbm", pbm, support_size);
|
||||
if (pbm_size) SetFont(pbm, pbm_size);
|
||||
free(pbm);
|
||||
}
|
||||
@ -2460,10 +2463,10 @@ u32 GodMode(int entrypoint) {
|
||||
|
||||
// language handling
|
||||
bool language_loaded = false;
|
||||
if (CheckSupportFile("language.trf")) {
|
||||
char* translation = (char*) malloc(0x20000); // arbitrary, should be enough by far
|
||||
if (CheckSupportFile("language.trf", &support_size)) {
|
||||
char* translation = (char*) malloc(support_size);
|
||||
if (translation) {
|
||||
u32 translation_size = LoadSupportFile("language.trf", translation, 0x20000);
|
||||
u32 translation_size = LoadSupportFile("language.trf", translation, support_size);
|
||||
if (translation_size) language_loaded = SetLanguage(translation, translation_size);
|
||||
free(translation);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user