Make server check game state file sizes on startup

Certain tables have a fixed size depending on configuration: EF_SECTOR
has WORLD_SZ() elements, EF_NATION, EF_MAP and EF_BMAP have MAXNOC
elements, and EF_REALM has MAXNOC * MAXNOR elements.  Bad things
happen if the files backing them are shorter.

Pass expected size to ef_open(), and make it fail when the actual size
differs.
This commit is contained in:
Markus Armbruster 2008-05-17 17:00:57 +02:00
parent b37ebbbde3
commit 5750107b65
5 changed files with 30 additions and 21 deletions

View file

@ -34,6 +34,8 @@
#include <config.h>
#include "file.h"
#include "nat.h"
#include "optlist.h"
#include "prototypes.h"
struct fileinit {
@ -86,23 +88,23 @@ ef_open_srv(void)
{
int failed = 0;
failed |= !ef_open(EF_NATION, EFF_MEM);
failed |= !ef_open(EF_SECTOR, EFF_MEM);
failed |= !ef_open(EF_SHIP, EFF_MEM);
failed |= !ef_open(EF_PLANE, EFF_MEM);
failed |= !ef_open(EF_LAND, EFF_MEM);
failed |= !ef_open(EF_GAME, EFF_MEM);
failed |= !ef_open(EF_NEWS, 0);
failed |= !ef_open(EF_LOAN, 0);
failed |= !ef_open(EF_TREATY, 0);
failed |= !ef_open(EF_NUKE, EFF_MEM);
failed |= !ef_open(EF_POWER, 0);
failed |= !ef_open(EF_TRADE, 0);
failed |= !ef_open(EF_MAP, EFF_MEM);
failed |= !ef_open(EF_BMAP, EFF_MEM);
failed |= !ef_open(EF_COMM, 0);
failed |= !ef_open(EF_LOST, 0);
failed |= !ef_open(EF_REALM, EFF_MEM);
failed |= !ef_open(EF_NATION, EFF_MEM, MAXNOC);
failed |= !ef_open(EF_SECTOR, EFF_MEM, WORLD_SZ());
failed |= !ef_open(EF_SHIP, EFF_MEM, -1);
failed |= !ef_open(EF_PLANE, EFF_MEM, -1);
failed |= !ef_open(EF_LAND, EFF_MEM, -1);
failed |= !ef_open(EF_GAME, EFF_MEM, 1);
failed |= !ef_open(EF_NEWS, 0, -1);
failed |= !ef_open(EF_LOAN, 0, -1);
failed |= !ef_open(EF_TREATY, 0, -1);
failed |= !ef_open(EF_NUKE, EFF_MEM, -1);
failed |= !ef_open(EF_POWER, 0, -1);
failed |= !ef_open(EF_TRADE, 0, -1);
failed |= !ef_open(EF_MAP, EFF_MEM, MAXNOC);
failed |= !ef_open(EF_BMAP, EFF_MEM, MAXNOC);
failed |= !ef_open(EF_COMM, 0, -1);
failed |= !ef_open(EF_LOST, 0, -1);
failed |= !ef_open(EF_REALM, EFF_MEM, MAXNOC * MAXNOR);
if (!failed)
failed |= ef_init_view(EF_COUNTRY, EF_NATION);
if (failed) {