diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-11-13 11:41:27 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-11-13 11:41:27 +0000 |
| commit | 4d82902715511a6dcf4bb45fa0e3fd9ab7d7549e (patch) | |
| tree | 004149d2253c0c47f66585543ae2266afac395db /libpcsxcore/misc.c | |
| parent | 86b186c36a86461f594076ec261a2090c7b006b7 (diff) | |
| download | pcsxr-4d82902715511a6dcf4bb45fa0e3fd9ab7d7549e.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@37112 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/misc.c')
| -rw-r--r-- | libpcsxcore/misc.c | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/libpcsxcore/misc.c b/libpcsxcore/misc.c index 980d2fc1..cdcd6cce 100644 --- a/libpcsxcore/misc.c +++ b/libpcsxcore/misc.c @@ -146,7 +146,7 @@ int GetCdromFile(u8 *mdir, u8 *time, s8 *filename) { int LoadCdrom() { EXE_HEADER tmpHead; struct iso_directory_record *dir; - u8 time[4],*buf; + u8 time[4], *buf; u8 mdir[4096]; s8 exename[256]; @@ -177,16 +177,23 @@ int LoadCdrom() { // read the SYSTEM.CNF READTRACK(); - sscanf((char*)buf+12, "BOOT = cdrom:\\%256s", exename); + sscanf((char *)buf + 12, "BOOT = cdrom:\\%256s", exename); if (GetCdromFile(mdir, time, exename) == -1) { - sscanf((char*)buf+12, "BOOT = cdrom:%256s", exename); + sscanf((char *)buf + 12, "BOOT = cdrom:%256s", exename); if (GetCdromFile(mdir, time, exename) == -1) { - char *ptr = strstr(buf+12, "cdrom:"); - if(ptr) { - strncpy(exename, ptr, 256); + char *ptr = strstr(buf + 12, "cdrom:"); + if (ptr != NULL) { + ptr += 6; + while (*ptr == '\\' || *ptr == '/') ptr++; + strncpy(exename, ptr, 255); + exename[255] = '\0'; + ptr = exename; + while (*ptr != '\0' && *ptr != '\r' && *ptr != '\n') ptr++; + *ptr = '\0'; if (GetCdromFile(mdir, time, exename) == -1) return -1; - } + } else + return -1; } } @@ -194,8 +201,7 @@ int LoadCdrom() { READTRACK(); } - - memcpy(&tmpHead, buf+12, sizeof(EXE_HEADER)); + memcpy(&tmpHead, buf + 12, sizeof(EXE_HEADER)); psxRegs.pc = SWAP32(tmpHead.pc0); psxRegs.GPR.n.gp = SWAP32(tmpHead.gp0); @@ -234,7 +240,7 @@ int LoadCdromFile(char *filename, EXE_HEADER *head) { READTRACK(); // skip head and sub, and go to the root directory record - dir = (struct iso_directory_record*) &buf[12+156]; + dir = (struct iso_directory_record *)&buf[12 + 156]; mmssdd(dir->extent, (char*)time); @@ -244,7 +250,7 @@ int LoadCdromFile(char *filename, EXE_HEADER *head) { READTRACK(); - memcpy(head, buf+12, sizeof(EXE_HEADER)); + memcpy(head, buf + 12, sizeof(EXE_HEADER)); size = head->t_size; addr = head->t_addr; @@ -252,7 +258,7 @@ int LoadCdromFile(char *filename, EXE_HEADER *head) { incTime(); READTRACK(); - memcpy((void *)PSXM(addr), buf+12, 2048); + memcpy((void *)PSXM(addr), buf + 12, 2048); size -= 2048; addr += 2048; @@ -294,15 +300,18 @@ int CheckCdrom() { sscanf((char *)buf + 12, "BOOT = cdrom:%256s", exename); if (GetCdromFile(mdir, time, exename) == -1) { char *ptr = strstr(buf + 12, "cdrom:"); // possibly the executable is in some subdir - for (i=0; i<32; i++) { - if (ptr[i] == ' ') continue; - if (ptr[i] == '\\') continue; - } - if (ptr) { - strncpy(exename, ptr, 256); + if (ptr != NULL) { + ptr += 6; + while (*ptr == '\\' || *ptr == '/') ptr++; + strncpy(exename, ptr, 255); + exename[255] = '\0'; + ptr = exename; + while (*ptr != '\0' && *ptr != '\r' && *ptr != '\n') ptr++; + *ptr = '\0'; if (GetCdromFile(mdir, time, exename) == -1) return -1; // main executable not found - } + } else + return -1; } } } else if (GetCdromFile(mdir, time, "PSX.EXE;1") != -1) { |
