void sys_checkdir(char *path, int wr) { char *p; if (access(path, X_OK | (wr ? W_OK : 0))) { if (!access(path, F_OK)) die("cannot access %s: %s\n", path, strerror(errno)); p = strrchr(path, '/'); if (!p) die("descended to root trying to create dirs\n"); *p = 0; sys_checkdir(path, wr); *p = '/'; if (mkdir(path, 0777)) die("cannot create %s: %s\n", path, strerror(errno)); } }
void loader_init(char *s) { char *name, *p; sys_checkdir(savedir, 1); /* needs to be writable */ romfile = s; rom_load(); vid_settitle(rom.name); if (savename && *savename) { if (savename[0] == '-' && savename[1] == 0) name = ldup(rom.name); else name = strdup(savename); } else if (romfile && *base(romfile) && strcmp(romfile, "-")) { name = strdup(base(romfile)); p = strchr(name, '.'); if (p) *p = 0; } else name = ldup(rom.name); saveprefix = malloc(strlen(savedir) + strlen(name) + 2); sprintf(saveprefix, "%s/%s", savedir, name); sramfile = malloc(strlen(saveprefix) + 5); strcpy(sramfile, saveprefix); strcat(sramfile, ".sav"); rtcfile = malloc(strlen(saveprefix) + 5); strcpy(rtcfile, saveprefix); strcat(rtcfile, ".rtc"); sram_load(); rtc_load(); atexit(cleanup); }