]> granicus.if.org Git - nethack/commitdiff
fix bz157, #H4075 - 'realtime' had strange units
authorPatR <rankin@nethack.org>
Wed, 16 Dec 2015 01:59:42 +0000 (17:59 -0800)
committerPatR <rankin@nethack.org>
Wed, 16 Dec 2015 01:59:42 +0000 (17:59 -0800)
A couple of reports asked what weird unit of measure was used for the
'realtime' value in xlogfile.  It was just seconds, but was accumulating
incorrectly whenever game-state got saved for the checkpoint option.
Now it really is seconds, or rather whatever unit you get for the delta
of two time_t values; usually seconds but not guaranteed to be that.

doc/fixes36.1
include/you.h
src/allmain.c
src/end.c
src/restore.c
src/save.c
src/topten.c

index f4088b147c5abe64098f95df8b17a80db1edad21..8b475665a1de608909fbef321f8ed8ac13e5a077 100644 (file)
@@ -31,6 +31,7 @@ fix typo in passage 1 of The Colour of Magic
 falling asleep when reading dull spellbook ignored sleep resistance
 getpos() complaint about invalid movement keystroke didn't describe meta-chars
        accurately
+'realtime' value in xlogfile was incorrect if 'checkpoint' option was active
 
 
 Platform- and/or Interface-Specific Fixes
index ef45eef462503159cbeaa52e65a6d5d77499961b..78a3a1334dba0af066b6185cce601c1895c3f1a1 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 you.h   $NHDT-Date: 1432512782 2015/05/25 00:13:02 $  $NHDT-Branch: master $:$NHDT-Revision: 1.29 $ */
+/* NetHack 3.6 you.h   $NHDT-Date: 1450231172 2015/12/16 01:59:32 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.30 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -68,10 +68,11 @@ struct u_achieve {
 };
 
 struct u_realtime {
-    long
-        realtime; /* actual playing time up until the last restore, seconds */
-    time_t restored; /* time the game was started or restored */
-    time_t endtime;
+    long   realtime;     /* accumulated playing time in seconds */
+    time_t start_timing; /* time game was started or restored or 'realtime'
+                            was last updated (savegamestate for checkpoint) */
+    time_t finish_time;  /* end of 'realtime' interval: time of save or
+                            end of game; used for topten/logfile/xlogfile */
 };
 
 /* KMH, conduct --
index 962df4c688e69469e1054012a32e9f8dc18a6abc..02fa6480f9547c1892490967848c8920756868d7 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 allmain.c       $NHDT-Date: 1446975459 2015/11/08 09:37:39 $  $NHDT-Branch: master $:$NHDT-Revision: 1.66 $ */
+/* NetHack 3.6 allmain.c       $NHDT-Date: 1450231173 2015/12/16 01:59:33 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.67 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -587,18 +587,13 @@ newgame()
         com_pager(1);
     }
 
+    urealtime.realtime = 0L;
+    urealtime.start_timing = getnow();
 #ifdef INSURANCE
     save_currentstate();
 #endif
     program_state.something_worth_saving++; /* useful data now exists */
 
-    urealtime.realtime = 0L;
-#if defined(BSD) && !defined(POSIX_TYPES)
-    (void) time((long *) &urealtime.restored);
-#else
-    (void) time(&urealtime.restored);
-#endif
-
     /* Success! */
     welcome(TRUE);
     return;
index e245e30e4fe258a2053ce598c748b0be0268925a..20ca00d098b11d66d9572121383c2bc3130a6003 100644 (file)
--- a/src/end.c
+++ b/src/end.c
@@ -1,4 +1,4 @@
-/* NetHack 3.6 end.c   $NHDT-Date: 1448241780 2015/11/23 01:23:00 $  $NHDT-Branch: master $:$NHDT-Revision: 1.108 $ */
+/* NetHack 3.6 end.c   $NHDT-Date: 1450231174 2015/12/16 01:59:34 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.110 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -951,8 +951,8 @@ int how;
     /* remember time of death here instead of having bones, rip, and
        topten figure it out separately and possibly getting different
        time or even day if player is slow responding to --More-- */
