diff options
| author | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-07-08 07:34:10 +0000 |
|---|---|---|
| committer | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-07-08 07:34:10 +0000 |
| commit | ea095b6ff6b52f2ca53c089ab31d57d9441fec8d (patch) | |
| tree | aaa2bf5fb57acb15beea97cbcd1c52ee6c7b3417 | |
| parent | 9f5b2d7ea39f36b2a2f5dfa0d8fc30066ca52b53 (diff) | |
| download | pcsxr-ea095b6ff6b52f2ca53c089ab31d57d9441fec8d.tar.gz | |
Create the blank memory block header only once.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@85896 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | macosx/PcsxrMemCardArray.m | 25 |
1 files changed, 14 insertions, 11 deletions
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); |
