bool replay_save(Replay *rpy, const char *name) { char *p = replay_getpath(name, !strendswith(name, REPLAY_EXTENSION)); char *sp = vfs_repr(p, true); log_info("Saving %s", sp); free(sp); SDL_RWops *file = vfs_open(p, VFS_MODE_WRITE); free(p); if(!file) { log_warn("VFS error: %s", vfs_get_error()); return false; } bool result = replay_write(rpy, file, REPLAY_STRUCT_VERSION_WRITE); SDL_RWclose(file); return result; }
static int gamepad_load_mappings(const char *vpath, int warn_noexist) { char *repr = vfs_repr(vpath, true); char *errstr = NULL; const char *const_errstr = NULL; SDL_RWops *mappings = vfs_open(vpath, VFS_MODE_READ | VFS_MODE_SEEKABLE); int num_loaded = -1; LogLevel loglvl = LOG_WARN; if(!mappings) { if(!warn_noexist) { VFSInfo vinfo = vfs_query(vpath); if(!vinfo.error && !vinfo.exists && !vinfo.is_dir) { loglvl = LOG_INFO; const_errstr = errstr = strfmt("Custom mappings file '%s' does not exist (this is ok)", repr); goto cleanup; } } const_errstr = vfs_get_error(); goto cleanup; } if((num_loaded = SDL_GameControllerAddMappingsFromRW(mappings, true)) < 0) { const_errstr = SDL_GetError(); } cleanup: if(const_errstr) { log_custom(loglvl, "Couldn't load mappings: %s", const_errstr); } else if(num_loaded >= 0) { log_info("Loaded %i mappings from '%s'", num_loaded, repr); } free(repr); free(errstr); return num_loaded; }
bool replay_load(Replay *rpy, const char *name, ReplayReadMode mode) { char *p = replay_getpath(name, !strendswith(name, REPLAY_EXTENSION)); char *sp = vfs_repr(p, true); log_info("Loading %s (%s)", sp, replay_mode_string(mode)); SDL_RWops *file = vfs_open(p, VFS_MODE_READ); free(p); if(!file) { log_warn("VFS error: %s", vfs_get_error()); free(sp); return false; } bool result = replay_read(rpy, file, mode, sp); if(!result) { replay_destroy(rpy); } free(sp); SDL_RWclose(file); return result; }