aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2008-11-04 23:02:07 +0000
committerSimon Tatham <anakin@pobox.com>2008-11-04 23:02:07 +0000
commit23fb0e7753804d86fff53f1bc1fbc3e286f60c7c (patch)
tree43e37670996560d9630d3ac3fab48b0f306b39c5
parentf4bd45e7b967980782663f4eb27e5006528283d3 (diff)
downloadpuzzles-23fb0e7753804d86fff53f1bc1fbc3e286f60c7c.zip
puzzles-23fb0e7753804d86fff53f1bc1fbc3e286f60c7c.tar.gz
puzzles-23fb0e7753804d86fff53f1bc1fbc3e286f60c7c.tar.bz2
puzzles-23fb0e7753804d86fff53f1bc1fbc3e286f60c7c.tar.xz
Check return values from fwrite when saving files.
[originally from svn r8278]
-rw-r--r--gtk.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/gtk.c b/gtk.c
index fc99f92..29b215e 100644
--- a/gtk.c
+++ b/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);
}
}