summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--known-bugs.txt6
-rw-r--r--src/os/windows/win32.cpp16
2 files changed, 21 insertions, 1 deletions
diff --git a/known-bugs.txt b/known-bugs.txt
index 499801c25..4fd48c77a 100644
--- a/known-bugs.txt
+++ b/known-bugs.txt
@@ -293,3 +293,9 @@ Can't change volume inside OpenTTD [FS#4416]
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.
diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp
index a66d3d65c..54c5c9cd3 100644
--- a/src/os/windows/win32.cpp
+++ b/src/os/windows/win32.cpp
@@ -297,7 +297,21 @@ void CreateConsole()
/* 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