From 67c827fca2a3f2eb8821a9e6b81f747e6890c6fb Mon Sep 17 00:00:00 2001 From: RocketRobz Date: Wed, 10 Oct 2018 16:52:47 -0600 Subject: [PATCH] Optimize dldiLoadFromBin Fixes Guru Meditation Error --- arm9/source/driveOperations.cpp | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/arm9/source/driveOperations.cpp b/arm9/source/driveOperations.cpp index 5a057ed..c623d9e 100644 --- a/arm9/source/driveOperations.cpp +++ b/arm9/source/driveOperations.cpp @@ -84,38 +84,12 @@ TWL_CODE void sdUnmount(void) { } TWL_CODE DLDI_INTERFACE* dldiLoadFromBin (const u8 dldiAddr[]) { - DLDI_INTERFACE* device; - size_t dldiSize; - - // Read in the DLDI header - if ((device = (DLDI_INTERFACE*)malloc (sizeof(DLDI_INTERFACE))) == NULL) { - return NULL; - } - - memcpy(device, dldiAddr, sizeof(DLDI_INTERFACE)); - // Check that it is a valid DLDI - if (!dldiIsValid (device)) { - free (device); + if (!dldiIsValid ((DLDI_INTERFACE*)dldiAddr)) { return NULL; } - // Calculate actual size of DLDI - // Although the file may only go to the dldiEnd, the BSS section can extend past that - if (device->dldiEnd > device->bssEnd) { - dldiSize = (char*)device->dldiEnd - (char*)device->dldiStart; - } else { - dldiSize = (char*)device->bssEnd - (char*)device->dldiStart; - } - dldiSize = (dldiSize + 0x03) & ~0x03; // Round up to nearest integer multiple - - // Load entire DLDI - free (device); - if ((device = (DLDI_INTERFACE*)malloc (dldiSize)) == NULL) { - return NULL; - } - - memcpy(device, dldiAddr, dldiSize); + DLDI_INTERFACE* device = (DLDI_INTERFACE*)dldiAddr; dldiFixDriverAddresses (device); @@ -202,7 +176,7 @@ TWL_CODE bool twl_flashcardMount(void) { } else if (!memcmp(gameid, "ALXX", 4)) { loadedDldi = dldiLoadFromBin(dstwo_dldi); loadedDldi->ioInterface.startup(); - fatMountSimple("fat", &io_dldi_data->ioInterface); + fatMountSimple("fat", &loadedDldi->ioInterface); } if (flashcardFound()) {