diff options
author | Cara Salter <cara@devcara.com> | 2022-01-20 23:47:53 -0500 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-01-20 23:47:53 -0500 |
commit | c2352ee043546b518f69c615a1ece778e942e650 (patch) | |
tree | 6efe18199f0fe2810c879c9251db2897a3244604 /src/data.c | |
download | cmud-c2352ee043546b518f69c615a1ece778e942e650.tar.gz cmud-c2352ee043546b518f69c615a1ece778e942e650.zip |
initial commit
yay start of a state machine and also learning sockets
Diffstat (limited to 'src/data.c')
-rw-r--r-- | src/data.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/data.c b/src/data.c new file mode 100644 index 0000000..15617e0 --- /dev/null +++ b/src/data.c @@ -0,0 +1,60 @@ +#include <asm-generic/errno-base.h> +#define _GNU_SOURCE +#include "data.h" +#include "login.h" +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> + +int try_make_data_dirs() { + int err = 0; + err = mkdir("data", S_IRWXU); + err = mkdir("data/players", S_IRWXU); + + return err; +} + +int try_load_plr(char *player_name, playerc_t *plr) { + int err = 0; + 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; + } + } + + char *fname; + asprintf(&fname, "data/players/%s.plr", player_name); + + FILE *fp = fopen(fname, "rb"); + + fread(&plr, sizeof(playerc_t), 1, fp); + + return err; +} + +int try_write_file(player_t *plr) { + int err = 0; + + err = try_make_data_dirs(); + if (err) { + perror("creating data directories"); + printf("Could not create data/\n"); + return err; + } + + char *fname; + asprintf(&fname, "data/players/%s.plr", *plr->name); + + FILE *fp = fopen(fname, "wb"); + + fwrite(&plr, sizeof(player_t), 1, fp); + + return err; +} |