/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "save/save.h" #include "save/savestreamlinux.h" #include "util/string.h" #include #include static void _saveStreamGetPath( char_t *out, const size_t max, const uint8_t slot ) { snprintf( out, max, SAVE_LINUX_FILE_FORMAT, SAVE.platform.savePath, (uint32_t)slot ); } errorret_t saveStreamOpenReadLinux( savestreamlinux_t *p, bool_t *found, const uint8_t slot ) { char_t path[SAVE_LINUX_PATH_MAX]; _saveStreamGetPath(path, SAVE_LINUX_PATH_MAX, slot); p->file = fopen(path, "rb"); *found = (p->file != NULL); errorOk(); } errorret_t saveStreamOpenWriteLinux(savestreamlinux_t *p, const uint8_t slot) { char_t path[SAVE_LINUX_PATH_MAX]; _saveStreamGetPath(path, SAVE_LINUX_PATH_MAX, slot); p->file = fopen(path, "wb"); if(!p->file) { errorThrow("Failed to open save file for writing: slot %u", (uint32_t)slot); } errorOk(); } void saveStreamCloseLinux(savestreamlinux_t *p) { if(p->file) { fclose(p->file); p->file = NULL; } } errorret_t saveStreamReadBytesLinux( savestreamlinux_t *p, void *buf, const size_t len ) { if(fread(buf, 1, len, p->file) != len) { errorThrow("Unexpected end of save file"); } errorOk(); } errorret_t saveStreamWriteBytesLinux( savestreamlinux_t *p, const void *buf, const size_t len ) { if(fwrite(buf, 1, len, p->file) != len) { errorThrow("Failed to write save data"); } errorOk(); } errorret_t saveStreamSeekLinux(savestreamlinux_t *p, const size_t pos) { if(fseek(p->file, (long)pos, SEEK_SET) != 0) { errorThrow("Failed to seek in save file"); } errorOk(); }