-    endtime = getnow();
-    urealtime.realtime += (long) (endtime - urealtime.restored);
+    urealtime.finish_time = endtime = getnow();
+    urealtime.realtime += (long) (endtime - urealtime.start_timing);
 
     /* Sometimes you die on the first move.  Life's not fair.
      * On those rare occasions you get hosed immediately, go out
index 99c5ad61f4e5f9bf093266700129e2ebaba97ea7..d56af4ea6c13956c7007f748a1f8a96582dc6404 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 restore.c       $NHDT-Date: 1446892455 2015/11/07 10:34:15 $  $NHDT-Branch: master $:$NHDT-Revision: 1.101 $ */
+/* NetHack 3.6 restore.c       $NHDT-Date: 1450231174 2015/12/16 01:59:34 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.102 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -568,13 +568,10 @@ unsigned int *stuckid, *steedid;
     foo = time_from_yyyymmddhhmmss(timebuf);
 
     ReadTimebuf(ubirthday);
-    mread(fd, &urealtime.realtime, sizeof(urealtime.realtime));
-    ReadTimebuf(urealtime.restored);
-#if defined(BSD) && !defined(POSIX_TYPES)
-    (void) time((long *) &urealtime.restored);
-#else
-    (void) time(&urealtime.restored);
-#endif
+    mread(fd, &urealtime.realtime, sizeof urealtime.realtime);
+    ReadTimebuf(urealtime.start_timing); /** [not used] **/
+    /* current time is the time to use for next urealtime.realtime update */
+    urealtime.start_timing = getnow();
 
     set_uasmon();
 #ifdef CLIPPING
index 2fc0872093f6689144d8ca3e88aa2faa46caac2e..f1e4ecf7b05c21cf0fe4d8b11a7b4e2bfe67a459 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 save.c  $NHDT-Date: 1448241784 2015/11/23 01:23:04 $  $NHDT-Branch: master $:$NHDT-Revision: 1.95 $ */
+/* NetHack 3.6 save.c  $NHDT-Date: 1450231175 2015/12/16 01:59:35 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.98 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -289,12 +289,15 @@ register int fd, mode;
 #ifdef SYSFLAGS
     bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
 #endif
-    urealtime.realtime += (long) (getnow() - urealtime.restored);
+    urealtime.finish_time = getnow();
+    urealtime.realtime += (long) (urealtime.finish_time
+                                  - urealtime.start_timing);
     bwrite(fd, (genericptr_t) &u, sizeof(struct you));
     bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
-    bwrite(fd, (genericptr_t) &urealtime.realtime,
-           sizeof(urealtime.realtime));
-    bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14);
+    bwrite(fd, (genericptr_t) &urealtime.realtime, sizeof urealtime.realtime);
+    bwrite(fd, yyyymmddhhmmss(urealtime.start_timing), 14);  /** Why? **/
+    /* this is the value to use for the next update of urealtime.realtime */
+    urealtime.start_timing = urealtime.finish_time;
     save_killers(fd, mode);
 
     /* must come before migrating_objs and migrating_mons are freed */
index 7ea996da3a1c753dcb6ccd0a1cf1bc2e7e22056b..375eb1d235445e7c09b433772429bd2197f7e957 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 topten.c        $NHDT-Date: 1448117546 2015/11/21 14:52:26 $  $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */
+/* NetHack 3.6 topten.c        $NHDT-Date: 1450231176 2015/12/16 01:59:36 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.41 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -330,8 +330,8 @@ struct toptenentry *tt;
     Fprintf(rfile, "%cconduct=0x%lx%cturns=%ld%cachieve=0x%lx", XLOG_SEP,
             encodeconduct(), XLOG_SEP, moves, XLOG_SEP, encodeachieve());
     Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld", XLOG_SEP,
-            (long) urealtime.realtime, XLOG_SEP, (long) ubirthday, XLOG_SEP,
-            (long) urealtime.endtime);
+            (long) urealtime.realtime, XLOG_SEP,
+            (long) ubirthday, XLOG_SEP, (long) urealtime.finish_time);
     Fprintf(rfile, "%cgender0=%s%calign0=%s", XLOG_SEP,
             genders[flags.initgend].filecode, XLOG_SEP,
             aligns[1 - u.ualignbase[A_ORIGINAL]].filecode);
@@ -516,7 +516,6 @@ time_t when;
     t0->birthdate = yyyymmdd(ubirthday);
     t0->deathdate = yyyymmdd(when);
     t0->tt_next = 0;
-    urealtime.endtime = when;
 #ifdef UPDATE_RECORD_IN_PLACE
     t0->fpos = -1L;
 #endif