aboutsummaryrefslogtreecommitdiff
path: root/src/data.c
diff options
context:
space:
mode:
authorCara Salter <cara@devcara.com>2022-01-20 23:47:53 -0500
committerCara Salter <cara@devcara.com>2022-01-20 23:47:53 -0500
commitc2352ee043546b518f69c615a1ece778e942e650 (patch)
tree6efe18199f0fe2810c879c9251db2897a3244604 /src/data.c
downloadcmud-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.c60
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;
+}