diff options
author | smatz <smatz@openttd.org> | 2009-11-01 20:40:36 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2009-11-01 20:40:36 +0000 |
commit | d87c032e521a5f3f6caff94e519670d9d2b7ce2c (patch) | |
tree | 8d8e61564c1211a4ae44f4301cd7c92a2766cf17 | |
parent | df8c655ee66ee2efcb46327cfd2f8c66cc47a3c5 (diff) | |
download | openttd-d87c032e521a5f3f6caff94e519670d9d2b7ce2c.tar.xz |
(svn r17941) -Fix: close BMP file when making screenshot fails
-rw-r--r-- | src/console_cmds.cpp | 2 | ||||
-rw-r--r-- | src/screenshot.cpp | 13 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 1f0d3f42e..7d62d3b58 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1219,7 +1219,7 @@ DEF_CONSOLE_CMD(ConScreenShot) { if (argc == 0) { IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | no_con] [file name]'"); - IConsoleHelp("'big' makes a screenshot of the whole map, 'no_con' hides the console to create" + IConsoleHelp("'big' makes a screenshot of the whole map, 'no_con' hides the console to create " "the screenshot. Screenshots of whole map are always drawn without console"); return true; } diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 283bd882f..87951c91a 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -125,9 +125,14 @@ static bool MakeBmpImage(char *name, ScreenshotCallback *callb, void *userdata, } /* write file header and info header and palette */ - if (fwrite(&bfh, sizeof(bfh), 1, f) != 1) return false; - if (fwrite(&bih, sizeof(bih), 1, f) != 1) return false; - if (pixelformat == 8) if (fwrite(rq, sizeof(rq), 1, f) != 1) return false; + if (fwrite(&bfh, sizeof(bfh), 1, f) != 1 || fwrite(&bih, sizeof(bih), 1, f) != 1) { + fclose(f); + return false; + } + if (pixelformat == 8 && fwrite(rq, sizeof(rq), 1, f) != 1) { + fclose(f); + return false; + } /* use by default 64k temp memory */ maxlines = Clamp(65536 / padw, 16, 128); @@ -151,7 +156,7 @@ static bool MakeBmpImage(char *name, ScreenshotCallback *callb, void *userdata, uint32 *buff32 = (uint32 *)buff; for (i = 0; i < padw * n; i++) buff32[i] = BSWAP32(buff32[i]); } -#endif +#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ /* write each line */ while (n) |