diff options
| author | Simon Tatham <anakin@pobox.com> | 2008-11-04 23:02:07 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2008-11-04 23:02:07 +0000 |
| commit | 23fb0e7753804d86fff53f1bc1fbc3e286f60c7c (patch) | |
| tree | 43e37670996560d9630d3ac3fab48b0f306b39c5 | |
| parent | f4bd45e7b967980782663f4eb27e5006528283d3 (diff) | |
| download | puzzles-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.c | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -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); } } |