summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-07-08 07:34:10 +0000
committerSND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-07-08 07:34:10 +0000
commitea095b6ff6b52f2ca53c089ab31d57d9441fec8d (patch)
treeaaa2bf5fb57acb15beea97cbcd1c52ee6c7b3417
parent9f5b2d7ea39f36b2a2f5dfa0d8fc30066ca52b53 (diff)
downloadpcsxr-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.m25
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);