From 7f6ced99b9f920a9d3f790d20167dbba2ee6a400 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 13 Feb 2016 13:42:02 +0100 Subject: [PATCH] attrib.read gets a gamedata object (remove dependency on global.data_version) --- src/alchemy.c | 4 ++- src/attributes/attributes.c | 7 ++--- src/attributes/dict.c | 38 ++++++++++++++------------- src/attributes/follow.c | 5 ++-- src/attributes/hate.c | 5 ++-- src/attributes/key.c | 11 ++++---- src/attributes/moved.c | 5 ++-- src/attributes/movement.c | 5 ++-- src/attributes/otherfaction.c | 5 ++-- src/attributes/targetregion.c | 5 ++-- src/building_action.c | 12 +++++---- src/kernel/connection.c | 8 +++--- src/kernel/connection.h | 3 ++- src/kernel/curse.c | 10 ++++--- src/kernel/curse.h | 9 ++++--- src/kernel/curse.test.c | 21 ++++++--------- src/kernel/group.c | 9 ++++--- src/kernel/group.h | 2 +- src/kernel/group.test.c | 33 ++++++++++++----------- src/kernel/region.c | 5 ++-- src/kernel/save.c | 49 ++++++++++++++++++----------------- src/kernel/save.h | 17 ++++++------ src/kernel/save.test.c | 5 ++-- src/kernel/unit.c | 7 +++-- src/kernel/version.h | 2 -- src/magic.c | 27 ++++++++++++------- src/modules/arena.c | 5 ++-- src/modules/gmcmd.c | 10 ++++--- src/modules/museum.c | 13 +++++----- src/move.c | 4 ++- src/spells.c | 4 ++- src/spells/alp.c | 4 ++- src/spells/borders.c | 4 ++- src/util/CMakeLists.txt | 1 + src/util/attrib.c | 24 +++++++++-------- src/util/attrib.h | 8 +++--- src/util/event.c | 4 ++- src/util/password.c | 2 +- src/vortex.c | 4 ++- src/wormhole.c | 4 ++- 40 files changed, 225 insertions(+), 175 deletions(-) diff --git a/src/alchemy.c b/src/alchemy.c index 3d37af6a7..86f6e6bb6 100644 --- a/src/alchemy.c +++ b/src/alchemy.c @@ -33,6 +33,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include +#include #include #include #include @@ -301,8 +302,9 @@ a_writeeffect(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, edata->value); } -static int a_readeffect(attrib * a, void *owner, struct storage *store) +static int a_readeffect(attrib * a, void *owner, struct gamedata *data) { + struct storage *store = data->store; int power; const resource_type *rtype; effect_data *edata = (effect_data *)a->data.v; diff --git a/src/attributes/attributes.c b/src/attributes/attributes.c index 47e5e4cc0..770ba7524 100644 --- a/src/attributes/attributes.c +++ b/src/attributes/attributes.c @@ -57,6 +57,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include #include +#include #include @@ -64,12 +65,12 @@ attrib_type at_unitdissolve = { "unitdissolve", NULL, NULL, NULL, a_writechars, a_readchars }; -static int read_ext(attrib * a, void *owner, struct storage *store) +static int read_ext(attrib * a, void *owner, gamedata *data) { int len; - READ_INT(store, &len); - store->api->r_bin(store->handle, NULL, (size_t)len); + READ_INT(data->store, &len); + data->store->api->r_bin(data->store->handle, NULL, (size_t)len); return AT_READ_OK; } diff --git a/src/attributes/dict.c b/src/attributes/dict.c index 7ce81d6a3..1a125ab53 100644 --- a/src/attributes/dict.c +++ b/src/attributes/dict.c @@ -31,6 +31,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include +#include #include #include @@ -95,63 +96,64 @@ dict_write(const attrib * a, const void *owner, struct storage *store) } } -static int dict_read(attrib * a, void *owner, struct storage *store) +static int dict_read(attrib * a, void *owner, gamedata *data) { + storage *store = data->store; char name[NAMESIZE]; - dict_data *data = (dict_data *)a->data.v; + dict_data *dd = (dict_data *)a->data.v; int result, n; float flt; READ_STR(store, name, sizeof(name)); - data->name = _strdup(name); + dd->name = _strdup(name); READ_INT(store, &n); - data->type = (dict_type)n; - switch (data->type) { + dd->type = (dict_type)n; + switch (dd->type) { case TINTEGER: - READ_INT(store, &data->data.i); + READ_INT(store, &dd->data.i); break; case TREAL: READ_FLT(store, &flt); if ((int)flt == flt) { - data->type = TINTEGER; - data->data.i = (int)flt; + dd->type = TINTEGER; + dd->data.i = (int)flt; } else { - data->data.real = flt; + dd->data.real = flt; } break; case TSTRING: READ_STR(store, name, sizeof(name)); - data->data.str = _strdup(name); + dd->data.str = _strdup(name); break; case TBUILDING: result = - read_reference(&data->data.b, store, read_building_reference, + read_reference(&dd->data.b, store, read_building_reference, resolve_building); - if (result == 0 && !data->data.b) { + if (result == 0 && !dd->data.b) { return AT_READ_FAIL; } break; case TUNIT: result = - read_reference(&data->data.u, store, read_unit_reference, resolve_unit); - if (result == 0 && !data->data.u) { + read_reference(&dd->data.u, store, read_unit_reference, resolve_unit); + if (result == 0 && !dd->data.u) { return AT_READ_FAIL; } break; case TFACTION: result = - read_reference(&data->data.f, store, read_faction_reference, + read_reference(&dd->data.f, store, read_faction_reference, resolve_faction); - if (result == 0 && !data->data.f) { + if (result == 0 && !dd->data.f) { return AT_READ_FAIL; } break; case TREGION: result = - read_reference(&data->data.r, store, read_region_reference, + read_reference(&dd->data.r, store, read_region_reference, RESOLVE_REGION(global.data_version)); - if (result == 0 && !data->data.r) { + if (result == 0 && !dd->data.r) { return AT_READ_FAIL; } break; diff --git a/src/attributes/follow.c b/src/attributes/follow.c index 1c3f7908e..719d3fc03 100644 --- a/src/attributes/follow.c +++ b/src/attributes/follow.c @@ -23,13 +23,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include #include -static int read_follow(attrib * a, void *owner, struct storage *store) +static int read_follow(attrib * a, void *owner, gamedata *data) { - read_unit_reference(store); /* skip it */ + read_unit_reference(data->store); /* skip it */ return AT_READ_FAIL; } diff --git a/src/attributes/hate.c b/src/attributes/hate.c index 84768944a..0d21bc97b 100644 --- a/src/attributes/hate.c +++ b/src/attributes/hate.c @@ -24,6 +24,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include #include @@ -43,10 +44,10 @@ write_hate(const attrib * a, const void *owner, struct storage *store) write_unit_reference((unit *)a->data.v, store); } -static int read_hate(attrib * a, void *owner, struct storage *store) +static int read_hate(attrib * a, void *owner, gamedata *data) { int result = - read_reference(&a->data.v, store, read_unit_reference, resolve_unit); + read_reference(&a->data.v, data->store, read_unit_reference, resolve_unit); if (result == 0 && !a->data.v) { return AT_READ_FAIL; } diff --git a/src/attributes/key.c b/src/attributes/key.c index 4f51f81d5..2d43df504 100644 --- a/src/attributes/key.c +++ b/src/attributes/key.c @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include #include @@ -35,20 +36,20 @@ static void a_writekeys(const attrib *a, const void *o, storage *store) { } } -static int a_readkeys(attrib * a, void *owner, struct storage *store) { +static int a_readkeys(attrib * a, void *owner, gamedata *data) { int i, *p = 0; - READ_INT(store, &i); + READ_INT(data->store, &i); assert(i < 4096 && i>0); a->data.v = p = malloc(sizeof(int)*(i + 1)); *p++ = i; while (i--) { - READ_INT(store, p++); + READ_INT(data->store, p++); } return AT_READ_OK; } -static int a_readkey(attrib *a, void *owner, struct storage *store) { - int res = a_readint(a, owner, store); +static int a_readkey(attrib *a, void *owner, struct gamedata *data) { + int res = a_readint(a, owner, data); return (res != AT_READ_FAIL) ? AT_READ_DEPR : res; } diff --git a/src/attributes/moved.c b/src/attributes/moved.c index b671646c1..3da2a4c3b 100644 --- a/src/attributes/moved.c +++ b/src/attributes/moved.c @@ -21,6 +21,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "moved.h" #include +#include #include @@ -37,9 +38,9 @@ write_moved(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, a->data.i); } -static int read_moved(attrib * a, void *owner, struct storage *store) +static int read_moved(attrib * a, void *owner, gamedata *data) { - READ_INT(store, &a->data.i); + READ_INT(data->store, &a->data.i); if (a->data.i != 0) return AT_READ_OK; else diff --git a/src/attributes/movement.c b/src/attributes/movement.c index aa6d6504f..0ad08030e 100644 --- a/src/attributes/movement.c +++ b/src/attributes/movement.c @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include @@ -34,9 +35,9 @@ write_movement(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, a->data.i); } -static int read_movement(attrib * a, void *owner, struct storage *store) +static int read_movement(attrib * a, void *owner, gamedata *data) { - READ_INT(store, &a->data.i); + READ_INT(data->store, &a->data.i); if (a->data.i != 0) return AT_READ_OK; else diff --git a/src/attributes/otherfaction.c b/src/attributes/otherfaction.c index fa00c3205..7e5739392 100644 --- a/src/attributes/otherfaction.c +++ b/src/attributes/otherfaction.c @@ -24,6 +24,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include @@ -38,11 +39,11 @@ void write_of(const struct attrib *a, const void *owner, struct storage *store) WRITE_INT(store, f->no); } -int read_of(struct attrib *a, void *owner, struct storage *store) +int read_of(struct attrib *a, void *owner, gamedata *data) { /* return 1 on success, 0 if attrib needs removal */ int of; - READ_INT(store, &of); + READ_INT(data->store, &of); if (rule_stealth_other()) { a->data.v = findfaction(of); if (a->data.v) { diff --git a/src/attributes/targetregion.c b/src/attributes/targetregion.c index 42f78465d..2cb9d7571 100644 --- a/src/attributes/targetregion.c +++ b/src/attributes/targetregion.c @@ -25,6 +25,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include #include @@ -35,10 +36,10 @@ write_targetregion(const attrib * a, const void *owner, struct storage *store) write_region_reference((region *)a->data.v, store); } -static int read_targetregion(attrib * a, void *owner, struct storage *store) +static int read_targetregion(attrib * a, void *owner, gamedata *data) { int result = - read_reference(&a->data.v, store, read_region_reference, + read_reference(&a->data.v, data->store, read_region_reference, RESOLVE_REGION(global.data_version)); if (result == 0 && !a->data.v) return AT_READ_FAIL; diff --git a/src/building_action.c b/src/building_action.c index 29c20a99d..14e807c21 100644 --- a/src/building_action.c +++ b/src/building_action.c @@ -15,6 +15,7 @@ without prior permission by the authors of Eressea. #include #include #include +#include #include #include @@ -98,10 +99,11 @@ lc_write(const struct attrib *a, const void *owner, struct storage *store) WRITE_TOK(store, fparam ? fparam : NULLSTRING); } -static int lc_read(struct attrib *a, void *owner, struct storage *store) +static int lc_read(struct attrib *a, void *owner, gamedata *data) { + struct storage *store = data->store; char name[NAMESIZE]; - building_action *data = (building_action *)a->data.v; + building_action *bd = (building_action *)a->data.v; building *b = (building *)owner; int result = 0; if (global.data_version < ATTRIBOWNER_VERSION) { @@ -115,7 +117,7 @@ static int lc_read(struct attrib *a, void *owner, struct storage *store) b = 0; } else { - data->fname = _strdup(name); + bd->fname = _strdup(name); } READ_TOK(store, name, sizeof(name)); if (strcmp(name, "tnnL") == 0) { @@ -124,9 +126,9 @@ static int lc_read(struct attrib *a, void *owner, struct storage *store) b = 0; } if (strcmp(name, NULLSTRING) == 0) - data->param = 0; + bd->param = 0; else { - data->param = _strdup(name); + bd->param = _strdup(name); } if (result == 0 && !b) { return AT_READ_FAIL; diff --git a/src/kernel/connection.c b/src/kernel/connection.c index 257a78af3..1f47e7311 100644 --- a/src/kernel/connection.c +++ b/src/kernel/connection.c @@ -28,6 +28,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include #include #include @@ -601,8 +602,9 @@ void write_borders(struct storage *store) WRITE_TOK(store, "end"); } -int read_borders(struct storage *store) +int read_borders(gamedata *data) { + struct storage *store = data->store; for (;;) { int bid = 0; char zText[32]; @@ -613,7 +615,7 @@ int read_borders(struct storage *store) if (!strcmp(zText, "end")) break; READ_INT(store, &bid); - if (global.data_version < UIDHASH_VERSION) { + if (data->version < UIDHASH_VERSION) { int fx, fy, tx, ty; READ_INT(store, &fx); READ_INT(store, &fy); @@ -659,7 +661,7 @@ int read_borders(struct storage *store) type->read(b, store); if (global.data_version < NOBORDERATTRIBS_VERSION) { attrib *a = NULL; - int result = read_attribs(store, &a, b); + int result = read_attribs(data, &a, b); if (border_convert_cb) { border_convert_cb(b, a); } diff --git a/src/kernel/connection.h b/src/kernel/connection.h index ed4e2a50e..58177eb21 100644 --- a/src/kernel/connection.h +++ b/src/kernel/connection.h @@ -30,6 +30,7 @@ extern "C" { struct faction; struct region; struct storage; + struct gamedata; struct unit; extern int nextborder; @@ -113,7 +114,7 @@ extern "C" { void register_bordertype(border_type * type); /* register a new bordertype */ - int read_borders(struct storage *store); + int read_borders(struct gamedata *store); void write_borders(struct storage *store); void age_borders(void); diff --git a/src/kernel/curse.c b/src/kernel/curse.c index 8b7a4b51a..40da4a332 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -35,6 +35,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include #include +#include #include #include #include @@ -184,8 +185,9 @@ static int read_ccompat(const char *cursename, struct storage *store) return -1; } -int curse_read(attrib * a, void *owner, struct storage *store) +int curse_read(attrib * a, void *owner, gamedata *data) { + storage *store = data->store; curse *c = (curse *)a->data.v; int ur; char cursename[64]; @@ -200,13 +202,13 @@ int curse_read(attrib * a, void *owner, struct storage *store) READ_INT(store, &c->duration); READ_FLT(store, &flt); c->vigour = flt; - if (global.data_version < INTPAK_VERSION) { + if (data->version < INTPAK_VERSION) { ur = read_reference(&c->magician, store, read_int, resolve_unit); } else { ur = read_reference(&c->magician, store, read_unit_reference, resolve_unit); } - if (global.data_version < CURSEFLOAT_VERSION) { + if (data->version < CURSEFLOAT_VERSION) { READ_INT(store, &n); c->effect = (float)n; } @@ -224,7 +226,7 @@ int curse_read(attrib * a, void *owner, struct storage *store) return AT_READ_FAIL; } c->flags = flags; - if (global.data_version < EXPLICIT_CURSE_ISNEW_VERSION) { + if (data->version < EXPLICIT_CURSE_ISNEW_VERSION) { c_clearflag(c, CURSE_ISNEW); } diff --git a/src/kernel/curse.h b/src/kernel/curse.h index 263b66125..1aff1c2a1 100644 --- a/src/kernel/curse.h +++ b/src/kernel/curse.h @@ -28,6 +28,8 @@ extern "C" { struct curse; struct curse_type; + struct gamedata; + struct storage; /* Sprueche in der struct region und auf Einheiten, Schiffen oder Burgen * (struct attribute) @@ -93,7 +95,7 @@ extern "C" { * * */ -#include + extern struct attrib_type at_curse; /* ------------------------------------------------------------- */ /* Zauberwirkungen */ @@ -216,10 +218,9 @@ extern "C" { void free_curses(void); /* de-register all curse-types */ - extern struct attrib_type at_curse; void curse_write(const struct attrib *a, const void *owner, - struct storage *store); - int curse_read(struct attrib *a, void *owner, struct storage *store); + struct storage *store); + int curse_read(struct attrib *a, void *owner, struct gamedata *store); /* ------------------------------------------------------------- */ /* Kommentare: diff --git a/src/kernel/curse.test.c b/src/kernel/curse.test.c index 002ef18ec..cb81e9388 100644 --- a/src/kernel/curse.test.c +++ b/src/kernel/curse.test.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -122,29 +123,23 @@ static void test_memstream(CuTest *tc) { static void test_write_flag(CuTest *tc) { curse_fixture fix; + gamedata data; storage store; - char buf[1024]; - stream out = { 0 }; - size_t len; - mstream_init(&out); - binstore_init(&store, &out); - store.handle.data = &out; + mstream_init(&data.strm); + gamedata_init(&data, &store, RELEASE_VERSION); setup_curse(&fix, "gbdream"); fix.c->flags = 42 | CURSE_ISNEW; curse_write(fix.r->attribs, fix.r, &store); - out.api->rewind(out.handle); - len = out.api->read(out.handle, buf, sizeof(buf)); - buf[len] = '\0'; - out.api->rewind(out.handle); - curse_read(fix.r->attribs, fix.r, &store); + data.strm.api->rewind(data.strm.handle); + curse_read(fix.r->attribs, fix.r, &data); CuAssertIntEquals(tc, 42 | CURSE_ISNEW, ((curse *) fix.r->attribs->data.v)->flags); global.data_version = RELEASE_VERSION; CuAssertIntEquals(tc, RELEASE_VERSION, global.data_version); - mstream_done(&out); - binstore_done(&store); + mstream_done(&data.strm); + gamedata_done(&data); test_cleanup(); } diff --git a/src/kernel/group.c b/src/kernel/group.c index 564b3df5e..9cad91d6a 100755 --- a/src/kernel/group.c +++ b/src/kernel/group.c @@ -33,6 +33,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include #include +#include #include #include @@ -95,8 +96,9 @@ static group *find_group(int gid) return g; } -static int read_group(attrib * a, void *owner, struct storage *store) +static int read_group(attrib * a, void *owner, gamedata *data) { + struct storage *store = data->store; group *g; int gid; @@ -215,8 +217,9 @@ void write_groups(struct storage *store, const faction * f) WRITE_INT(store, 0); } -void read_groups(struct storage *store, faction * f) +void read_groups(gamedata *data, faction * f) { + struct storage *store = data->store; for (;;) { ally **pa; group *g; @@ -241,6 +244,6 @@ void read_groups(struct storage *store, faction * f) if (!a->faction) ur_add(fid, &a->faction, resolve_faction); } - read_attribs(store, &g->attribs, g); + read_attribs(data, &g->attribs, g); } } diff --git a/src/kernel/group.h b/src/kernel/group.h index 145881c00..b257f515a 100755 --- a/src/kernel/group.h +++ b/src/kernel/group.h @@ -43,7 +43,7 @@ extern "C" { struct group *new_group(struct faction * f, const char *name, int gid); extern void write_groups(struct storage *data, const struct faction *f); - extern void read_groups(struct storage *data, struct faction *f); + extern void read_groups(struct gamedata *data, struct faction *f); #ifdef __cplusplus } diff --git a/src/kernel/group.test.c b/src/kernel/group.test.c index ae4ae96d0..cc8a8e4ce 100644 --- a/src/kernel/group.test.c +++ b/src/kernel/group.test.c @@ -5,8 +5,13 @@ #include "faction.h" #include "unit.h" #include "region.h" +#include "save.h" +#include "version.h" + +#include #include #include + #include #include #include @@ -21,35 +26,29 @@ static void test_group_readwrite(CuTest * tc) faction * f; group *g; ally *al; - storage store; - FILE *F; - stream strm; int i; + gamedata *data; - F = fopen("test.dat", "wb"); - fstream_init(&strm, F); - binstore_init(&store, &strm); test_cleanup(); test_create_world(); + data = gamedata_open("test.dat", "wb", RELEASE_VERSION); f = test_create_faction(0); g = new_group(f, "NW", 42); g = new_group(f, "Egoisten", 43); key_set(&g->attribs, 44); al = ally_add(&g->allies, f); al->status = HELP_GIVE; - write_groups(&store, f); - WRITE_INT(&store, 47); - binstore_done(&store); - fstream_done(&strm); + write_groups(data->store, f); + WRITE_INT(data->store, 47); + binstore_done(data->store); + gamedata_close(data); - F = fopen("test.dat", "rb"); - fstream_init(&strm, F); - binstore_init(&store, &strm); f->groups = 0; - read_groups(&store, f); - READ_INT(&store, &i); - binstore_done(&store); - fstream_done(&strm); + free_group(g); + data = gamedata_open("test.dat", "rb", RELEASE_VERSION); + read_groups(data, f); + READ_INT(data->store, &i); + gamedata_close(data); CuAssertIntEquals(tc, 47, i); CuAssertPtrNotNull(tc, f->groups); diff --git a/src/kernel/region.c b/src/kernel/region.c index 04e0c46b3..85f677653 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -42,6 +42,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include #include +#include #include #include #include @@ -176,12 +177,12 @@ void a_initmoveblock(attrib * a) a->data.v = calloc(1, sizeof(moveblock)); } -int a_readmoveblock(attrib * a, void *owner, struct storage *store) +int a_readmoveblock(attrib * a, void *owner, gamedata *data) { moveblock *m = (moveblock *)(a->data.v); int i; - READ_INT(store, &i); + READ_INT(data->store, &i); m->dir = (direction_t)i; return AT_READ_OK; } diff --git a/src/kernel/save.c b/src/kernel/save.c index 10dea2736..fc7c79ade 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -59,6 +59,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include #include @@ -582,12 +583,12 @@ writeorder(struct gamedata *data, const struct order *ord, WRITE_STR(data->store, obuf); } -int read_attribs(storage *store, attrib **alist, void *owner) { - if (global.data_version < ATHASH_VERSION) { - return a_read_orig(store, alist, owner); +int read_attribs(gamedata *data, attrib **alist, void *owner) { + if (data->version < ATHASH_VERSION) { + return a_read_orig(data, alist, owner); } else { - return a_read(store, alist, owner); + return a_read(data, alist, owner); } } @@ -771,7 +772,7 @@ unit *read_unit(struct gamedata *data) log_error("Einheit %s hat %u Personen, und %u Trefferpunkte\n", itoa36(u->no), u->number, u->hp); u->hp = u->number; } - read_attribs(data->store, &u->attribs, u); + read_attribs(data, &u->attribs, u); return u; } @@ -1005,7 +1006,7 @@ static region *readregion(struct gamedata *data, int x, int y) read_owner(data, &r->land->ownership); } } - read_attribs(data->store, &r->attribs, r); + read_attribs(data, &r->attribs, r); return r; } @@ -1327,7 +1328,7 @@ faction *readfaction(struct gamedata * data) } } - read_attribs(data->store, &f->attribs, f); + read_attribs(data, &f->attribs, f); read_items(data->store, &f->items); for (;;) { READ_TOK(data->store, name, sizeof(name)); @@ -1370,7 +1371,7 @@ faction *readfaction(struct gamedata * data) break; } } - read_groups(data->store, f); + read_groups(data, f); f->spellbook = 0; if (data->version >= REGIONOWNER_VERSION) { read_spellbook(FactionSpells() ? &f->spellbook : 0, data->store, get_spell_level_faction, (void *)f); @@ -1501,7 +1502,7 @@ int readgame(const char *filename, bool backup) fstream_init(&strm, F); binstore_init(&store, &strm); gdata.store = &store; - global.data_version = gdata.version; /* HACK: attribute::read does not have access to gamedata, only storage */ + global.data_version = gdata.version; /* FIXME: hack! attribute::read does not have access to gamedata, only storage */ if (gdata.version >= BUILDNO_VERSION) { int build; @@ -1526,7 +1527,7 @@ int readgame(const char *filename, bool backup) else { READ_STR(&store, NULL, 0); } - read_attribs(&store, &global.attribs, NULL); + read_attribs(&gdata, &global.attribs, NULL); READ_INT(&store, &turn); global.data_turn = turn; log_debug(" - reading turn %d\n", turn); @@ -1584,7 +1585,7 @@ int readgame(const char *filename, bool backup) } } } - read_attribs(&store, &pl->attribs, pl); + read_attribs(&gdata, &pl->attribs, pl); if (pl->id != 1094969858) { // Regatta addlist(&planes, pl); } @@ -1652,7 +1653,7 @@ int readgame(const char *filename, bool backup) READ_STR(&store, name, sizeof(name)); b->type = bt_find(name); b->region = r; - read_attribs(&store, &b->attribs, b); + read_attribs(&gdata, &b->attribs, b); if (b->type == bt_lighthouse) { r->flags |= RF_LIGHTHOUSE; } @@ -1699,7 +1700,7 @@ int readgame(const char *filename, bool backup) if (sh->type->flags & SFL_NOCOAST) { sh->coast = NODIRECTION; } - read_attribs(&store, &sh->attribs, sh); + read_attribs(&gdata, &sh->attribs, sh); } *shp = 0; @@ -1727,7 +1728,7 @@ int readgame(const char *filename, bool backup) update_interval(u->faction, u->region); } } - read_borders(&store); + read_borders(&gdata); binstore_done(&store); fstream_done(&strm); @@ -1955,10 +1956,10 @@ int writegame(const char *filename) return 0; } -int a_readint(attrib * a, void *owner, struct storage *store) +int a_readint(attrib * a, void *owner, struct gamedata *data) { /* assert(sizeof(int)==sizeof(a->data)); */ - READ_INT(store, &a->data.i); + READ_INT(data->store, &a->data.i); return AT_READ_OK; } @@ -1967,12 +1968,12 @@ void a_writeint(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, a->data.i); } -int a_readshorts(attrib * a, void *owner, struct storage *store) +int a_readshorts(attrib * a, void *owner, struct gamedata *data) { int n; - READ_INT(store, &n); + READ_INT(data->store, &n); a->data.sa[0] = (short)n; - READ_INT(store, &n); + READ_INT(data->store, &n); a->data.sa[1] = (short)n; return AT_READ_OK; } @@ -1983,12 +1984,12 @@ void a_writeshorts(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, a->data.sa[1]); } -int a_readchars(attrib * a, void *owner, struct storage *store) +int a_readchars(attrib * a, void *owner, struct gamedata *data) { int i; for (i = 0; i != 4; ++i) { int n; - READ_INT(store, &n); + READ_INT(data->store, &n); a->data.ca[i] = (char)n; } return AT_READ_OK; @@ -2003,7 +2004,7 @@ void a_writechars(const attrib * a, const void *owner, struct storage *store) } } -int a_readvoid(attrib * a, void *owner, struct storage *store) +int a_readvoid(attrib * a, void *owner, struct gamedata *data) { return AT_READ_OK; } @@ -2012,14 +2013,14 @@ void a_writevoid(const attrib * a, const void *owner, struct storage *store) { } -int a_readstring(attrib * a, void *owner, struct storage *store) +int a_readstring(attrib * a, void *owner, struct gamedata *data) { char buf[DISPLAYSIZE]; char * result = 0; int e; size_t len = 0; do { - e = READ_STR(store, buf, sizeof(buf)); + e = READ_STR(data->store, buf, sizeof(buf)); if (result) { result = realloc(result, len + DISPLAYSIZE - 1); strcpy(result + len, buf); diff --git a/src/kernel/save.h b/src/kernel/save.h index 6c641719e..3b3dee3ae 100644 --- a/src/kernel/save.h +++ b/src/kernel/save.h @@ -31,6 +31,7 @@ extern "C" { struct spell; struct spellbook; struct unit; + struct gamedata; #define MAX_INPUT_SIZE DISPLAYSIZE*2 /* Nach MAX_INPUT_SIZE brechen wir das Einlesen der Zeile ab und nehmen an, @@ -53,26 +54,26 @@ extern "C" { void write_spellbook(const struct spellbook *book, struct storage *store); void write_attribs(struct storage *store, struct attrib *alist, const void *owner); - int read_attribs(struct storage *store, struct attrib **alist, void *owner); + int read_attribs(struct gamedata *store, struct attrib **alist, void *owner); void write_unit(struct gamedata *data, const struct unit *u); struct unit *read_unit(struct gamedata *data); - int a_readint(struct attrib *a, void *owner, struct storage *store); + int a_readint(struct attrib *a, void *owner, struct gamedata *); void a_writeint(const struct attrib *a, const void *owner, struct storage *store); - int a_readshorts(struct attrib *a, void *owner, struct storage *store); + int a_readshorts(struct attrib *a, void *owner, struct gamedata *); void a_writeshorts(const struct attrib *a, const void *owner, struct storage *store); - int a_readchars(struct attrib *a, void *owner, struct storage *store); + int a_readchars(struct attrib *a, void *owner, struct gamedata *); void a_writechars(const struct attrib *a, const void *owner, struct storage *store); - int a_readvoid(struct attrib *a, void *owner, struct storage *store); + int a_readvoid(struct attrib *a, void *owner, struct gamedata *); void a_writevoid(const struct attrib *a, const void *owner, - struct storage *store); - int a_readstring(struct attrib *a, void *owner, struct storage *store); + struct storage *); + int a_readstring(struct attrib *a, void *owner, struct gamedata *); void a_writestring(const struct attrib *a, const void *owner, - struct storage *store); + struct storage *); void a_finalizestring(struct attrib *a); void create_backup(char *file); diff --git a/src/kernel/save.test.c b/src/kernel/save.test.c index ac9195de5..12e0d5311 100644 --- a/src/kernel/save.test.c +++ b/src/kernel/save.test.c @@ -68,6 +68,7 @@ static void test_readwrite_unit(CuTest * tc) renumber_faction(f, fno); gamedata_init(&data, &store, RELEASE_VERSION); u = read_unit(&data); + mstream_done(&data.strm); gamedata_done(&data); CuAssertPtrNotNull(tc, u); @@ -92,9 +93,9 @@ static void test_readwrite_attrib(CuTest *tc) { CuAssertPtrEquals(tc, 0, a); data.strm.api->rewind(data.strm.handle); - read_attribs(data.store, &a, NULL); - gamedata_done(&data); + read_attribs(&data, &a, NULL); mstream_done(&data.strm); + gamedata_done(&data); CuAssertTrue(tc, key_get(a, 41)); CuAssertTrue(tc, key_get(a, 42)); a_removeall(&a, NULL); diff --git a/src/kernel/unit.c b/src/kernel/unit.c index 04d113033..e6a69da09 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -52,6 +52,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include #include @@ -443,8 +444,9 @@ int ualias(const unit * u) return a->data.i; } -int a_readprivate(attrib * a, void *owner, struct storage *store) +int a_readprivate(attrib * a, void *owner, gamedata *data) { + struct storage *store = data->store; char lbuf[DISPLAYSIZE]; READ_STR(store, lbuf, sizeof(lbuf)); a->data.v = _strdup(lbuf); @@ -579,8 +581,9 @@ void a_writesiege(const attrib * a, const void *owner, struct storage *store) write_building_reference(b, store); } -int a_readsiege(attrib * a, void *owner, struct storage *store) +int a_readsiege(attrib * a, void *owner, gamedata *data) { + struct storage *store = data->store; int result = read_reference(&a->data.v, store, read_building_reference, resolve_building); if (result == 0 && !a->data.v) { diff --git a/src/kernel/version.h b/src/kernel/version.h index 235be6086..e4df97303 100644 --- a/src/kernel/version.h +++ b/src/kernel/version.h @@ -40,5 +40,3 @@ #define RELEASE_VERSION ATHASH_VERSION /* current datafile */ #define MIN_VERSION INTPAK_VERSION /* minimal datafile we support */ #define MAX_VERSION RELEASE_VERSION /* change this if we can need to read the future datafile, and we can do so */ - -#define STREAM_VERSION 2 /* internal encoding of binary files */ diff --git a/src/magic.c b/src/magic.c index b8b5005da..c7a31ccf6 100644 --- a/src/magic.c +++ b/src/magic.c @@ -54,7 +54,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include -#include +#include #include #include #include @@ -67,6 +67,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include #include /* libc includes */ @@ -128,16 +129,17 @@ typedef struct icastle_data { int time; } icastle_data; -static int a_readicastle(attrib * a, void *owner, struct storage *store) +static int a_readicastle(attrib * a, void *owner, struct gamedata *data) { - icastle_data *data = (icastle_data *)a->data.v; + storage *store = data->store; + icastle_data *idata = (icastle_data *)a->data.v; char token[32]; READ_TOK(store, token, sizeof(token)); if (global.data_version < ATTRIBOWNER_VERSION) { READ_INT(store, NULL); } - READ_INT(store, &data->time); - data->type = bt_find(token); + READ_INT(store, &idata->time); + idata->type = bt_find(token); return AT_READ_OK; } @@ -254,8 +256,9 @@ int get_spell_level_mage(const spell * sp, void * cbdata) return sbe ? sbe->level : 0; } -static int read_mage(attrib * a, void *owner, struct storage *store) +static int read_mage(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int i, mtype; sc_mage *mage = (sc_mage *)a->data.v; char spname[64]; @@ -362,8 +365,9 @@ sc_mage *get_mage(const unit * u) * Spruch zu seiner List-of-known-spells hinzugefĆ¼gt werden. */ -static int read_seenspell(attrib * a, void *owner, struct storage *store) +static int read_seenspell(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int i; spell *sp = 0; char token[32]; @@ -2281,8 +2285,9 @@ static int resolve_familiar(variant data, void *addr) return result; } -static int read_familiar(attrib * a, void *owner, struct storage *store) +static int read_familiar(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int result = read_reference(&a->data.v, store, read_unit_reference, resolve_familiar); if (result == 0 && a->data.v == NULL) { @@ -2365,8 +2370,9 @@ static int resolve_clone(variant data, void *addr) return result; } -static int read_clone(attrib * a, void *owner, struct storage *store) +static int read_clone(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int result = read_reference(&a->data.v, store, read_unit_reference, resolve_clone); if (result == 0 && a->data.v == NULL) { @@ -2392,8 +2398,9 @@ static int resolve_mage(variant data, void *addr) return result; } -static int read_magician(attrib * a, void *owner, struct storage *store) +static int read_magician(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int result = read_reference(&a->data.v, store, read_unit_reference, resolve_mage); if (result == 0 && a->data.v == NULL) { diff --git a/src/modules/arena.c b/src/modules/arena.c index 6b76a3434..cc4c6b4be 100644 --- a/src/modules/arena.c +++ b/src/modules/arena.c @@ -48,6 +48,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include #include @@ -248,10 +249,10 @@ write_hurting(const attrib * a, const void *owner, struct storage *store) WRITE_INT(store, b->no); } -static int read_hurting(attrib * a, void *owner, struct storage *store) +static int read_hurting(attrib * a, void *owner, struct gamedata *data) { int i; - READ_INT(store, &i); + READ_INT(data->store, &i); a->data.v = (void *)findbuilding(i); if (a->data.v == NULL) { log_error("temple of pain is broken\n"); diff --git a/src/modules/gmcmd.c b/src/modules/gmcmd.c index 02bd2b889..f450cd67f 100644 --- a/src/modules/gmcmd.c +++ b/src/modules/gmcmd.c @@ -35,6 +35,8 @@ /* util includes */ #include +#include + #include /* libc includes */ @@ -43,18 +45,18 @@ #include #include -static int read_permissions(attrib * a, void *owner, struct storage *store) +static int read_permissions(attrib * a, void *owner, struct gamedata *data) { assert(!a); - a_read(store, &a, owner); + a_read(data, &a, owner); a_remove(&a, a); return AT_READ_OK; } -static int read_gmcreate(attrib * a, void *owner, struct storage *store) +static int read_gmcreate(attrib * a, void *owner, struct gamedata *data) { char zText[32]; - READ_TOK(store, zText, sizeof(zText)); + READ_TOK(data->store, zText, sizeof(zText)); return AT_READ_OK; } diff --git a/src/modules/museum.c b/src/modules/museum.c index 516bf775f..5ad9092a4 100644 --- a/src/modules/museum.c +++ b/src/modules/museum.c @@ -43,6 +43,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include @@ -79,11 +80,11 @@ struct storage *store) } static int -a_readmuseumgivebackcookie(attrib * a, void *owner, struct storage *store) +a_readmuseumgivebackcookie(attrib * a, void *owner, gamedata *data) { museumgivebackcookie *gbc = (museumgivebackcookie *)a->data.v; - READ_INT(store, &gbc->warden_no); - READ_INT(store, &gbc->cookie); + READ_INT(data->store, &gbc->warden_no); + READ_INT(data->store, &gbc->cookie); return AT_READ_OK; } @@ -121,11 +122,11 @@ struct storage *store) write_items(store, gb->items); } -static int a_readmuseumgiveback(attrib * a, void *owner, struct storage *store) +static int a_readmuseumgiveback(attrib * a, void *owner, struct gamedata *data) { museumgiveback *gb = (museumgiveback *)a->data.v; - READ_INT(store, &gb->cookie); - read_items(store, &gb->items); + READ_INT(data->store, &gb->cookie); + read_items(data->store, &gb->items); return AT_READ_OK; } diff --git a/src/move.c b/src/move.c index cd6361605..456610866 100644 --- a/src/move.c +++ b/src/move.c @@ -59,6 +59,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include #include #include @@ -154,8 +155,9 @@ static int shiptrail_age(attrib * a, void *owner) return (t->age > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } -static int shiptrail_read(attrib * a, void *owner, struct storage *store) +static int shiptrail_read(attrib * a, void *owner, struct gamedata *data) { + storage *store = data->store; int n; traveldir *t = (traveldir *)(a->data.v); diff --git a/src/spells.c b/src/spells.c index e7240b8dc..ceb66d69f 100644 --- a/src/spells.c +++ b/src/spells.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -2866,9 +2867,10 @@ static curse *mk_deathcloud(unit * mage, region * r, double force, int duration) #define COMPAT_DEATHCLOUD #ifdef COMPAT_DEATHCLOUD -static int dc_read_compat(struct attrib *a, void *target, struct storage * store) +static int dc_read_compat(struct attrib *a, void *target, gamedata *data) /* return AT_READ_OK on success, AT_READ_FAIL if attrib needs removal */ { + struct storage *store = data->store; region *r = NULL; unit *u; variant var; diff --git a/src/spells/alp.c b/src/spells/alp.c index e44b52ffa..fae9c468a 100644 --- a/src/spells/alp.c +++ b/src/spells/alp.c @@ -25,6 +25,7 @@ /* util includes */ #include #include +#include #include #include @@ -76,8 +77,9 @@ alp_write(const attrib * a, const void *owner, struct storage *store) write_unit_reference(ad->target, store); } -static int alp_read(attrib * a, void *owner, struct storage *store) +static int alp_read(attrib * a, void *owner, struct gamedata *data) { + struct storage *store = data->store; alp_data *ad = (alp_data *)a->data.v; int rm = read_reference(&ad->mage, store, read_unit_reference, resolve_unit); int rt = diff --git a/src/spells/borders.c b/src/spells/borders.c index 3f107a389..6ba35088c 100644 --- a/src/spells/borders.c +++ b/src/spells/borders.c @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -51,8 +52,9 @@ typedef struct bresolve { static int resolve_buddy(variant data, void *addr); -static int cw_read(attrib * a, void *target, storage * store) +static int cw_read(attrib * a, void *target, gamedata *data) { + storage *store = data->store; bresolve *br = calloc(sizeof(bresolve), 1); curse *c = (curse *)a->data.v; wallcurse *wc = (wallcurse *)c->data.v; diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 59dfc80fc..6fc0b5dea 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -23,6 +23,7 @@ dice.c event.c filereader.c functions.c +gamedata.c goodies.c gamedata.c language.c diff --git a/src/util/attrib.c b/src/util/attrib.c index b5ea3ad3c..841bf9559 100644 --- a/src/util/attrib.c +++ b/src/util/attrib.c @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "log.h" #include "storage.h" +#include #include #include @@ -279,10 +280,10 @@ static critbit_tree cb_deprecated = { 0 }; typedef struct deprecated_s { unsigned int hash; - int(*reader)(attrib *, void *, struct storage *); + int(*reader)(attrib *, void *, struct gamedata *); } deprecated_t; -void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct storage *)) +void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct gamedata *)) { deprecated_t value; @@ -291,9 +292,9 @@ void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct stora cb_insert(&cb_deprecated, &value, sizeof(value)); } -static int a_read_i(struct storage *store, attrib ** attribs, void *owner, unsigned int key) { +static int a_read_i(gamedata *data, attrib ** attribs, void *owner, unsigned int key) { int retval = AT_READ_OK; - int(*reader)(attrib *, void *, struct storage *) = 0; + int(*reader)(attrib *, void *, struct gamedata *) = 0; attrib_type *at = at_find(key); attrib * na = 0; @@ -313,7 +314,7 @@ static int a_read_i(struct storage *store, attrib ** attribs, void *owner, unsig } } if (reader) { - int ret = reader(na, owner, store); + int ret = reader(na, owner, data); if (na) { switch (ret) { case AT_READ_DEPR: @@ -336,13 +337,14 @@ static int a_read_i(struct storage *store, attrib ** attribs, void *owner, unsig return retval; } -int a_read(struct storage *store, attrib ** attribs, void *owner) { +int a_read(gamedata *data, attrib ** attribs, void *owner) { + struct storage *store = data->store; int key, retval = AT_READ_OK; key = -1; READ_INT(store, &key); while (key > 0) { - int ret = a_read_i(store, attribs, owner, key); + int ret = a_read_i(data, attribs, owner, key); if (ret == AT_READ_DEPR) { retval = AT_READ_DEPR; } @@ -361,14 +363,14 @@ int a_read(struct storage *store, attrib ** attribs, void *owner) { return AT_READ_OK; } -int a_read_orig(struct storage *store, attrib ** attribs, void *owner) +int a_read_orig(gamedata *data, attrib ** attribs, void *owner) { int key, retval = AT_READ_OK; char zText[128]; zText[0] = 0; key = -1; - READ_TOK(store, zText, sizeof(zText)); + READ_TOK(data->store, zText, sizeof(zText)); if (strcmp(zText, "end") == 0) { return retval; } @@ -376,8 +378,8 @@ int a_read_orig(struct storage *store, attrib ** attribs, void *owner) key = __at_hashkey(zText); } while (key > 0) { - retval = a_read_i(store, attribs, owner, key); - READ_TOK(store, zText, sizeof(zText)); + retval = a_read_i(data, attribs, owner, key); + READ_TOK(data->store, zText, sizeof(zText)); if (!strcmp(zText, "end")) break; key = __at_hashkey(zText); diff --git a/src/util/attrib.h b/src/util/attrib.h index 9f421bfef..b41ac2bcf 100644 --- a/src/util/attrib.h +++ b/src/util/attrib.h @@ -55,7 +55,7 @@ extern "C" { int(*age) (struct attrib *, void *owner); /* age returns 0 if the attribute needs to be removed, !=0 otherwise */ void(*write) (const struct attrib *, const void *owner, struct storage *); - int(*read) (struct attrib *, void *owner, struct storage *); /* return AT_READ_OK on success, AT_READ_FAIL if attrib needs removal */ + int(*read) (struct attrib *, void *owner, struct gamedata *); /* return AT_READ_OK on success, AT_READ_FAIL if attrib needs removal */ void(*upgrade) (struct attrib **alist, struct attrib *a); unsigned int flags; /* ---- internal data, do not modify: ---- */ @@ -64,7 +64,7 @@ extern "C" { } attrib_type; extern void at_register(attrib_type * at); - extern void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct storage *)); + extern void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct gamedata *)); extern attrib *a_select(attrib * a, const void *data, bool(*compare) (const attrib *, const void *)); @@ -75,10 +75,10 @@ extern "C" { extern attrib *a_new(const attrib_type * at); int a_age(attrib ** attribs, void *owner); - int a_read_orig(struct storage *store, attrib ** attribs, void *owner); + int a_read_orig(struct gamedata *data, attrib ** attribs, void *owner); void a_write_orig(struct storage *store, const attrib * attribs, const void *owner); - int a_read(struct storage *store, attrib ** attribs, void *owner); + int a_read(struct gamedata *data, attrib ** attribs, void *owner); void a_write(struct storage *store, const attrib * attribs, const void *owner); void free_attribs(void); diff --git a/src/util/event.c b/src/util/event.c index 5784a116a..72a2086af 100644 --- a/src/util/event.c +++ b/src/util/event.c @@ -21,6 +21,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* util includes */ #include "attrib.h" +#include "gamedata.h" #include "log.h" #include "storage.h" @@ -143,8 +144,9 @@ write_handler(const attrib * a, const void *owner, struct storage *store) write_triggers(store, hi->triggers); } -static int read_handler(attrib * a, void *owner, struct storage *store) +static int read_handler(attrib * a, void *owner, gamedata *data) { + struct storage *store = data->store; char zText[128]; handler_info *hi = (handler_info *)a->data.v; diff --git a/src/util/password.c b/src/util/password.c index c7850eec8..2cba79e53 100644 --- a/src/util/password.c +++ b/src/util/password.c @@ -82,7 +82,7 @@ static const char * password_hash_i(const char * passwd, const char *input, int memcpy(salt, input, salt_len); salt[salt_len] = 0; } else { - input = password_gensalt(salt, sizeof(salt)); + input = password_gensalt(salt, SALTLEN); } if (algo == PASSWORD_MD5) { return md5_crypt_r(passwd, input, result, len); diff --git a/src/vortex.c b/src/vortex.c index 57dac78f8..8aac12aec 100644 --- a/src/vortex.c +++ b/src/vortex.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -74,8 +75,9 @@ static int a_agedirection(attrib * a, void *owner) return (d->duration > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } -static int a_readdirection(attrib * a, void *owner, struct storage *store) +static int a_readdirection(attrib * a, void *owner, struct gamedata *data) { + struct storage *store = data->store; spec_direction *d = (spec_direction *)(a->data.v); char lbuf[32]; diff --git a/src/wormhole.c b/src/wormhole.c index 794dbc836..5974d7ee0 100644 --- a/src/wormhole.c +++ b/src/wormhole.c @@ -27,6 +27,7 @@ /* util includes */ #include +#include #include #include #include @@ -109,8 +110,9 @@ static int resolve_exit(variant id, void *address) return -1; } -static int wormhole_read(struct attrib *a, void *owner, struct storage *store) +static int wormhole_read(struct attrib *a, void *owner, struct gamedata *data) { + storage *store = data->store; resolve_fun resolver = (global.data_version < UIDHASH_VERSION) ? resolve_exit : resolve_region_id; read_fun reader = (global.data_version < UIDHASH_VERSION)