workaround pandora hugetlb bug, revert this later
authornotaz <notasas@gmail.com>
Mon, 12 Nov 2012 23:27:47 +0000 (01:27 +0200)
committernotaz <notasas@gmail.com>
Mon, 12 Nov 2012 23:27:47 +0000 (01:27 +0200)
libpcsxcore/misc.c

index aee6e3c..27b9499 100644 (file)
@@ -409,6 +409,22 @@ static int PSXGetFileType(FILE *f) {
        return INVALID_EXE;
 }
 
        return INVALID_EXE;
 }
 
+// temporary pandora workaround..
+// FIXME: remove
+size_t fread_to_ram(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+       void *tmp;
+       size_t ret = 0;
+       
+       tmp = malloc(size * nmemb);
+       if (tmp) {
+               ret = fread(tmp, size, nmemb, stream);
+               memcpy(ptr, tmp, size * nmemb);
+               free(tmp);
+       }
+       return ret;
+}
+
 int Load(const char *ExePath) {
        FILE *tmpFile;
        EXE_HEADER tmpHead;
 int Load(const char *ExePath) {
        FILE *tmpFile;
        EXE_HEADER tmpHead;
@@ -435,7 +451,7 @@ int Load(const char *ExePath) {
                                mem = PSXM(section_address);
                                if (mem != NULL) {
                                        fseek(tmpFile, 0x800, SEEK_SET);                
                                mem = PSXM(section_address);
                                if (mem != NULL) {
                                        fseek(tmpFile, 0x800, SEEK_SET);                
-                                       fread(mem, section_size, 1, tmpFile);
+                                       fread_to_ram(mem, section_size, 1, tmpFile);
                                        psxCpu->Clear(section_address, section_size / 4);
                                }
                                fclose(tmpFile);
                                        psxCpu->Clear(section_address, section_size / 4);
                                }
                                fclose(tmpFile);
@@ -461,7 +477,7 @@ int Load(const char *ExePath) {
 #endif
                                                        mem = PSXM(section_address);
                                                        if (mem != NULL) {
 #endif
                                                        mem = PSXM(section_address);
                                                        if (mem != NULL) {
-                                                               fread(mem, section_size, 1, tmpFile);
+                                                               fread_to_ram(mem, section_size, 1, tmpFile);
                                                                psxCpu->Clear(section_address, section_size / 4);
                                                        }
                                                        break;
                                                                psxCpu->Clear(section_address, section_size / 4);
                                                        }
                                                        break;