mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
initGameResourceFromDir: Stop prepending CWD to filenames
This commit is contained in:
+22
-24
@@ -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;
|
||||
|
||||
+13
-21
@@ -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]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user