commit c1be82fa586bbd0eccbb0228947e4758d72e751e
parent 48cd1a87e21fb42be14bcb521725c6776432096f
Author: hhvn <dev@hhvn.uk>
Date: Sun, 27 Nov 2022 23:52:58 +0000
Don't leave anything on disk when creating a new save
Diffstat:
2 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/src/save.c b/src/save.c
@@ -41,6 +41,8 @@ save_read(char *name) {
if ((str = dbget(save->db.dir, "index", "homesystem")))
save->homesys = sys_get(str);
+ else
+ save->homesys = NULL;
for (i = 0; i < VIEW_LAST; i++)
if (view_init[i])
@@ -84,24 +86,20 @@ save_exists(char *name) {
int
save_create(char *name) {
char path[PATH_MAX];
- FILE *f;
-
- snprintf(path, sizeof(path), "%s/%s", SAVEDIR, name);
- if (mkdir(path, 0755) == -1)
- return -1;
snprintf(path, sizeof(path), "%s/%s/Systems", SAVEDIR, name);
- if (mkdir(path, 0755) == -1)
+ if (mkdirp(path) == -1)
return -1;
snprintf(path, sizeof(path), "%s/%s/Systems/Sol", SAVEDIR, name);
if (dirs_write("sol", path) == -1)
return -1;
- snprintf(path, sizeof(path), "%s/%s/index", SAVEDIR, name);
- if (!(f = fopen(path, "w")))
- return -1;
- fprintf(f, "selsystem\tSol\n");
- fclose(f);
+ /* Ideally this data should be set, so that it is in memory, not on
+ * disk, but for now, write->read->delete->maybe save */
+ save_read(name);
+ save_delete(name);
+ dbset(save->db.dir, "index", "homesystem", "Sol");
+
return 0;
}
diff --git a/src/views/smenu.c b/src/views/smenu.c
@@ -149,8 +149,9 @@ newhandler(void) {
static int
newhandler_actual(int type, void *elem) {
- save_create(v->new.name.str);
- save_read(v->new.name.str);
+ if (save_create(v->new.name.str) == -1)
+ error(1, "failed to create new save\n");
+ /* TODO: error handling that doesn't just cause an exit? */
loadadd(v->new.name.str, time(NULL));
view_tabs.sel = VIEW_MAIN;
v->new.disp = 0;