]> granicus.if.org Git - nethack/commitdiff
stairway save/restore bit
authornhmall <nhmall@nethack.org>
Thu, 3 Dec 2020 15:05:31 +0000 (10:05 -0500)
committernhmall <nhmall@nethack.org>
Thu, 3 Dec 2020 15:05:31 +0000 (10:05 -0500)
The logic surrounding stairway saves and restores should not be within
a block reserved for deliminating external file structure.

src/restore.c
src/save.c

index e28648769f9179da1a1ba17395d259f6633f6722..528d76a0463c47caa8eb3eedcee00d8e9950d5ed 100644 (file)
@@ -923,15 +923,14 @@ NHFILE *nhfp;
         if (buflen == -1)
             break;
 
+        len += (int) sizeof (stairway);
         if (nhfp->structlevel) {
-            len += (int) sizeof (stairway);
             mread(nhfp->fd, (genericptr_t) &stway, sizeof (stairway));
-            if (stway.tolev.dnum == u.uz.dnum) {
-                /* stairway dlevel is relative, make it absolute */
-                stway.tolev.dlevel += u.uz.dlevel;
-            }
         }
-
+        if (stway.tolev.dnum == u.uz.dnum) {
+            /* stairway dlevel is relative, make it absolute */
+            stway.tolev.dlevel += u.uz.dlevel;
+        }
         stairway_add(stway.sx, stway.sy, stway.up, stway.isladder,
                      &(stway.tolev));
     }
index bc8def125f970d7f32e488037c151e5768e48f5c..f463e8939db385be03b7abed19c94dc0ad2d9897 100644 (file)
@@ -668,24 +668,24 @@ NHFILE *nhfp;
 
     while (stway) {
         if (perform_bwrite(nhfp)) {
+            if (stway->tolev.dnum == u.uz.dnum) {
+                /* make dlevel relative to current level */
+                stway->tolev.dlevel -= u.uz.dlevel;
+            }
             if (nhfp->structlevel) {
-                if (stway->tolev.dnum == u.uz.dnum) {
-                    /* make dlevel relative to current level */
-                    stway->tolev.dlevel -= u.uz.dlevel;
-                }
                 bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
                 bwrite(nhfp->fd, (genericptr_t) stway, sizeof *stway);
-                if (stway->tolev.dnum == u.uz.dnum) {
-                    /* reset staiway dlevel back to absolute */
-                    stway->tolev.dlevel += u.uz.dlevel;
-                }
+            }
+            if (stway->tolev.dnum == u.uz.dnum) {
+                /* reset staiway dlevel back to absolute */
+                stway->tolev.dlevel += u.uz.dlevel;
             }
         }
         stway = stway->next;
     }
     if (perform_bwrite(nhfp)) {
+        buflen = -1;
         if (nhfp->structlevel) {
-            buflen = -1;
             bwrite(nhfp->fd, (genericptr_t) &buflen, sizeof buflen);
         }
     }