From d87c032e521a5f3f6caff94e519670d9d2b7ce2c Mon Sep 17 00:00:00 2001
From: smatz <smatz@openttd.org>
Date: Sun, 1 Nov 2009 20:40:36 +0000
Subject: [PATCH] (svn r17941) -Fix: close BMP file when making screenshot
 fails

---
 src/console_cmds.cpp |  2 +-
 src/screenshot.cpp   | 13 +++++++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index 1f0d3f42e8..7d62d3b586 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 283bd882fb..87951c91ae 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)