diff arogue7/state.c @ 309:11aeff9acc07

Advanced Rogue 7: ignore file locations in the save file when restoring. The variables file_name, score_file, and home are no longer overwritten with the values stored in the save file. Those values could be inaccurate if the files have been moved or configuration has changed.
author John "Elwin" Edwards
date Sun, 02 May 2021 21:54:11 -0400
parents e52a8a7ad4c5
children
line wrap: on
line diff
--- a/arogue7/state.c	Sat May 01 09:51:30 2021 -0400
+++ b/arogue7/state.c	Sun May 02 21:54:11 2021 -0400
@@ -2511,6 +2511,7 @@
 rs_save_file(FILE *savef)
 {
     int i;
+    char temp_buf[LINELEN];
 
     if (write_error)
         return(WRITESTAT);
@@ -2583,9 +2584,17 @@
     rs_write_misc(savef);
     rs_write(savef,whoami,LINELEN);
     rs_write(savef,huh,LINELEN);
-    rs_write(savef,file_name,LINELEN);
-    rs_write(savef,score_file,LINELEN);
-    rs_write(savef,home,LINELEN);
+    /* These path names are no longer used when restoring.  They are only
+     * written here for compatibility. */
+    strncpy(temp_buf, file_name, LINELEN);
+    temp_buf[LINELEN-1] = '\0';
+    rs_write(savef, temp_buf, LINELEN);
+    strncpy(temp_buf, score_file, LINELEN);
+    temp_buf[LINELEN-1] = '\0';
+    rs_write(savef, temp_buf, LINELEN);
+    strncpy(temp_buf, home, LINELEN);
+    temp_buf[LINELEN-1] = '\0';
+    rs_write(savef, temp_buf, LINELEN);
     rs_write_window(savef, cw);
     rs_write_window(savef, hw);
     rs_write_window(savef, mw);
@@ -2638,6 +2647,7 @@
 rs_restore_file(FILE *inf)
 {
     int i;
+    char unused_buf[LINELEN];
     
     if (read_error || format_error)
         return(READSTAT);
@@ -2715,9 +2725,10 @@
     rs_read_misc(inf);
     rs_read(inf,whoami,LINELEN);
     rs_read(inf,huh,LINELEN);
-    rs_read(inf,file_name,LINELEN);
-    rs_read(inf,score_file,LINELEN);
-    rs_read(inf,home,LINELEN);
+    /* These three path names are now ignored. */
+    rs_read(inf, unused_buf, LINELEN); /* file_name */
+    rs_read(inf, unused_buf, LINELEN); /* score_file */
+    rs_read(inf, unused_buf, LINELEN); /* home */
     rs_read_window(inf, cw);
     rs_read_window(inf, hw);
     rs_read_window(inf, mw);