Commit
f33b96b1 (v4.3.12) made files again set timestamps. That was
intentionally suppressed in commit
990eb46b (v4.3.10), because it
facilitates attacks against the PRNG. Commit
8f98e53a (v4.3.0) had
added it as a feature.
Fix by making files's main() pass new flag EFF_NOTIME to ef_open().
Implement the flag in do_write().
#define EFF_PRIVATE bit(9)
/* Table is customized (configuration tables only) */
#define EFF_CUSTOM bit(10)
+/* Don't update timestamps */
+#define EFF_NOTIME bit(11)
/* Transient flags, only occur in argument of ef_open() */
/* Create table file, clobbering any existing file */
-#define EFF_CREATE bit(11)
+#define EFF_CREATE bit(16)
/*
* Empire `file types'
return -1;
if (ep->flags & EFF_TYPED) {
- now = time(NULL);
+ now = ep->flags & EFF_NOTIME ? (time_t)-1 : time(NULL);
for (i = 0; i < count; i++) {
/*
* TODO Oopses here could be due to bad data corruption.
elt->ef_type = ep->uid;
if (CANT_HAPPEN(elt->uid != id + i))
elt->uid = id + i;
- elt->timestamp = now;
+ if (now != (time_t)-1)
+ elt->timestamp = now;
}
}
for (i = 0; i < EF_MAX; i++) {
if (!EF_IS_GAME_STATE(i))
continue;
- if (!ef_open(i, EFF_CREATE, -1)) {
+ if (!ef_open(i, EFF_CREATE | EFF_NOTIME, -1)) {
perror("ef_open");
exit(1);
}