changeset 17687:b1762882d6c9 draft

(svn r22464) -Fix [FS#4587]: [Windows] Prevent a crash when launching OpenTTD with -d from a MSYS console. Added a note to known-bugs about this issue.
author terkhen <terkhen@openttd.org>
date Sun, 15 May 2011 14:51:06 +0000
parents 3756519cf3c4
children 18cbda268559
files known-bugs.txt src/os/windows/win32.cpp
diffstat 2 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/known-bugs.txt
+++ b/known-bugs.txt
@@ -293,3 +293,9 @@
 	in OpenTTD. As a result you can't change the volume inside OpenTTD
 	for backends such as SDL; just use the volume control provided by
 	your operating system.
+
+Can't run OpenTTD with the -d option from a MSYS console [FS#4587]
+	The MSYS console does not allow OpenTTD to open an extra console for
+	debugging output. Compiling OpenTTD with the --enable-console
+	configure option prevents this issue and allows the -d option to use
+	the MSYS console for its output.
--- a/src/os/windows/win32.cpp
+++ b/src/os/windows/win32.cpp
@@ -297,7 +297,21 @@
 
 	/* redirect unbuffered STDIN, STDOUT, STDERR to the console */
 #if !defined(__CYGWIN__)
-	*stdout = *_fdopen( _open_osfhandle((intptr_t)hand, _O_TEXT), "w" );
+
+	/* Check if we can open a handle to STDOUT. */
+	int fd = _open_osfhandle((intptr_t)hand, _O_TEXT);
+	if (fd == -1) {
+		/* Free everything related to the console. */
+		FreeConsole();
+		_has_console = false;
+		_close(fd);
+		CloseHandle(hand);
+
+		ShowInfo("Unable to open an output handle to the console. Check known-bugs.txt for details.");
+		return;
+	}
+
+	*stdout = *_fdopen(fd, "w");
 	*stdin = *_fdopen(_open_osfhandle((intptr_t)GetStdHandle(STD_INPUT_HANDLE), _O_TEXT), "r" );
 	*stderr = *_fdopen(_open_osfhandle((intptr_t)GetStdHandle(STD_ERROR_HANDLE), _O_TEXT), "w" );
 #else