From 8e6850107adb5ca37ed0e9a4500282b2e8743294 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sat, 20 Jul 2013 14:01:01 +0200 Subject: Rough structure done. Parallel working should work. --- statefile.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 statefile.c (limited to 'statefile.c') diff --git a/statefile.c b/statefile.c new file mode 100644 index 0000000..08fb372 --- /dev/null +++ b/statefile.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include + +#include "config.h" + +int +state_load(config_t* conf, uint32_t* map, uint32_t* jobs_done) { + FILE* fh = NULL; + size_t mapsize; + int errsv; + + mapsize = conf->width * conf->height * conf->iters_n; + + if(!(fh = fopen(conf->statefile, "rb"))) { + if(errno == ENOENT) { + memset(map, 0, mapsize); + *jobs_done = 0; + return 1; + } + + return 0; + } + + if(fread(jobs_done, sizeof(uint32_t), 1, fh) != 1) { + errsv = errno; + fclose(fh); + errno = errsv; + return 0; + } + + if(fread(map, sizeof(uint32_t), mapsize, fh) != mapsize) { + errsv = errno; + fclose(fh); + errno = errsv; + return 0; + } + + fclose(fh); + return 1; +} + +int +state_save(config_t* conf, uint32_t* map, uint32_t jobs_done) { + FILE* fh = NULL; + size_t mapsize; + int errsv; + + mapsize = conf->width * conf->height * conf->iters_n; + + if(!(fh = fopen(conf->statefile, "wb"))) { + return 0; + } + + if(fwrite(&jobs_done, sizeof(uint32_t), 1, fh) != 1) { + errsv = errno; + fclose(fh); + errno = errsv; + return 0; + } + + if(fwrite(map, sizeof(uint32_t), mapsize, fh) != mapsize) { + errsv = errno; + fclose(fh); + errno = errsv; + return 0; + } + + fclose(fh); + return 1; +} -- cgit v1.2.3-54-g00ecf