Mercurial > hg > openttd
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