diff --git a/src/gameresource.c b/src/gameresource.c index f73c2f6..8ed3809 100644 --- a/src/gameresource.c +++ b/src/gameresource.c @@ -53,72 +53,70 @@ static void storeSaveName(GameResource *gr, int no, char *src) { if (no == 0) { char *b = strrchr(src, '/'); - if (b == NULL) { - SYSERROR("Illigal save filename %s\n", src); + if (b) { + *b = '\0'; + gr->save_path = strdup(src); + } else { + gr->save_path = "."; } - *b = '\0'; - gr->save_path = strdup(src); } if (path) free(path); } boolean initGameResourceFromDir(GameResource *gr, DIR *dir, struct dirent *(*p_readdir)(DIR *)) { - char cwd[256], path[256]; - getcwd(cwd, 255); - memset(gr, 0, sizeof(GameResource)); struct dirent* d; while ((d = p_readdir(dir))) { char *filename = d->d_name; int len = strlen(filename); - sprintf(path, "%s/%s", cwd, filename); if (strcasecmp(filename, "adisk.ald") == 0) { - storeDataName(gr, DRIFILE_SCO, 0, path); + storeDataName(gr, DRIFILE_SCO, 0, filename); } else if (strcasecmp(filename, "System39.ain") == 0) { - gr->ain = strdup(path); + gr->ain = strdup(filename); } else if (strcasecmp(filename, "SACTEFAM.KLD") == 0) { - gr->sact01 = strdup(path); + gr->sact01 = strdup(filename); } else if (strcasecmp(filename, "System39.ini") == 0) { - gr->init = strdup(path); + gr->init = strdup(filename); } else if (len >= 4 && strcasecmp(filename + len - 4, ".wai") == 0) { - gr->wai = strdup(path); + gr->wai = strdup(filename); } else if (len >= 4 && strcasecmp(filename + len - 4, ".bgi") == 0) { - gr->bgi = strdup(path); + gr->bgi = strdup(filename); } else if (len >= 5 && strcasecmp(filename + len - 4, ".alk") == 0) { if (!isdigit(filename[len - 5])) continue; - gr->alk[filename[len - 5] - '0'] = strdup(path); + gr->alk[filename[len - 5] - '0'] = strdup(filename); } else if (len >= 6 && strcasecmp(filename + len - 4, ".ald") == 0) { int dno = toupper(filename[len - 5]) - 'A'; if (dno < 0 || dno >= DRIFILEMAX) continue; switch (toupper(filename[len - 6])) { case 'S': - storeDataName(gr, DRIFILE_SCO, dno, path); + storeDataName(gr, DRIFILE_SCO, dno, filename); break; case 'G': - storeDataName(gr, DRIFILE_CG, dno, path); + storeDataName(gr, DRIFILE_CG, dno, filename); break; case 'W': - storeDataName(gr, DRIFILE_WAVE, dno, path); + storeDataName(gr, DRIFILE_WAVE, dno, filename); break; case 'M': - storeDataName(gr, DRIFILE_MIDI, dno, path); + storeDataName(gr, DRIFILE_MIDI, dno, filename); break; case 'D': - storeDataName(gr, DRIFILE_DATA, dno, path); + storeDataName(gr, DRIFILE_DATA, dno, filename); break; case 'R': - storeDataName(gr, DRIFILE_RSC, dno, path); + storeDataName(gr, DRIFILE_RSC, dno, filename); break; case 'B': - storeDataName(gr, DRIFILE_BGM, dno, path); + storeDataName(gr, DRIFILE_BGM, dno, filename); break; } } } for (int i = 0; i < SAVE_MAXNUMBER; i++) { - sprintf(path, "%s/%c%s", cwd, 'a' + i, "sleep.asd"); - storeSaveName(gr, i, path); + char buf[] = "asleep.asd"; + buf[0] = 'a' + i; + storeSaveName(gr, i, buf); } return (gr->cnt[DRIFILE_SCO] > 0) ? TRUE : FALSE; diff --git a/src/gameresource_test.c b/src/gameresource_test.c index 5b10186..8926dba 100644 --- a/src/gameresource_test.c +++ b/src/gameresource_test.c @@ -72,12 +72,6 @@ static struct dirent *mockReaddir(DIR *dir) { return NULL; } -static const char *joinPath(const char *dir, const char *fname) { - static char buf[512]; - sprintf(buf, "%s/%s", dir, fname); - return buf; -} - static void initGameResourceFromDir_test(void) { const char *files[] = { "ADISK.ALD", @@ -99,30 +93,28 @@ static void initGameResourceFromDir_test(void) { NULL }; const char **dir = files; - static char cwd[256]; - getcwd(cwd, sizeof(cwd)); GameResource gr; ASSERT_TRUE(initGameResourceFromDir(&gr, (DIR *)&dir, mockReaddir)); ASSERT_EQUAL(gr.cnt[DRIFILE_SCO], 2); - ASSERT_STRCMP(gr.game_fname[DRIFILE_SCO][0], joinPath(cwd, "ADISK.ALD")); - ASSERT_STRCMP(gr.game_fname[DRIFILE_SCO][1], joinPath(cwd, "FOOSB.ALD")); + ASSERT_STRCMP(gr.game_fname[DRIFILE_SCO][0], "ADISK.ALD"); + ASSERT_STRCMP(gr.game_fname[DRIFILE_SCO][1], "FOOSB.ALD"); ASSERT_EQUAL(gr.cnt[DRIFILE_CG], 26); - ASSERT_STRCMP(gr.game_fname[DRIFILE_CG][25], joinPath(cwd, "foogz.ald")); + ASSERT_STRCMP(gr.game_fname[DRIFILE_CG][25], "foogz.ald"); ASSERT_EQUAL(gr.cnt[DRIFILE_WAVE], 1); - ASSERT_STRCMP(gr.game_fname[DRIFILE_WAVE][0], joinPath(cwd, "WA.ALD")); + ASSERT_STRCMP(gr.game_fname[DRIFILE_WAVE][0], "WA.ALD"); for (int i = 0; i < 26; i++) { char buf[16]; sprintf(buf, "%csleep.asd", 'a' + i); - ASSERT_STRCMP(gr.save_fname[i], joinPath(cwd, buf)); + ASSERT_STRCMP(gr.save_fname[i], buf); } - ASSERT_STRCMP(gr.save_path, cwd); - ASSERT_STRCMP(gr.ain, joinPath(cwd, "SYSTEM39.AIN")); - ASSERT_STRCMP(gr.wai, joinPath(cwd, "foo_WA.WAI")); - ASSERT_STRCMP(gr.bgi, joinPath(cwd, "foo_BA.BGI")); - ASSERT_STRCMP(gr.sact01, joinPath(cwd, "SACTEFAM.KLD")); - ASSERT_STRCMP(gr.init, joinPath(cwd, "System39.ini")); - ASSERT_STRCMP(gr.alk[0], joinPath(cwd, "0.alk")); - ASSERT_STRCMP(gr.alk[1], joinPath(cwd, "foo1.alk")); + ASSERT_STRCMP(gr.save_path, "."); + ASSERT_STRCMP(gr.ain, "SYSTEM39.AIN"); + ASSERT_STRCMP(gr.wai, "foo_WA.WAI"); + ASSERT_STRCMP(gr.bgi, "foo_BA.BGI"); + ASSERT_STRCMP(gr.sact01, "SACTEFAM.KLD"); + ASSERT_STRCMP(gr.init, "System39.ini"); + ASSERT_STRCMP(gr.alk[0], "0.alk"); + ASSERT_STRCMP(gr.alk[1], "foo1.alk"); for (int i = 2; i < 10; i++) ASSERT_NULL(gr.alk[i]); }