diff --git a/src/system4.c b/src/system4.c index 397ad33..0e7caa9 100644 --- a/src/system4.c +++ b/src/system4.c @@ -73,10 +73,12 @@ char *gamedir_path(const char *path) char *savedir_path(const char *filename) { - char *path = xmalloc(strlen(config.save_dir) + 1 + strlen(filename) + 1); + char *utf = sjis2utf(filename, 0); + char *path = xmalloc(strlen(config.save_dir) + 1 + strlen(utf) + 1); strcpy(path, config.save_dir); strcat(path, "/"); - strcat(path, filename); + strcat(path, utf); + free(utf); return path; } diff --git a/src/vm.c b/src/vm.c index 0aed51e..be236b9 100644 --- a/src/vm.c +++ b/src/vm.c @@ -487,15 +487,7 @@ static void system_call(enum syscall_code code) } case SYS_EXISTS_SAVE_FILE: { int slot = stack_pop().i; - struct string *name = heap[slot].s; - size_t dir_len = strlen(config.save_dir); - char *path = xmalloc(dir_len + 1 + name->size + 1); - - strncpy(path, config.save_dir, dir_len); - path[dir_len] = '/'; - strncpy(path+dir_len+1, name->text, name->size); - path[dir_len+1+name->size] = '\0'; - + char *path = savedir_path(heap[slot].s->text); stack_push(file_exists(path)); heap_unref(slot); free(path);