]> granicus.if.org Git - nethack/commitdiff
Save xlogfile time_t fields correctly
authorPasi Kallinen <paxed@alt.org>
Thu, 19 Mar 2015 15:41:14 +0000 (17:41 +0200)
committerPasi Kallinen <paxed@alt.org>
Thu, 19 Mar 2015 15:41:14 +0000 (17:41 +0200)
include/decl.h
include/patchlevel.h
include/you.h
src/allmain.c
src/decl.c
src/end.c
src/restore.c
src/save.c
src/topten.c
src/u_init.c

index 2071277dc439771944550717325ef751b320eaa1..bacff08d9b2a5efd64b416e2621f8561c28f9973 100644 (file)
@@ -244,6 +244,7 @@ E NEARDATA anything zeroany;                /* init'd and defined in decl.c */
 #include "you.h"
 E NEARDATA struct you u;
 E NEARDATA time_t ubirthday;
+E NEARDATA struct u_realtime urealtime;
 
 #include "onames.h"
 #ifndef PM_H           /* (pm.h has already been included via youprop.h) */
index 00411a2c2385436c6ceace72a6c3ddb8a779cd66..02b8b3bfa6a4df59073bdfbd961a6a8e4accdf39 100644 (file)
@@ -14,7 +14,7 @@
  * Incrementing EDITLEVEL can be used to force invalidation of old bones
  * and save files.
  */
-#define EDITLEVEL      56
+#define EDITLEVEL      57
 
 #define COPYRIGHT_BANNER_A \
 "NetHack, Copyright 1985-2012"
index 81aba0ba4f69efb03a17a904a03879a4ebdb343d..0fc5c6073c9310ea1337480563bb9d451cf3e4f1 100644 (file)
@@ -327,7 +327,6 @@ struct you {
 
        unsigned udg_cnt;               /* how long you have been demigod */
        struct u_achieve uachieve;      /* achievements */
-       struct u_realtime urealtime;
        struct u_event  uevent;         /* certain events have happened */
        struct u_have   uhave;          /* you're carrying special objects */
        struct u_conduct uconduct;      /* KMH, conduct */
index eb1f2b69bef8cb68c52be6cd2d77f130900b8d3b..45c3190378cd59a2760f12a0d3056d7b2000c2a7 100644 (file)
@@ -533,11 +533,11 @@ newgame()
 #endif
        program_state.something_worth_saving++; /* useful data now exists */
 
-       u.urealtime.realtime = (time_t)0L;
+       urealtime.realtime = (time_t)0L;
 #if defined(BSD) && !defined(POSIX_TYPES)
-        (void) time((long *)&u.urealtime.restored);
+        (void) time((long *)&urealtime.restored);
 #else
-        (void) time(&u.urealtime.restored);
+        (void) time(&urealtime.restored);
 #endif
 
        /* Success! */
index 6c83f0f143bc68aca6b33503436e30779a0d9d00..d0d29a35f3718a2be8b831d86fe975e0b9c89c23 100644 (file)
@@ -136,6 +136,7 @@ NEARDATA struct sysflag sysflags = DUMMY;
 NEARDATA struct instance_flags iflags = DUMMY;
 NEARDATA struct you u = DUMMY;
 NEARDATA time_t ubirthday = DUMMY;
+NEARDATA struct u_realtime urealtime = DUMMY;
 
 
 schar lastseentyp[COLNO][ROWNO] = {DUMMY}; /* last seen/touched dungeon typ */
index 111fd1b3a87c83d3544302f6ee1513833119f917..7ada3976715721926ee2dba7a259f5218b442a19 100644 (file)
--- a/src/end.c
+++ b/src/end.c
@@ -911,7 +911,7 @@ die:
           topten figure it out separately and possibly getting different
            time or even day if player is slow responding to --More-- */
        endtime = getnow();
-       u.urealtime.realtime += (endtime - u.urealtime.restored);
+       urealtime.realtime += (endtime - urealtime.restored);
 
        /* Sometimes you die on the first move.  Life's not fair.
         * On those rare occasions you get hosed immediately, go out
index 9f336d3add9593476ec2c67550186a74c49c1486..4e4502b53e2060bc73d430abcbeab932c98137da 100644 (file)
@@ -551,13 +551,18 @@ unsigned int *stuckid, *steedid;
        amii_setpens(amii_numcolors);   /* use colors from save file */
 #endif
        mread(fd, (genericptr_t) &u, sizeof(struct you));
-       mread(fd, (genericptr_t) timebuf, 14);
-       timebuf[14] = '\0';
-       ubirthday = time_from_yyyymmddhhmmss(timebuf);
+
+#define ReadTimebuf(foo)       mread(fd, (genericptr_t) timebuf, 14);  \
+    timebuf[14] = '\0';                                                        \
+    foo = time_from_yyyymmddhhmmss(timebuf);
+
+       ReadTimebuf(ubirthday);
+       ReadTimebuf(urealtime.realtime);
+       ReadTimebuf(urealtime.restored);
 #if defined(BSD) && !defined(POSIX_TYPES)
-       (void) time((long *)&u.urealtime.restored);
+       (void) time((long *)&urealtime.restored);
 #else
-       (void) time(&u.urealtime.restored);
+       (void) time(&urealtime.restored);
 #endif
 
 
index 9648471900c8e5cc05aa156596926e5af6a59d6e..807ecd7dcf4aaab87394672111de05fa7de87f0f 100644 (file)
@@ -307,9 +307,11 @@ register int fd, mode;
 #ifdef SYSFLAGS
        bwrite(fd, (genericptr_t) &sysflags, sizeof(struct sysflag));
 #endif
-       u.urealtime.realtime += (getnow() - u.urealtime.restored);
+       urealtime.realtime += (getnow() - urealtime.restored);
        bwrite(fd, (genericptr_t) &u, sizeof(struct you));
        bwrite(fd, yyyymmddhhmmss(ubirthday), 14);
+       bwrite(fd, yyyymmddhhmmss(urealtime.realtime), 14);
+       bwrite(fd, yyyymmddhhmmss(urealtime.restored), 14);
        save_killers(fd, mode);
 
        /* must come before migrating_objs and migrating_mons are freed */
index 12adcc4499b1e83a56112b3940911c40b406bfd9..b68ad1bce46f82cf5198db1de5b5914e41974f7e 100644 (file)
@@ -334,10 +334,10 @@ struct toptenentry *tt;
            XLOG_SEP, encodeconduct(),
            XLOG_SEP, moves,
            XLOG_SEP, encodeachieve());
