X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=saveresume.c;fp=saveresume.c;h=c6d0ba0f274d3e73271e92b171a95521caf96694;hp=0b71319c0dc835368eb95f0df39d1dc6e8f5d292;hb=520d365f74b77496c2b5f7897463e1ddbaf5dfb9;hpb=4b08b726f9735b5a6a17e588753a496700ff25f7 diff --git a/saveresume.c b/saveresume.c index 0b71319..c6d0ba0 100644 --- a/saveresume.c +++ b/saveresume.c @@ -18,6 +18,11 @@ #include "advent.h" #include "dungeon.h" +/* + * Use this to detect endianness mismatch. Can't be unchanges by byte-swapping. + */ +#define ENDIAN_MAGIC 2317 + struct save_t save; #define IGNORE(r) do{if (r){}}while(0) @@ -28,6 +33,8 @@ int savefile(FILE *fp) memcpy(&save.magic, ADVENT_MAGIC, sizeof(ADVENT_MAGIC)); if (save.version == 0) save.version = SAVE_VERSION; + if (save.canary == 0) + save.canary = ENDIAN_MAGIC; save.game = game; IGNORE(fwrite(&save, sizeof(struct save_t), 1, fp)); @@ -136,7 +143,7 @@ int restore(FILE* fp) IGNORE(fread(&save, sizeof(struct save_t), 1, fp)); fclose(fp); - if (memcmp(save.magic, ADVENT_MAGIC, sizeof(ADVENT_MAGIC)) != 0) + if (memcmp(save.magic, ADVENT_MAGIC, sizeof(ADVENT_MAGIC)) != 0 || save.canary != ENDIAN_MAGIC) rspeak(BAD_SAVE); else if (save.version != SAVE_VERSION) { rspeak(VERSION_SKEW, save.version / 10, MOD(save.version, 10), SAVE_VERSION / 10, MOD(SAVE_VERSION, 10));