diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2017-02-18 22:53:14 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2017-02-18 20:37:12 +0000 |
commit | 12899c07be2f927776ae12ea1abcefdc4bea8346 (patch) | |
tree | e76357df9e2447cc072b5a48134a5adc65d61be7 /desktop | |
parent | 5280121732324eff5a30087a36a50c58524b8ef3 (diff) |
tdf#100826 related: initialize stdout/stdin/strerr properly
The previous code doesn't work with VS2015.
Change-Id: Ide75b2f978dda871874572a093039b5772a2b537
Reviewed-on: https://gerrit.libreoffice.org/34409
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/app/cmdlinehelp.cxx | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/desktop/source/app/cmdlinehelp.cxx b/desktop/source/app/cmdlinehelp.cxx index 6498ec85516c..83baa1df21ab 100644 --- a/desktop/source/app/cmdlinehelp.cxx +++ b/desktop/source/app/cmdlinehelp.cxx @@ -177,10 +177,7 @@ namespace desktop explicit lcl_Console(short nBufHeight) : mConsoleMode(unknown) { - HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE), - hOut = GetStdHandle(STD_OUTPUT_HANDLE), - hErr = GetStdHandle(STD_ERROR_HANDLE); - if (hOut == nullptr) // application does not have associated standard handles + if (GetStdHandle(STD_OUTPUT_HANDLE) == nullptr) // application does not have associated standard handles { STARTUPINFOA aStartupInfo; aStartupInfo.cb = sizeof(aStartupInfo); @@ -188,9 +185,9 @@ namespace desktop if ((aStartupInfo.dwFlags & STARTF_USESTDHANDLES) == STARTF_USESTDHANDLES) { // If standard handles had been passed to this process, use them - hIn = aStartupInfo.hStdInput; - hOut = aStartupInfo.hStdOutput; - hErr = aStartupInfo.hStdError; + SetStdHandle(STD_INPUT_HANDLE, aStartupInfo.hStdInput); + SetStdHandle(STD_OUTPUT_HANDLE, aStartupInfo.hStdOutput); + SetStdHandle(STD_ERROR_HANDLE, aStartupInfo.hStdError); } else { @@ -201,9 +198,7 @@ namespace desktop else if (AllocConsole() != FALSE) mConsoleMode = allocated; - hIn = GetStdHandle(STD_INPUT_HANDLE); - hOut = GetStdHandle(STD_OUTPUT_HANDLE); - hErr = GetStdHandle(STD_ERROR_HANDLE); + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // Ensure that console buffer is enough to hold required data CONSOLE_SCREEN_BUFFER_INFO cinfo; @@ -216,21 +211,9 @@ namespace desktop } } - // stdin - int fileHandle = _open_osfhandle(reinterpret_cast<intptr_t>(hIn), _O_TEXT); - FILE *fp = _fdopen(fileHandle, "r"); - *stdin = *fp; - setvbuf(stdin, nullptr, _IONBF, 0); - // stdout - fileHandle = _open_osfhandle(reinterpret_cast<intptr_t>(hOut), _O_TEXT); - fp = _fdopen(fileHandle, "w"); - *stdout = *fp; - setvbuf(stdout, nullptr, _IONBF, 0); - // stderr - fileHandle = _open_osfhandle(reinterpret_cast<intptr_t>(hErr), _O_TEXT); - fp = _fdopen(fileHandle, "w"); - *stderr = *fp; - setvbuf(stderr, nullptr, _IONBF, 0); + freopen("CON", "r", stdin); + freopen("CON", "w", stdout); + freopen("CON", "w", stderr); std::ios::sync_with_stdio(true); @@ -242,6 +225,7 @@ namespace desktop ~lcl_Console() { + fflush(stdout); switch (mConsoleMode) { case unknown: // Don't free the console |