#include #define _KF_STATEFILE "data/state.bin" int kf_state_save(struct kf_state *state) { if (!kf_writebin(_KF_STATEFILE, (u8 *)state, sizeof(*state))) { KF_THROW("failed to write to %s", _KF_STATEFILE); return 0; /* unreachable */ } return 1; } int kf_state_load(struct kf_state **pstate) { char *infile = _KF_STATEFILE; kf_logdbg("loading state: %s", infile); int res = 0; if (!kf_exists(infile)) { kf_logdbg("creating state..."); struct kf_state s = {0}; kf_state_save(&s); res = 1; } size_t len = 0; *pstate = (struct kf_state *)kf_readbin(infile, &len); kf_logdbg("loaded state (%p): len=%lu (res=%d)", *pstate, len, res); if (!*pstate) { KF_THROW("failed to load state"); return -1; /* unreachable */ } return res; }