From ea095b6ff6b52f2ca53c089ab31d57d9441fec8d Mon Sep 17 00:00:00 2001 From: "SND\\MaddTheSane_cp" Date: Mon, 8 Jul 2013 07:34:10 +0000 Subject: Create the blank memory block header only once. git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@85896 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- macosx/PcsxrMemCardArray.m | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'macosx/PcsxrMemCardArray.m') diff --git a/macosx/PcsxrMemCardArray.m b/macosx/PcsxrMemCardArray.m index 3ceb8566..4c445827 100644 --- a/macosx/PcsxrMemCardArray.m +++ b/macosx/PcsxrMemCardArray.m @@ -26,7 +26,7 @@ static inline void CopyMemcardData(char *from, char *to, int srci, int dsti, cha //printf("data = %s\n", from + (srci+1) * 128); } -static inline char* CreateBlankHeader() +static inline char* BlankHeader() { struct PSXMemHeader { unsigned int allocState; @@ -36,15 +36,19 @@ static inline char* CreateBlankHeader() unsigned char garbage[96]; unsigned char checksum; }; - struct PSXMemHeader *toReturn = calloc(sizeof(struct PSXMemHeader), 1); - //FIXME: Which value is right? - toReturn->allocState = 0x000000a0; - //toReturn->allocState = 0xa0000000; - toReturn->nextBlock = 0xFFFF; - unsigned char *bytePtr = (unsigned char*)toReturn; - for (int i = 0; i < sizeof(struct PSXMemHeader) - sizeof(unsigned char); i++) { - toReturn->checksum = toReturn->checksum ^ bytePtr[i]; + static struct PSXMemHeader *toReturn = NULL; + if (!toReturn) { + toReturn = calloc(sizeof(struct PSXMemHeader), 1); + + //FIXME: Which value is right? + toReturn->allocState = 0x000000a0; + //toReturn->allocState = 0xa0000000; + toReturn->nextBlock = 0xFFFF; + unsigned char *bytePtr = (unsigned char*)toReturn; + for (int i = 0; i < sizeof(struct PSXMemHeader) - sizeof(unsigned char); i++) { + toReturn->checksum = toReturn->checksum ^ bytePtr[i]; + } } return (char*)toReturn; @@ -53,11 +57,10 @@ static inline char* CreateBlankHeader() static inline void ClearMemcardData(char *to, int dsti, char *str) { // header - char *header = CreateBlankHeader(); + char *header = BlankHeader(); memcpy(to + (dsti + 1) * 128, header, 128); SaveMcd(str, to, (dsti + 1) * 128, 128); - free(header); // data memset(to + (dsti + 1) * 1024 * 8, 0, 1024 * 8); -- cgit v1.2.3