NDS_LoadRom: Use gameInfo.romdata to store the rom for !WINDOWS

This makes NDS_FreeROM() works properly and avoid to
allocate the buffer for the ROM data twice.

Thanks to Jan Bücken for reporting the issue.
This commit is contained in:
riccardom 2011-05-15 15:33:10 +00:00
parent 5fc80d83aa
commit 60e8ec45bd
1 changed files with 5 additions and 14 deletions

View File

@ -543,7 +543,6 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
ROMReader_struct *reader;
void *file;
u32 size;
u8 *data;
char *noext;
char buf[MAX_PATH];
@ -593,21 +592,13 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
if(MMU.CART_ROM != MMU.UNUSED_RAM)
NDS_FreeROM();
data = new u8[gameInfo.mask + 1];
if (!data)
{
reader->DeInit(file);
free(noext);
return -1;
}
ret = reader->Read(file, data, size);
ret = reader->Read(file, gameInfo.romdata, size);
reader->DeInit(file);
//decrypt if necessary..
//but this is untested and suspected to fail on big endian, so lets not support this on big endian
#ifndef WORDS_BIGENDIAN
bool okRom = DecryptSecureArea(data,size);
bool okRom = DecryptSecureArea((u8 *)gameInfo.romdata, gameInfo.romsize);
if(!okRom) {
printf("Specified file is not a valid rom\n");
@ -619,10 +610,10 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
if (cheatSearch)
cheatSearch->close();
MMU_unsetRom();
NDS_SetROM(data, gameInfo.mask);
NDS_SetROM((u8*)gameInfo.romdata, gameInfo.mask);
gameInfo.populate();
gameInfo.crc = crc32(0,data,size);
gameInfo.crc = crc32(0,(u8*)gameInfo.romdata,gameInfo.romsize);
INFO("\nROM crc: %08X\n", gameInfo.crc);
INFO("ROM serial: %s\n", gameInfo.ROMserial);
INFO("ROM internal name: %s\n\n", gameInfo.ROMname);
@ -630,7 +621,7 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename)
//for homebrew, try auto-patching DLDI. should be benign if there is no DLDI or if it fails
if(!memcmp(gameInfo.header.gameCode,"####",4))
DLDI::tryPatch((void*)data, gameInfo.mask + 1);
DLDI::tryPatch((void*)gameInfo.romdata, gameInfo.mask + 1);
NDS_Reset();