-    Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime%ld",
-           XLOG_SEP, (long)u.urealtime.realtime,
+    Fprintf(rfile, "%crealtime=%ld%cstarttime=%ld%cendtime=%ld",
+           XLOG_SEP, (long)urealtime.realtime,
            XLOG_SEP, (long)ubirthday,
-           XLOG_SEP, (long)u.urealtime.endtime);
+           XLOG_SEP, (long)urealtime.endtime);
     Fprintf(rfile, "%cgender0=%s%calign0=%s",
            XLOG_SEP, genders[flags.initgend].filecode,
            XLOG_SEP, aligns[1 - u.ualignbase[A_ORIGINAL]].filecode);
@@ -480,7 +480,7 @@ time_t when;
        t0->birthdate = yyyymmdd(ubirthday);
        t0->deathdate = yyyymmdd(when);
        t0->tt_next = 0;
-       u.urealtime.endtime = when;
+       urealtime.endtime = when;
 #ifdef UPDATE_RECORD_IN_PLACE
        t0->fpos = -1L;
 #endif
index bfe54671caa4dd0fc63e66941414a5ed9cc94878..79954841c970bdfe2f10722255fa9366b4d084a4 100644 (file)
@@ -500,6 +500,7 @@ u_init()
        (void) memset((genericptr_t)&u, 0, sizeof(u));
        u.ustuck = (struct monst *)0;
        (void) memset((genericptr_t)&ubirthday, 0, sizeof(ubirthday));
+       (void) memset((genericptr_t)&urealtime, 0, sizeof(urealtime));
 
 #if 0  /* documentation of more zero values as desirable */
        u.usick_cause[0] = 0;