mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Check return values from fwrite when saving files.
[originally from svn r8278]
This commit is contained in:
23
gtk.c
23
gtk.c
@ -1328,10 +1328,16 @@ static char *file_selector(frontend *fe, char *title, int save)
|
||||
return fe->filesel_name;
|
||||
}
|
||||
|
||||
struct savefile_write_ctx {
|
||||
FILE *fp;
|
||||
int error;
|
||||
};
|
||||
|
||||
static void savefile_write(void *wctx, void *buf, int len)
|
||||
{
|
||||
FILE *fp = (FILE *)wctx;
|
||||
fwrite(buf, 1, len, fp);
|
||||
struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)wctx;
|
||||
if (fwrite(buf, 1, len, ctx->fp) < len)
|
||||
ctx->error = 1;
|
||||
}
|
||||
|
||||
static int savefile_read(void *wctx, void *buf, int len)
|
||||
@ -1373,9 +1379,18 @@ static void menu_save_event(GtkMenuItem *menuitem, gpointer data)
|
||||
return;
|
||||
}
|
||||
|
||||
midend_serialise(fe->me, savefile_write, fp);
|
||||
{
|
||||
struct savefile_write_ctx ctx;
|
||||
ctx.fp = fp;
|
||||
ctx.error = 0;
|
||||
midend_serialise(fe->me, savefile_write, &ctx);
|
||||
fclose(fp);
|
||||
if (ctx.error) {
|
||||
error_box(fe->window, "Error writing save file");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user