[Spice-devel] [PATCH 3/3] client/windows: don't allocate console unless required
Arnon Gilboa
agilboa at redhat.com
Thu Jan 27 04:51:44 PST 2011
ack
Alon Levy wrote:
> ---
> client/windows/platform.cpp | 36 +++++++++++++++++++++++++++---------
> 1 files changed, 27 insertions(+), 9 deletions(-)
>
> diff --git a/client/windows/platform.cpp b/client/windows/platform.cpp
> index c41c39a..f57413d 100644
> --- a/client/windows/platform.cpp
> +++ b/client/windows/platform.cpp
> @@ -1121,6 +1121,7 @@ void Platform::on_clipboard_release()
> }
>
> static bool has_console = false;
> +static BOOL parent_console;
>
> static void create_console()
> {
> @@ -1132,27 +1133,44 @@ static void create_console()
> return;
> }
>
> - AllocConsole();
> + parent_console = AttachConsole(-1 /* parent */);
> +
> + if (!parent_console) {
> + AllocConsole();
> + }
> +
> HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
> int hConHandle = _open_osfhandle((intptr_t)h, _O_TEXT);
> - FILE * fp = _fdopen(hConHandle, "w");
> - *stdout = *fp;
> + FILE * fp;
> + /* _open_osfhandle can fail, for instance this will fail:
> + start /wait spicec.exe --help | more
> + however this actually works:
> + cmd /c spicec --help | more
> + */
> + if (hConHandle != -1) {
> + fp = _fdopen(hConHandle, "w");
> + *stdout = *fp;
> + }
>
> h = GetStdHandle(STD_INPUT_HANDLE);
> hConHandle = _open_osfhandle((intptr_t)h, _O_TEXT);
> - fp = _fdopen(hConHandle, "r");
> - *stdin = *fp;
> + if (hConHandle != -1) {
> + fp = _fdopen(hConHandle, "r");
> + *stdin = *fp;
> + }
>
> h = GetStdHandle(STD_ERROR_HANDLE);
> hConHandle = _open_osfhandle((intptr_t)h, _O_TEXT);
> - fp = _fdopen(hConHandle, "w");
> - *stderr = *fp;
> + if (hConHandle != -1) {
> + fp = _fdopen(hConHandle, "w");
> + *stderr = *fp;
> + }
>
> has_console = true;
>
> HWND consol_window = GetConsoleWindow();
>
> - if (consol_window) {
> + if (consol_window && !parent_console) {
> SetForegroundWindow(consol_window);
> }
> }
> @@ -1161,7 +1179,7 @@ class ConsoleWait {
> public:
> ~ConsoleWait()
> {
> - if (has_console) {
> + if (has_console && !parent_console) {
> Platform::term_printf("\n\nPress any key to exit...");
> _getch();
> }
>
More information about the Spice-devel
mailing list