summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2011-01-27 12:13:20 +0200
committerAlon Levy <alevy@redhat.com>2011-01-27 17:24:01 +0200
commit7b4e4f278a2f836a5afd2eb8d12288324be12151 (patch)
treecabaa23f23b4347653cbb2ce0cc46e065baa22ef
parentfe3b3d39379f03aa627c9d2020abfd60b372e2af (diff)
downloadspice-7b4e4f278a2f836a5afd2eb8d12288324be12151.tar.gz
spice-7b4e4f278a2f836a5afd2eb8d12288324be12151.tar.xz
spice-7b4e4f278a2f836a5afd2eb8d12288324be12151.zip
client/windows: don't allocate console unless required
-rw-r--r--client/windows/platform.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/client/windows/platform.cpp b/client/windows/platform.cpp
index 16760003..fc6fb2e0 100644
--- a/client/windows/platform.cpp
+++ b/client/windows/platform.cpp
@@ -1106,6 +1106,7 @@ void Platform::on_clipboard_release()
}
static bool has_console = false;
+static BOOL parent_console;
static void create_console()
{
@@ -1117,27 +1118,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);
}
}
@@ -1146,7 +1164,7 @@ class ConsoleWait {
public:
~ConsoleWait()
{
- if (has_console) {
+ if (has_console && !parent_console) {
Platform::term_printf("\n\nPress any key to exit...");
_getch();
}