diff options
| author | Franklin Wei <git@fwei.tk> | 2015-05-22 16:51:01 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2015-05-22 16:51:01 -0400 |
| commit | 5f5e9ba46eea80c589b6675bf6d4f11f74af7d77 (patch) | |
| tree | d2cfbf2c05caa458ac00cfc8d91df9f8e080f1ec /src | |
| parent | 5cc60817ff7f496dec9820e089ab25a115021513 (diff) | |
| download | market-sim-5f5e9ba46eea80c589b6675bf6d4f11f74af7d77.zip market-sim-5f5e9ba46eea80c589b6675bf6d4f11f74af7d77.tar.gz market-sim-5f5e9ba46eea80c589b6675bf6d4f11f74af7d77.tar.bz2 market-sim-5f5e9ba46eea80c589b6675bf6d4f11f74af7d77.tar.xz | |
some stuff, breaks save compatability
Diffstat (limited to 'src')
| -rw-r--r-- | src/globals.h | 5 | ||||
| -rw-r--r-- | src/load.c | 17 | ||||
| -rw-r--r-- | src/save.c | 3 | ||||
| -rw-r--r-- | src/util.c | 16 |
4 files changed, 27 insertions, 14 deletions
diff --git a/src/globals.h b/src/globals.h index c336aa4..9735657 100644 --- a/src/globals.h +++ b/src/globals.h @@ -8,6 +8,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <stdarg.h> #include <curl/curl.h> @@ -23,6 +24,9 @@ /* don't change this, it will corrupt existing saves */ #define EPOCH_YEAR 2000 +#define SAVE_MAGIC "PORTv3" +#define MAGIC_LEN 6 + typedef unsigned long long ullong; typedef unsigned long ulong; typedef unsigned int uint; @@ -87,6 +91,7 @@ char *csv_read(char**); char *read_string(void); char *read_ticker(void); int compare_stocks(const void*, const void*); +void fail(const char*, ...);; struct stock_t *find_stock(struct player_t*, char*); uint parse_args(struct player_t*, int argc, char *argv[]); uint16_t to_be16(uint16_t); @@ -2,12 +2,12 @@ /* NOTE: integers are represented internally by unsigned long long ints, but in the save they are always 64 bits */ -#define FAIL() exit(EXIT_FAILURE); - static uint32_t cksum; #define ADD_CKSUM(x) (cksum += (x*x) + 1) +#define FAIL() fail("Failed to read from file.") + uint64_t read_be64(FILE *f) { uint64_t n; @@ -94,11 +94,10 @@ void load_portfolio(struct player_t *player, const char *filename) FILE *f = fopen(filename, "rb"); - char magic[6]; - if(!f || ck_read(magic, 1, sizeof(magic), f) != 6 || memcmp(magic, "PORTv2", sizeof(magic)) != 0) + char magic[MAGIC_LEN]; + if(!f || ck_read(magic, 1, sizeof(magic), f) != 6 || memcmp(magic, SAVE_MAGIC, sizeof(magic)) != 0) { - printf("FATAL: Failed to load save.\n"); - exit(EXIT_FAILURE); + fail("Failed to load save."); } player->cash.cents = read_be64(f); @@ -118,8 +117,7 @@ void load_portfolio(struct player_t *player, const char *filename) char *sym = malloc(symlen + 1); if(ck_read(sym, symlen + 1, 1, f) != 1) { - printf("FATAL: Save is corrupted (symbol too short).\n"); - exit(EXIT_FAILURE); + fail("Save is corrupted (symbol too short)."); } stock->symbol = sym; @@ -163,8 +161,7 @@ void load_portfolio(struct player_t *player, const char *filename) if(ck != cksum) { - printf("FATAL: bad checksum, file is corrupt.\n%d %d", ck, cksum); - exit(EXIT_FAILURE); + fail("Bad checksum, file is corrupt.\nCalculated: %d File: %d", ck, cksum); } int junk = fgetc(f); @@ -76,8 +76,7 @@ void save_handler(struct player_t *player) cksum = 0; - const char *magic = "PORTv2"; - ck_write(magic, strlen(magic), 1, f); + ck_write(SAVE_MAGIC, strlen(SAVE_MAGIC), 1, f); write_be64(f, player->cash.cents); @@ -114,8 +114,7 @@ static void detect_endianness(void) endianness = LITTLE; else { - printf("FATAL: failed to detect system endianness!\n"); - exit(EXIT_FAILURE); + fail("failed to detect system endianness"); } } @@ -322,3 +321,16 @@ uint parse_args(struct player_t *player, int argc, char *argv[]) return ret; } + +void fail(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + char buf[256]; + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + + fprintf(stderr, "FATAL: %s\n", buf); + + exit(EXIT_FAILURE); +} |