#include #define _GNU_SOURCE #include "data.h" #include "login.h" #include #include #include #include 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; 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; } } printf("Done, opening file.\n"); char *fname; asprintf(&fname, "data/players/%s.plr", player_name); FILE *fp = fopen(fname, "rb"); printf("Got fp\n"); fread(&plr, sizeof(playerc_t), 1, fp); printf("Read file into plr\n"); return err; } int try_write_plr(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; }