diff options
author | Cara Salter <cara@devcara.com> | 2022-10-19 21:59:00 -0400 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-10-19 21:59:00 -0400 |
commit | 338c3d50f45598418e0ed29fed542e76cf071e0f (patch) | |
tree | db9a10cc9f4e265f6079b3bae27580f998ba32fd /src/data.c | |
parent | ade9d8a0a58b3a94e4231c48d861236b1f17c859 (diff) | |
download | cmud-338c3d50f45598418e0ed29fed542e76cf071e0f.tar.gz cmud-338c3d50f45598418e0ed29fed542e76cf071e0f.zip |
data: Fix deserialization
turns out you need to pass pointers to functions that require pointers,
who knew?
Diffstat (limited to 'src/data.c')
-rw-r--r-- | src/data.c | 93 |
1 files changed, 11 insertions, 82 deletions
@@ -22,18 +22,7 @@ int try_make_data_dirs() { int try_load_plr(char *player_name, playerc_t *plr) { int err = 0; printf("Trying to make data directories...\n"); - err = try_make_data_dirs(); - if (err) { - switch (err) { - // Now the errors that continue will be from I/O, which we can use to - // figure out if the file exists in login - case EACCES: /* No permissions***************************************/ - printf("No permissions to create directories\n"); - return -1; - default: /* Do nothing because this is fine****************************/ - break; - } - } + try_make_data_dirs(); printf("Done, opening file.\n"); @@ -42,11 +31,11 @@ int try_load_plr(char *player_name, playerc_t *plr) { FILE *fp; - if (fp = fopen(fname, "rb")) { + if (fp = fopen(fname, "r")) { printf("Got fp\n"); - if (deserialize_player(fp, &plr->plr)) { + if (deserialize_player(fp, &plr->plr) == EOF) { printf("Couldn't deserialize player\n"); return -1; } @@ -82,7 +71,7 @@ int try_write_plr(player_t *plr) { char *fname; asprintf(&fname, "data/players/%s.plr", plr->name); - FILE *fp = fopen(fname, "wb"); + FILE *fp = fopen(fname, "w"); char* buf = malloc(sizeof(player_t) + 1); serialize_player(plr, fp); @@ -110,7 +99,9 @@ int try_write_plr(player_t *plr) { int serialize_player(player_t *plr, FILE* fp) { int err = 0; - err = fprintf(fp, "%d,%d,%d,%d,%d,%s,%s", plr->xp, plr->hp, plr->max_hp, plr->level, plr->location_id, plr->pw_hash, plr->name); + printf("%s\n", plr->pw_hash); + + err = fprintf(fp, "%d:%d:%d:%d:%d:%s:%s", plr->xp, plr->hp, plr->max_hp, plr->level, plr->location_id, plr->pw_hash, plr->name); return err; } @@ -136,70 +127,8 @@ int deserialize_player(FILE* fp, player_t* plr) { enum ParsePlayerState state = ReadingData; enum ParsePlayerType type = Xp; - char* buf = malloc(1 << 10); - printf("Allocated buf\n"); - - while ((c = getc(fp) != EOF)) { - if (c == ',') { - state = Comma; - printf("Found comma"); - } - switch (state) { - case ReadingData: - strncat(buf, c, 1); - break; - case Comma: - switch (type) { - case Xp: ; - int xp = atoi(buf); - plr->xp = xp; - state = ReadingData; - type = Hp; - memset(buf, 0, strlen(buf)); - break; - case Hp: ; - int hp = atoi(buf); - plr->hp = hp; - state = ReadingData; - type = MaxHp; - memset(buf, 0, strlen(buf)); - break; - case MaxHp: ; - int max_hp = atoi(buf); - plr->max_hp = max_hp; - state = ReadingData; - type = Level; - memset(buf, 0, strlen(buf)); - break; - case Level: ; - int level = atoi(buf); - plr->level = level; - state = ReadingData; - type = LocationId; - memset(buf, 0, strlen(buf)); - break; - case LocationId: ; - int location_id = atoi(buf); - plr->location_id = location_id; - state = ReadingData; - type = PwHash; - memset(buf, 0, strlen(buf)); - break; - case PwHash: ; - plr->pw_hash = malloc(1 << 5); - strcpy(plr->pw_hash, buf); - state = ReadingData; - type = Name; - memset(buf, 0, strlen(buf)); - break; - case Name: ; - plr->name = malloc(1 << 5); - strcpy(plr->name, buf); - // we're done here - free(buf); - return 0; - } - } - } - return err; + err = fscanf(fp, "%d:%d:%d:%d:%d:%s:%s", &(plr->xp), &(plr->hp), &(plr->max_hp), &(plr->level), &(plr->location_id), plr->pw_hash, plr->name); + + + return err; } |