summaryrefslogtreecommitdiff
path: root/src/shared/util.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-07-17 09:10:14 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-22 07:33:38 -0400
commitad77e315f5c53994d75056608df0f9ff0a390530 (patch)
tree486ec4cc333301b62fbe89e72fcdbf2671f60178 /src/shared/util.cpp
parentbca6283311cf1dea4c96f8ee5bf192bdb1640cb3 (diff)
moved Console to util
Diffstat (limited to 'src/shared/util.cpp')
-rw-r--r--src/shared/util.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/shared/util.cpp b/src/shared/util.cpp
index 17df3b92..29e52f40 100644
--- a/src/shared/util.cpp
+++ b/src/shared/util.cpp
@@ -441,6 +441,49 @@ private:
};
+Console::Console()
+ : m_hasConsole(false), m_in(nullptr), m_out(nullptr), m_err(nullptr)
+{
+ // open a console
+ if (!AllocConsole()) {
+ // failed, ignore
+ }
+
+ m_hasConsole = true;
+
+ // redirect stdin, stdout and stderr to it
+ freopen_s(&m_in, "CONIN$", "r", stdin);
+ freopen_s(&m_out, "CONOUT$", "w", stdout);
+ freopen_s(&m_err, "CONOUT$", "w", stderr);
+}
+
+Console::~Console()
+{
+ // close redirected handles and redirect standard stream to NUL in case
+ // they're used after this
+
+ if (m_err) {
+ std::fclose(m_err);
+ freopen_s(&m_err, "NUL", "w", stderr);
+ }
+
+ if (m_out) {
+ std::fclose(m_out);
+ freopen_s(&m_out, "NUL", "w", stdout);
+ }
+
+ if (m_in) {
+ std::fclose(m_in);
+ freopen_s(&m_in, "NUL", "r", stdin);
+ }
+
+ // close console
+ if (m_hasConsole) {
+ FreeConsole();
+ }
+}
+
+
Shortcut::Shortcut()
: m_iconIndex(0)
{