aa0180571e
Renames savefile_t to saveslot_t and folds last session's standalone settings.h/.c module back in as savemeta_t, so there's one save system (SAVE.slots[] + SAVE.meta) instead of two parallel ones - while letting each platform pick its own physical format for the two concepts: - Linux now writes human-editable JSON (slot0.json, settings.json, ...) via yyjson's mutable writer API, so players can hand-fix a bad setting. - PSP folds meta into the same sceUtilitySavedata binary payload as its one save slot (SAVE_SLOT_COUNT_MAX=1 there - a future save picker will let players manage multiple named saves via the OS's own browser). - GameCube consolidates the 3 per-slot memory card files and the separate settings file into one combined card file. Also fixes two bugs surfaced while building this: the CRC finalize step seeked to a hardcoded offset (only safe for one section per file, breaks once meta+slots share a buffer), and save.c's async/sync dispatch left an unconditional fallback call that doesn't exist on PSP-only platforms. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
81 lines
2.0 KiB
C
81 lines
2.0 KiB
C
/**
|
|
* Copyright (c) 2026 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "error/error.h"
|
|
#include "save/saveslot.h"
|
|
#include "save/savemeta.h"
|
|
|
|
#define SAVE_LINUX_PATH_MAX FILENAME_MAX
|
|
#define SAVE_LINUX_SLOT_FILE_FORMAT "%s/slot%u.json"
|
|
#define SAVE_LINUX_META_FILE_FORMAT "%s/settings.json"
|
|
|
|
#ifndef SAVE_LINUX_PATH
|
|
#define SAVE_LINUX_PATH "./saves"
|
|
#endif
|
|
|
|
typedef struct {
|
|
char_t savePath[SAVE_LINUX_PATH_MAX];
|
|
} savelinux_t;
|
|
|
|
/**
|
|
* Initializes the save system on Linux - ensures the save directory
|
|
* exists (shared by both save slots and meta).
|
|
*
|
|
* @return An error code if initialization fails.
|
|
*/
|
|
errorret_t saveInitLinux(void);
|
|
|
|
/**
|
|
* Disposes of the save system on Linux.
|
|
*
|
|
* @return An error code if disposal fails.
|
|
*/
|
|
errorret_t saveDisposeLinux(void);
|
|
|
|
/**
|
|
* Loads a save slot as JSON (slotN.json) from disk, if it exists.
|
|
*
|
|
* @param slot The save slot index.
|
|
* @param out Output slot data.
|
|
* @return An error code if the slot exists but fails to parse.
|
|
*/
|
|
errorret_t saveSlotLoadLinux(const uint8_t slot, saveslot_t *out);
|
|
|
|
/**
|
|
* Writes a save slot as JSON (slotN.json) to disk.
|
|
*
|
|
* @param slot The save slot index.
|
|
* @param slotData Slot data to write.
|
|
* @return An error code if the write fails.
|
|
*/
|
|
errorret_t saveSlotWriteLinux(const uint8_t slot, saveslot_t *slotData);
|
|
|
|
/**
|
|
* Deletes the save slot JSON file for the given index.
|
|
*
|
|
* @param slot The save slot index.
|
|
* @return An error code if the delete fails.
|
|
*/
|
|
errorret_t saveDeleteSlotLinux(const uint8_t slot);
|
|
|
|
/**
|
|
* Loads save meta as JSON (settings.json) from disk, if it exists.
|
|
*
|
|
* @param out Output meta data.
|
|
* @return An error code if the file exists but fails to parse.
|
|
*/
|
|
errorret_t saveMetaLoadLinux(savemeta_t *out);
|
|
|
|
/**
|
|
* Writes save meta as JSON (settings.json) to disk.
|
|
*
|
|
* @param meta Meta data to write.
|
|
* @return An error code if the write fails.
|
|
*/
|
|
errorret_t saveMetaWriteLinux(savemeta_t *meta);
|