From a210387f8d5d07848f4b0d670351b0ba057c1aba Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Tue, 6 Aug 2013 19:02:58 -0700 Subject: [PATCH] srogue: don't store machine-dependent metadata in the savefile. Super-Rogue, like Rogue V4, stored data of machine-dependent length in the savefile, to prevent cheating. This made saved games non-portable. Also deleted was a check that used this data, and prevented restoring savefiles from backup. This change BREAKS SAVEFILE COMPATIBILITY, but old files can be converted by removing the block at offset 0x1e with length sizeof(ino_t) + sizeof(dev_t) + 2 * sizeof(time_t). That seems to be 0x14 on i686 and 0x20 on x86_64. --- srogue/save.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/srogue/save.c b/srogue/save.c index 6fd2354..437b668 100644 --- a/srogue/save.c +++ b/srogue/save.c @@ -186,10 +186,6 @@ FILE *savef; write(fnum, "RDK", 4); lseek(fnum, 0L, 0); encwrite(version,strlen(version)+1,savef); - encwrite(&sbuf.st_ino,sizeof(sbuf.st_ino),savef); - encwrite(&sbuf.st_dev,sizeof(sbuf.st_dev),savef); - encwrite(&sbuf.st_ctime,sizeof(sbuf.st_ctime),savef); - encwrite(&sbuf.st_mtime,sizeof(sbuf.st_mtime),savef); encwrite(&slines,sizeof(slines),savef); encwrite(&scols,sizeof(scols),savef); msg(""); @@ -238,10 +234,6 @@ char *file, **envp; fstat(inf, &sbuf2); - encread(&sbuf.st_ino,sizeof(sbuf.st_ino), inf); - encread(&sbuf.st_dev,sizeof(sbuf.st_dev), inf); - encread(&sbuf.st_ctime,sizeof(sbuf.st_ctime), inf); - encread(&sbuf.st_mtime,sizeof(sbuf.st_mtime), inf); encread(&slines,sizeof(slines),inf); encread(&scols,sizeof(scols),inf); @@ -250,14 +242,6 @@ char *file, **envp; * inode for as long as possible */ - if (!wizard) - { - if(sbuf2.st_ino!=sbuf.st_ino || sbuf2.st_dev!=sbuf.st_dev) { - printf("Sorry, saved game is not in the same file.\n"); - return FALSE; - } - } - #ifdef __INTERIX setenv("TERM","interix"); #endif