From 6eec00105048eb50617b366eecfa40c664200595 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 22 May 2011 07:46:57 +0200 Subject: [PATCH] Fix empdump not to touch plane file when import fails pln_zap_transient_flags() fixes up planes stuck in the air (commit 7ca4f412, v4.3.12). Since commit 4e9e58bf (v4.3.14), it writes back the fixed planes. This is wrong for empdump. empdump should touch data only on successful import. When it fails because ef_verify() fails, and any planes are found stuck in the air, the plane file gets rewritten. Make parameter ef_verify() take parameter may_put to let empdump suppress the plane write-back. The plane file still get written out on successful import, along with the other imported game state. --- include/file.h | 2 +- src/lib/common/ef_verify.c | 14 ++++++++++---- src/lib/subs/fileinit.c | 2 +- src/util/empdump.c | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/include/file.h b/include/file.h index 73816c6f9..a4e2a7e39 100644 --- a/include/file.h +++ b/include/file.h @@ -225,7 +225,7 @@ extern int ef_nelem(int); extern int ef_flags(int); extern int ef_byname(char *); extern int ef_byname_from(char *, int *); -extern int ef_verify(void); +extern int ef_verify(int); extern int ef_elt_byname(int, char *); extern struct empfile empfile[EF_MAX + 1]; diff --git a/src/lib/common/ef_verify.c b/src/lib/common/ef_verify.c index a288cb4fd..139d04315 100644 --- a/src/lib/common/ef_verify.c +++ b/src/lib/common/ef_verify.c @@ -194,7 +194,7 @@ verify_row(int type, int row) } static void -pln_zap_transient_flags(void) +pln_zap_transient_flags(int may_put) { int i; struct plnstr *pp; @@ -216,12 +216,18 @@ pln_zap_transient_flags(void) */ } } - if (dirty) + if (dirty && may_put) ef_flush(EF_PLANE); /* pretty wasteful */ } +/* + * Verify game state and configuration are sane. + * Correct minor problems, but write corrections to backing files only + * if MAY_PUT is non-zero. + * Return -1 if uncorrected problems remain, else 0. + */ int -ef_verify(void) +ef_verify(int may_put) { struct empfile *ep; int retval = 0; @@ -248,6 +254,6 @@ ef_verify(void) } } - pln_zap_transient_flags(); + pln_zap_transient_flags(may_put); return retval; } diff --git a/src/lib/subs/fileinit.c b/src/lib/subs/fileinit.c index 4664b5e36..8e7580127 100644 --- a/src/lib/subs/fileinit.c +++ b/src/lib/subs/fileinit.c @@ -72,7 +72,7 @@ ef_init_srv(void) nsc_init(); ef_open_srv(); - if (ef_verify() < 0) + if (ef_verify(1) < 0) exit(EXIT_FAILURE); global_init(); unit_cargo_init(); diff --git a/src/util/empdump.c b/src/util/empdump.c index 1e9296828..652beb006 100644 --- a/src/util/empdump.c +++ b/src/util/empdump.c @@ -150,7 +150,7 @@ main(int argc, char *argv[]) exit(1); } - if (ef_verify() < 0) + if (ef_verify(0) < 0) exit(1); /* export to stdout */ -- 2.43.0