From f33b96b1d1886161da49867a9469174d568f6d7d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 5 Mar 2008 22:43:10 +0100 Subject: [PATCH] Set timestamp automatically on write Do it in do_write(). Remove the setting of timestamps elsewhere. This fixes empdump to set timestamps to the current time instead of zero on import. --- man/empdump.6 | 3 --- src/lib/commands/real.c | 1 - src/lib/common/file.c | 19 ++++++++++++------- src/lib/subs/land.c | 5 ----- src/lib/subs/lostsub.c | 2 -- src/lib/subs/natsub.c | 2 -- src/lib/subs/nuke.c | 5 ----- src/lib/subs/plane.c | 5 ----- src/lib/subs/sect.c | 2 -- src/lib/subs/ship.c | 5 ----- src/server/lostitem.c | 1 - 11 files changed, 12 insertions(+), 38 deletions(-) diff --git a/man/empdump.6 b/man/empdump.6 index 3e16c93e..6861062e 100644 --- a/man/empdump.6 +++ b/man/empdump.6 @@ -50,9 +50,6 @@ state may not result in identical data files; besides the loss of floating-point precision just mentioned, coordinates are normalized, and characters beyond a string's terminating zero in a character array are lost. -.SH "BUGS" -Importing resets timestamps to zero. It should set them to the -current time. .SH "SEE ALSO" \fIemp_server\fR(6). .SH AUTHOR diff --git a/src/lib/commands/real.c b/src/lib/commands/real.c index 8aff1b43..a5dcb461 100644 --- a/src/lib/commands/real.c +++ b/src/lib/commands/real.c @@ -89,7 +89,6 @@ real(void) realm.r_xh = abs.hx - 1; realm.r_yl = abs.ly; realm.r_yh = abs.hy - 1; - realm.r_timestamp = time(NULL); putrealm(&realm); list_realm(curr, natp); } diff --git a/src/lib/common/file.c b/src/lib/common/file.c index f2e4353a..96b2df66 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -48,7 +48,7 @@ static int ef_realloc_cache(struct empfile *, int); static int fillcache(struct empfile *, int); -static int do_write(struct empfile *, void *, int, int); +static int do_write(struct empfile *, void *, int, int, time_t); static void do_blank(struct empfile *, void *, int, int); /* @@ -230,8 +230,10 @@ ef_flush(int type) * allowed only with EFF_MEM. Assume the whole cash is dirty * then. */ - if (ep->flags & EFF_MEM) - return do_write(ep, ep->cache, ep->baseid, ep->cids) >= 0; + if (ep->flags & EFF_MEM) { + if (do_write(ep, ep->cache, ep->baseid, ep->cids, time(NULL)) < 0) + return 0; + } return 1; } @@ -337,10 +339,11 @@ fillcache(struct empfile *ep, int start) /* * Write COUNT elements from BUF to EP, starting at ID. + * Set the timestamp to NOW if the table has those. * Return 0 on success, -1 on error. */ static int -do_write(struct empfile *ep, void *buf, int id, int count) +do_write(struct empfile *ep, void *buf, int id, int count, time_t now) { int i, n, ret; char *p; @@ -361,6 +364,7 @@ do_write(struct empfile *ep, void *buf, int id, int count) elt->ef_type = ep->uid; if (CANT_HAPPEN(elt->uid != id + i)) elt->uid = id + i; + elt->timestamp = now; } } @@ -413,7 +417,7 @@ ef_write(int type, int id, void *from) if (CANT_HAPPEN((ep->flags & EFF_MEM) ? id >= ep->fids : id > ep->fids)) return 0; /* not implemented */ if (!(ep->flags & EFF_PRIVATE)) { - if (do_write(ep, from, id, 1) < 0) + if (do_write(ep, from, id, 1, time(NULL)) < 0) return 0; } if (id >= ep->baseid && id < ep->baseid + ep->cids) { @@ -440,6 +444,7 @@ ef_extend(int type, int count) struct empfile *ep; char *p; int i, id; + time_t now = time(NULL); if (ef_check(type) < 0) return 0; @@ -464,7 +469,7 @@ ef_extend(int type, int count) p = ep->cache + id * ep->size; do_blank(ep, p, id, count); if (ep->fd >= 0 && !(ep->flags & EFF_PRIVATE)) { - if (do_write(ep, p, id, count) < 0) + if (do_write(ep, p, id, count, now) < 0) return 0; } ep->cids += count; @@ -475,7 +480,7 @@ ef_extend(int type, int count) p = ep->cache + ep->cids * ep->size; for (i = 0; i < count; i++) { do_blank(ep, p, id + i, 1); - if (do_write(ep, p, id + i, 1) < 0) + if (do_write(ep, p, id + i, 1, now) < 0) return 0; } } diff --git a/src/lib/subs/land.c b/src/lib/subs/land.c index ff9f4de9..12f80c28 100644 --- a/src/lib/subs/land.c +++ b/src/lib/subs/land.c @@ -118,11 +118,6 @@ lnd_prewrite(int n, void *ptr) struct plnstr *pp; int i; - llp->ef_type = EF_LAND; - llp->lnd_uid = n; - - time(&llp->lnd_timestamp); - if (llp->lnd_own && llp->lnd_effic < LAND_MINEFF) { makelost(EF_LAND, llp->lnd_own, llp->lnd_uid, llp->lnd_x, llp->lnd_y); diff --git a/src/lib/subs/lostsub.c b/src/lib/subs/lostsub.c index 07ae5544..30a10fd0 100644 --- a/src/lib/subs/lostsub.c +++ b/src/lib/subs/lostsub.c @@ -51,7 +51,6 @@ makelost(short type, natid owner, short id, coord x, coord y) lost.lost_id = id; lost.lost_x = x; lost.lost_y = y; - time(&lost.lost_timestamp); putlost(n, &lost); } @@ -66,7 +65,6 @@ makenotlost(short type, natid owner, short id, coord x, coord y) return; getlost(n, &lost); lost.lost_owner = 0; - lost.lost_timestamp = 0; putlost(n, &lost); } diff --git a/src/lib/subs/natsub.c b/src/lib/subs/natsub.c index 3d5ef1ca..2249e22b 100644 --- a/src/lib/subs/natsub.c +++ b/src/lib/subs/natsub.c @@ -56,7 +56,6 @@ nat_reset(struct natstr *natp, enum nat_status stat, coord x, coord y) struct realmstr newrealm; struct range absrealm; char buf[1024]; - time_t now = time(NULL); int i; natp->nat_stat = stat; @@ -76,7 +75,6 @@ nat_reset(struct natstr *natp, enum nat_status stat, coord x, coord y) newrealm.r_xh = absrealm.hx; newrealm.r_yl = absrealm.ly; newrealm.r_yh = absrealm.hy; - newrealm.r_timestamp = now; putrealm(&newrealm); } if (players_at_00) { diff --git a/src/lib/subs/nuke.c b/src/lib/subs/nuke.c index ec48b078..5226bf5d 100644 --- a/src/lib/subs/nuke.c +++ b/src/lib/subs/nuke.c @@ -88,11 +88,6 @@ nuk_prewrite(int n, void *ptr) np->nuk_effic = 0; } - np->ef_type = EF_NUKE; - np->nuk_uid = n; - - time(&np->nuk_timestamp); - getnuke(n, &nuke); return 1; diff --git a/src/lib/subs/plane.c b/src/lib/subs/plane.c index 5cf84a3e..aaaaf845 100644 --- a/src/lib/subs/plane.c +++ b/src/lib/subs/plane.c @@ -131,11 +131,6 @@ pln_prewrite(int n, void *ptr) } } } - pp->ef_type = EF_PLANE; - pp->pln_uid = n; - - time(&pp->pln_timestamp); - getplane(n, &plane); return 1; diff --git a/src/lib/subs/sect.c b/src/lib/subs/sect.c index febaaae1..1b90c03c 100644 --- a/src/lib/subs/sect.c +++ b/src/lib/subs/sect.c @@ -68,8 +68,6 @@ sct_prewrite(int id, void *ptr) struct sctstr *sp = ptr; struct sctstr sect; - time(&sp->sct_timestamp); - bridge_damaged(sp, NULL); checksect(sp); getsect(sp->sct_x, sp->sct_y, §); diff --git a/src/lib/subs/ship.c b/src/lib/subs/ship.c index 860c77e2..3d0c5bb7 100644 --- a/src/lib/subs/ship.c +++ b/src/lib/subs/ship.c @@ -71,11 +71,6 @@ shp_prewrite(int n, void *ptr) struct plnstr *pp; int i; - sp->ef_type = EF_SHIP; - sp->shp_uid = n; - - time(&sp->shp_timestamp); - if (sp->shp_own != 0 && sp->shp_effic < SHIP_MINEFF) { mpr(sp->shp_own, "\t%s sunk!\n", prship(sp)); makelost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); diff --git a/src/server/lostitem.c b/src/server/lostitem.c index 837953b6..b3667cc3 100644 --- a/src/server/lostitem.c +++ b/src/server/lostitem.c @@ -58,7 +58,6 @@ delete_lostitems(void *unused) if (lost.lost_timestamp > (now - lost_items_timeout)) continue; lost.lost_owner = 0; - lost.lost_timestamp = 0; putlost(n, &lost); ncnt++; }