From ec3839fb9f9854e700ce20a36629b4af1cf9ba20 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 12 Feb 2016 23:29:47 +0100 Subject: [PATCH] rewrite intermittent test to use memory stream. --- src/kernel/save.test.c | 26 ++++++++++++----------- src/util/gamedata.c | 48 ++++++++++-------------------------------- src/util/gamedata.h | 7 ++++-- 3 files changed, 30 insertions(+), 51 deletions(-) diff --git a/src/kernel/save.test.c b/src/kernel/save.test.c index b89a82c32..e40d366c9 100644 --- a/src/kernel/save.test.c +++ b/src/kernel/save.test.c @@ -12,6 +12,7 @@ #include "plane.h" #include "region.h" #include "version.h" + #include #include #include @@ -20,6 +21,8 @@ #include #include +#include +#include #include #include @@ -78,29 +81,28 @@ static void test_readwrite_unit(CuTest * tc) } static void test_readwrite_attrib(CuTest *tc) { - gamedata *data; + gamedata data; + storage store; attrib *a = NULL; - const char *path = "attrib.dat"; + test_cleanup(); - global.data_version = RELEASE_VERSION; // FIXME: hack! - data = gamedata_open(path, "wb", RELEASE_VERSION); - CuAssertPtrNotNull(tc, data); key_set(&a, 41); key_set(&a, 42); - write_attribs(data->store, a, NULL); - gamedata_close(data); + mstream_init(&data.strm); + gamedata_init(&data, &store, RELEASE_VERSION); + global.data_version = RELEASE_VERSION; // FIXME: hack! + write_attribs(data.store, a, NULL); a_removeall(&a, NULL); CuAssertPtrEquals(tc, 0, a); - data = gamedata_open(path, "rb", RELEASE_VERSION); - CuAssertPtrNotNull(tc, data); - read_attribs(data->store, &a, NULL); - gamedata_close(data); + data.strm.api->rewind(data.strm.handle); + read_attribs(data.store, &a, NULL); + gamedata_done(&data); + mstream_done(&data.strm); CuAssertTrue(tc, key_get(a, 41)); CuAssertTrue(tc, key_get(a, 42)); a_removeall(&a, NULL); - CuAssertIntEquals(tc, 0, remove(path)); test_cleanup(); } diff --git a/src/util/gamedata.c b/src/util/gamedata.c index 8b2de60d0..3ac892430 100644 --- a/src/util/gamedata.c +++ b/src/util/gamedata.c @@ -12,9 +12,8 @@ #include #include -void gamedata_close(gamedata *data) { +void gamedata_done(gamedata *data) { binstore_done(data->store); - fstream_done(&data->strm); } void gamedata_init(gamedata *data, storage *store, int version) { @@ -23,6 +22,11 @@ void gamedata_init(gamedata *data, storage *store, int version) { binstore_init(data->store, &data->strm); } +void gamedata_close(gamedata *data) { + gamedata_done(data); + fstream_done(&data->strm); +} + int gamedata_openfile(gamedata *data, const char *filename, const char *mode, int version) { FILE *F = fopen(filename, mode); if (F) { @@ -44,6 +48,7 @@ int gamedata_openfile(gamedata *data, const char *filename, const char *mode, in fwrite(&n, sizeof(int), 1, F); } if (err) { + log_error("could not open %s: %s", filename, strerror(errno)); fclose(F); free(data); } @@ -58,41 +63,10 @@ int gamedata_openfile(gamedata *data, const char *filename, const char *mode, in } gamedata *gamedata_open(const char *filename, const char *mode, int version) { - FILE *F = fopen(filename, mode); - - if (F) { - gamedata *data = (gamedata *)calloc(1, sizeof(gamedata)); - storage *store = (storage *)calloc(1, sizeof(storage)); - int err = 0; - size_t sz; - - data->store = store; - if (strchr(mode, 'r')) { - sz = fread(&data->version, 1, sizeof(int), F); - if (sz != sizeof(int)) { - err = ferror(F); - } - else { - err = fseek(F, sizeof(int), SEEK_CUR); - } - } - else if (strchr(mode, 'w')) { - int n = STREAM_VERSION; - data->version = version; - fwrite(&data->version, sizeof(int), 1, F); - fwrite(&n, sizeof(int), 1, F); - } - if (err) { - fclose(F); - free(data); - free(store); - } - else { - fstream_init(&data->strm, F); - binstore_init(store, &data->strm); - return data; - } + gamedata *data = (gamedata *)calloc(1, sizeof(gamedata)); + if (gamedata_openfile(data, filename, mode, version) != 0) { + free(data); + return NULL; } - log_error("could not open %s: %s", filename, strerror(errno)); return 0; } diff --git a/src/util/gamedata.h b/src/util/gamedata.h index e0ac54c30..78a67d198 100644 --- a/src/util/gamedata.h +++ b/src/util/gamedata.h @@ -14,8 +14,11 @@ typedef struct gamedata { int encoding; } gamedata; -void gamedata_close(struct gamedata *data); -struct gamedata *gamedata_open(const char *filename, const char *mode, int version); +void gamedata_init(gamedata *data, struct storage *store, int version); +void gamedata_done(gamedata *data); + +void gamedata_close(gamedata *data); +gamedata *gamedata_open(const char *filename, const char *mode, int version); int gamedata_openfile(gamedata *data, const char *filename, const char *mode, int version); #define STREAM_VERSION 2 /* internal encoding of binary files */