Merge branch 'feature/no_win_header' into develop
This commit is contained in:
commit
c4b56e0d99
@ -1 +1,73 @@
|
||||
#include "DontEchoStdinToStdoutRAII.h"
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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 <windows.h>
|
||||
|
||||
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<details::_DontEchoStdinToStdoutRAII>()) {}
|
||||
|
||||
DontEchoStdinToStdoutRAII::~DontEchoStdinToStdoutRAII() {}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
#ifndef MESSMER_CPPUTILS_IO_DONTECHOSTDINTOSTDOUTRAII_H
|
||||
#define MESSMER_CPPUTILS_IO_DONTECHOSTDINTOSTDOUTRAII_H
|
||||
|
||||
#include <memory>
|
||||
#include <cpp-utils/pointer/unique_ref.h>
|
||||
#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 <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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 <windows.h>
|
||||
|
||||
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<details::_DontEchoStdinToStdoutRAII> raii;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(DontEchoStdinToStdoutRAII);
|
||||
};
|
||||
@ -67,5 +30,3 @@ private:
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user