From c5482e4bfbc4833e7e113d33d15f043ad15b2627 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 6 Sep 2008 09:15:18 -0400 Subject: [PATCH] Pass old element to empfile callback prewrite() Change sct_prewrite(), shp_prewrite(), pln_prewrite(), lnd_prewrite(), nuk_prewrite() accordingly. New argument isn't used for anything, yet. --- include/file.h | 10 +++++----- include/prototypes.h | 10 +++++----- src/lib/common/file.c | 24 ++++++++++++------------ src/lib/subs/fileinit.c | 2 +- src/lib/subs/land.c | 4 ++-- src/lib/subs/nuke.c | 4 ++-- src/lib/subs/plane.c | 4 ++-- src/lib/subs/sect.c | 4 ++-- src/lib/subs/ship.c | 4 ++-- 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/include/file.h b/include/file.h index d73ee6cd8..7e8cdd8e7 100644 --- a/include/file.h +++ b/include/file.h @@ -67,12 +67,12 @@ struct empfile { */ void (*postread)(int id, void *elt); /* - * Called before write. ID is the element id, and ELT is the - * element being written. May modify the element. Modifications - * will be visible to caller of ef_write() and are written to the - * file. + * Called before write. ID is the element id, OLD is the element + * being updated (null unless it is cached) and ELT is the element + * being written. May modify the element. Modifications will be + * visible to caller of ef_write() and are written to the file. */ - void (*prewrite)(int id, void *elt); + void (*prewrite)(int id, void *old, void *elt); }; struct emptypedstr { diff --git a/include/prototypes.h b/include/prototypes.h index ff085615c..7ddfeff29 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -451,7 +451,7 @@ extern int getele(char *, char *); /* land.c */ extern char *prland(struct lndstr *); extern void lnd_postread(int, void *); -extern void lnd_prewrite(int, void *); +extern void lnd_prewrite(int, void *, void *); /* landgun.c */ extern double seagun(int, int); extern double fortgun(int, int); @@ -518,7 +518,7 @@ extern void nreport(natid, int, natid, int); /* nuke.c */ extern char *prnuke(struct nukstr *); extern void nuk_postread(int, void *); -extern void nuk_prewrite(int, void *); +extern void nuk_prewrite(int, void *, void *); extern int nuk_on_plane(struct nukstr *, int); /* nxtitem.c */ extern int nxtitem(struct nstr_item *, void *); @@ -529,7 +529,7 @@ extern int onearg(char *, char *); /* plane.c */ extern char *prplane(struct plnstr *); extern void pln_postread(int, void *); -extern void pln_prewrite(int, void *); +extern void pln_prewrite(int, void *, void *); /* plnsub.c */ extern void count_planes(struct shpstr *); extern int get_planes(struct nstr_item *, struct nstr_item *, @@ -619,7 +619,7 @@ extern void satmap(int, int, int, int, int, int); extern void sathead(void); /* sect.c */ extern void sct_postread(int, void *); -extern void sct_prewrite(int, void *); +extern void sct_prewrite(int, void *, void *); extern void item_prewrite(short *); extern int issector(char *); /* sectdamage.c */ @@ -628,7 +628,7 @@ extern int sectdamage(struct sctstr *, int); /* ship.c */ extern char *prship(struct shpstr *); extern void shp_postread(int, void *); -extern void shp_prewrite(int, void *); +extern void shp_prewrite(int, void *, void *); /* show.c */ extern void show_bridge(int); extern void show_tower(int); diff --git a/src/lib/common/file.c b/src/lib/common/file.c index d5c0812f2..0d4999d25 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -314,7 +314,7 @@ int ef_read(int type, int id, void *into) { struct empfile *ep; - void *from; + void *cachep; if (ef_check(type) < 0) return 0; @@ -325,15 +325,15 @@ ef_read(int type, int id, void *into) return 0; if (ep->flags & EFF_MEM) { - from = ep->cache + id * ep->size; + cachep = ep->cache + id * ep->size; } else { if (ep->baseid + ep->cids <= id || ep->baseid > id) { if (fillcache(ep, id) < 1) return 0; } - from = ep->cache + (id - ep->baseid) * ep->size; + cachep = ep->cache + (id - ep->baseid) * ep->size; } - memcpy(into, from, ep->size); + memcpy(into, cachep, ep->size); if (ep->postread) ep->postread(id, into); @@ -480,15 +480,19 @@ int ef_write(int type, int id, void *from) { struct empfile *ep; - char *to; + char *cachep; if (ef_check(type) < 0) return 0; ep = &empfile[type]; if (CANT_HAPPEN((ep->flags & (EFF_MEM | EFF_PRIVATE)) == EFF_PRIVATE)) return 0; + if (id >= ep->baseid && id < ep->baseid + ep->cids) + cachep = ep->cache + (id - ep->baseid) * ep->size; + else + cachep = NULL; if (ep->prewrite) - ep->prewrite(id, from); + ep->prewrite(id, cachep, from); if (CANT_HAPPEN((ep->flags & EFF_MEM) ? id >= ep->fids : id > ep->fids)) return 0; /* not implemented */ new_seqno(ep, from); @@ -496,12 +500,8 @@ ef_write(int type, int id, void *from) if (do_write(ep, from, id, 1) < 0) return 0; } - if (id >= ep->baseid && id < ep->baseid + ep->cids) { - /* update the cache if necessary */ - to = ep->cache + (id - ep->baseid) * ep->size; - if (to != from) - memcpy(to, from, ep->size); - } + if (cachep && cachep != from) /* update the cache if necessary */ + memcpy(cachep, from, ep->size); if (id >= ep->fids) { /* write beyond end of file extends it, take note */ ep->fids = id + 1; diff --git a/src/lib/subs/fileinit.c b/src/lib/subs/fileinit.c index 8876d47c6..fb0e0f33f 100644 --- a/src/lib/subs/fileinit.c +++ b/src/lib/subs/fileinit.c @@ -42,7 +42,7 @@ struct fileinit { int ef_type; void (*postread) (int, void *); - void (*prewrite) (int, void *); + void (*prewrite) (int, void *, void *); }; static struct fileinit fileinit[] = { diff --git a/src/lib/subs/land.c b/src/lib/subs/land.c index 2a8379d5a..d8ab37a56 100644 --- a/src/lib/subs/land.c +++ b/src/lib/subs/land.c @@ -109,9 +109,9 @@ lnd_postread(int n, void *ptr) } void -lnd_prewrite(int n, void *ptr) +lnd_prewrite(int n, void *old, void *new) { - struct lndstr *llp = ptr; + struct lndstr *llp = new; struct lndstr *lp; struct plnstr *pp; int i; diff --git a/src/lib/subs/nuke.c b/src/lib/subs/nuke.c index ae4451508..4732f3861 100644 --- a/src/lib/subs/nuke.c +++ b/src/lib/subs/nuke.c @@ -74,9 +74,9 @@ nuk_postread(int n, void *ptr) } void -nuk_prewrite(int n, void *ptr) +nuk_prewrite(int n, void *old, void *new) { - struct nukstr *np = ptr; + struct nukstr *np = new; if (np->nuk_effic == 0) { if (np->nuk_own) diff --git a/src/lib/subs/plane.c b/src/lib/subs/plane.c index d5a6b1e86..3c21b26a3 100644 --- a/src/lib/subs/plane.c +++ b/src/lib/subs/plane.c @@ -108,9 +108,9 @@ pln_postread(int n, void *ptr) } void -pln_prewrite(int n, void *ptr) +pln_prewrite(int n, void *old, void *new) { - struct plnstr *pp = ptr; + struct plnstr *pp = new; struct nukstr *np; int i; diff --git a/src/lib/subs/sect.c b/src/lib/subs/sect.c index 0f8ef0adc..111444ffe 100644 --- a/src/lib/subs/sect.c +++ b/src/lib/subs/sect.c @@ -59,9 +59,9 @@ sct_postread(int id, void *ptr) } void -sct_prewrite(int id, void *ptr) +sct_prewrite(int id, void *old, void *new) { - struct sctstr *sp = ptr; + struct sctstr *sp = new; int mil, civs; natid own; diff --git a/src/lib/subs/ship.c b/src/lib/subs/ship.c index 6c6af313d..e9f3eff01 100644 --- a/src/lib/subs/ship.c +++ b/src/lib/subs/ship.c @@ -62,9 +62,9 @@ shp_postread(int n, void *ptr) } void -shp_prewrite(int n, void *ptr) +shp_prewrite(int n, void *old, void *new) { - struct shpstr *sp = ptr; + struct shpstr *sp = new; struct lndstr *lp; struct plnstr *pp; int i; -- 2.43.0