Fix all occurences of DIR_BUFFER

This commit is contained in:
d0k3 2018-02-05 01:21:05 +01:00
parent 14323b4d8d
commit d731a5960f

View File

@ -78,9 +78,9 @@ u32 SplashInit(const char* modestr) {
#ifndef SCRIPT_RUNNER #ifndef SCRIPT_RUNNER
// reserve 480kB for DirStruct, 64kB for PaneData, just to be safe // reserve 480kB for DirStruct, 64kB for PaneData, just to be safe
static DirStruct* current_dir = (DirStruct*) (DIR_BUFFER + 0x00000); static DirStruct* current_dir = NULL;
static DirStruct* clipboard = (DirStruct*) (DIR_BUFFER + 0x78000); static DirStruct* clipboard = NULL;
static PaneData* panedata = (PaneData*) (DIR_BUFFER + 0xF0000); static PaneData* panedata = NULL;
void GetTimeString(char* timestr, bool forced_update, bool full_year) { void GetTimeString(char* timestr, bool forced_update, bool full_year) {
static DsTime dstime; static DsTime dstime;
@ -1856,7 +1856,6 @@ u32 GodMode(int entrypoint) {
u32 exit_mode = GODMODE_EXIT_POWEROFF; u32 exit_mode = GODMODE_EXIT_POWEROFF;
char current_path[256] = { 0x00 }; char current_path[256] = { 0x00 };
PaneData* pane = panedata;
u32 cursor = 0; u32 cursor = 0;
u32 scroll = 0; u32 scroll = 0;
@ -1900,11 +1899,6 @@ u32 GodMode(int entrypoint) {
if (show_splash) SplashInit(disp_mode); if (show_splash) SplashInit(disp_mode);
u64 timer = timer_start(); // for splash delay u64 timer = timer_start(); // for splash delay
if ((sizeof(DirStruct) > 0x78000) || (N_PANES * sizeof(PaneData) > 0x10000)) {
ShowPrompt(false, "Out of memory!"); // just to be safe
return exit_mode;
}
InitSDCardFS(); InitSDCardFS();
AutoEmuNandBase(true); AutoEmuNandBase(true);
InitNandCrypto(entrypoint != ENTRY_B9S); InitNandCrypto(entrypoint != ENTRY_B9S);
@ -1985,9 +1979,18 @@ u32 GodMode(int entrypoint) {
} }
current_dir = (DirStruct*) malloc(sizeof(DirStruct));
clipboard = (DirStruct*) malloc(sizeof(DirStruct));
panedata = (PaneData*) malloc(N_PANES * sizeof(PaneData));
if (!current_dir || !clipboard || !panedata) {
ShowPrompt(false, "Out of memory."); // just to be safe
return exit_mode;
}
PaneData* pane = panedata;
GetDirContents(current_dir, ""); GetDirContents(current_dir, "");
clipboard->n_entries = 0; clipboard->n_entries = 0;
memset(panedata, 0x00, 0x10000); memset(panedata, 0x00, N_PANES * sizeof(PaneData));
ClearScreenF(true, true, COLOR_STD_BG); // clear splash ClearScreenF(true, true, COLOR_STD_BG); // clear splash
while (godmode9) { // this is the main loop while (godmode9) { // this is the main loop
@ -2000,7 +2003,7 @@ u32 GodMode(int entrypoint) {
GetDirContents(current_dir, current_path); GetDirContents(current_dir, current_path);
cursor = 0; cursor = 0;
if (!current_dir->n_entries) { // should not happen, if it does fail gracefully if (!current_dir->n_entries) { // should not happen, if it does fail gracefully
ShowPrompt(false, "Invalid root directory"); ShowPrompt(false, "Invalid root directory.");
return exit_mode; return exit_mode;
} }
} }
@ -2412,6 +2415,10 @@ u32 GodMode(int entrypoint) {
DeinitExtFS(); DeinitExtFS();
DeinitSDCardFS(); DeinitSDCardFS();
free(current_dir);
free(clipboard);
free(panedata);
return exit_mode; return exit_mode;
} }