From d1c0f6ea948e90ecbcd789b02e846000c2ab6911 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 26 Sep 2018 19:46:39 -0700 Subject: [PATCH] Don't include Windows.h in header files --- .../io/DontEchoStdinToStdoutRAII.cpp | 72 +++++++++++++++++++ src/cpp-utils/io/DontEchoStdinToStdoutRAII.h | 51 ++----------- 2 files changed, 78 insertions(+), 45 deletions(-) diff --git a/src/cpp-utils/io/DontEchoStdinToStdoutRAII.cpp b/src/cpp-utils/io/DontEchoStdinToStdoutRAII.cpp index babafcd6..be5c7558 100644 --- a/src/cpp-utils/io/DontEchoStdinToStdoutRAII.cpp +++ b/src/cpp-utils/io/DontEchoStdinToStdoutRAII.cpp @@ -1 +1,73 @@ #include "DontEchoStdinToStdoutRAII.h" + +#if !defined(_MSC_VER) + +#include +#include + +namespace cpputils { +namespace details { + +class _DontEchoStdinToStdoutRAII final { +public: + _DontEchoStdinToStdoutRAII() : _old_state() { + tcgetattr(STDIN_FILENO, &_old_state); + termios new_state = _old_state; + new_state.c_lflag &= ~ECHO; + tcsetattr(STDIN_FILENO, TCSANOW, &new_state); + } + + ~_DontEchoStdinToStdoutRAII() { + tcsetattr(STDIN_FILENO, TCSANOW, &_old_state); + } + +private: + termios _old_state; + + DISALLOW_COPY_AND_ASSIGN(_DontEchoStdinToStdoutRAII); +}; + +} +} + +#else + +#include + +namespace cpputils { +namespace details { + +class _DontEchoStdinToStdoutRAII final { +public: + _DontEchoStdinToStdoutRAII() : _old_state() { + HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); + GetConsoleMode(hStdin, &_old_state); + SetConsoleMode(hStdin, _old_state & (~ENABLE_ECHO_INPUT)); + } + + ~_DontEchoStdinToStdoutRAII() { + HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); + SetConsoleMode(hStdin, _old_state); + } + +private: + DWORD _old_state; + + DISALLOW_COPY_AND_ASSIGN(_DontEchoStdinToStdoutRAII); +}; + +} +} + +#endif + +using cpputils::make_unique_ref; + +namespace cpputils { + +DontEchoStdinToStdoutRAII::DontEchoStdinToStdoutRAII() + : raii(make_unique_ref()) {} + +DontEchoStdinToStdoutRAII::~DontEchoStdinToStdoutRAII() {} + +} diff --git a/src/cpp-utils/io/DontEchoStdinToStdoutRAII.h b/src/cpp-utils/io/DontEchoStdinToStdoutRAII.h index 4ca04803..c4f47be4 100644 --- a/src/cpp-utils/io/DontEchoStdinToStdoutRAII.h +++ b/src/cpp-utils/io/DontEchoStdinToStdoutRAII.h @@ -2,7 +2,7 @@ #ifndef MESSMER_CPPUTILS_IO_DONTECHOSTDINTOSTDOUTRAII_H #define MESSMER_CPPUTILS_IO_DONTECHOSTDINTOSTDOUTRAII_H -#include +#include #include "../macros.h" /** @@ -11,55 +11,18 @@ * This can be very handy for password inputs where you don't want the password to be visible on screen. */ -#if !defined(_MSC_VER) - -#include -#include - namespace cpputils { -class DontEchoStdinToStdoutRAII final { -public: - DontEchoStdinToStdoutRAII() : _old_state() { - tcgetattr(STDIN_FILENO, &_old_state); - termios new_state = _old_state; - new_state.c_lflag &= ~ECHO; - tcsetattr(STDIN_FILENO, TCSANOW, &new_state); - } - - ~DontEchoStdinToStdoutRAII() { - tcsetattr(STDIN_FILENO, TCSANOW, &_old_state); - } - -private: - termios _old_state; - - DISALLOW_COPY_AND_ASSIGN(DontEchoStdinToStdoutRAII); -}; - +namespace details { +class _DontEchoStdinToStdoutRAII; } -#else - -#include - -namespace cpputils { - class DontEchoStdinToStdoutRAII final { public: - DontEchoStdinToStdoutRAII() : _old_state() { - HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); - GetConsoleMode(hStdin, &_old_state); - SetConsoleMode(hStdin, _old_state & (~ENABLE_ECHO_INPUT)); - } - - ~DontEchoStdinToStdoutRAII() { - HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); - SetConsoleMode(hStdin, _old_state); - } - + DontEchoStdinToStdoutRAII(); + ~DontEchoStdinToStdoutRAII(); private: - DWORD _old_state; + cpputils::unique_ref raii; DISALLOW_COPY_AND_ASSIGN(DontEchoStdinToStdoutRAII); }; @@ -67,5 +30,3 @@ private: } #endif - -#endif