aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-05-22 16:51:01 -0400
committerFranklin Wei <git@fwei.tk>2015-05-22 16:51:01 -0400
commit5f5e9ba46eea80c589b6675bf6d4f11f74af7d77 (patch)
treed2cfbf2c05caa458ac00cfc8d91df9f8e080f1ec /src
parent5cc60817ff7f496dec9820e089ab25a115021513 (diff)
downloadmarket-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.h5
-rw-r--r--src/load.c17
-rw-r--r--src/save.c3
-rw-r--r--src/util.c16
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);
diff --git a/src/load.c b/src/load.c
index 733ad4d..35c7270 100644
--- a/src/load.c
+++ b/src/load.c
@@ -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);
diff --git a/src/save.c b/src/save.c
index debe610..83e3713 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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);
diff --git a/src/util.c b/src/util.c
index de1aaca..679fc4c 100644
--- a/src/util.c
+++ b/src/util.c
@@ -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);
+}