mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-12 02:07:39 +01:00
Add missing includes. Swap C headers for their C++ counterparts. Remove pointless / unmaintainable include comments. This is even more the case when we are actually using IWYU, as if anyone wants to see the comments they can just get IWYU to generate them.
68 lines
1.4 KiB
C++
68 lines
1.4 KiB
C++
// Copyright (c) 2018-2019 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <compat/stdin.h>
|
|
|
|
#include <cstdio>
|
|
|
|
#ifdef WIN32
|
|
#include <windows.h>
|
|
#include <io.h>
|
|
#else
|
|
#include <termios.h>
|
|
#include <unistd.h>
|
|
#include <poll.h>
|
|
#endif
|
|
|
|
// https://stackoverflow.com/questions/1413445/reading-a-password-from-stdcin
|
|
void SetStdinEcho(bool enable)
|
|
{
|
|
#ifdef WIN32
|
|
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
|
DWORD mode;
|
|
GetConsoleMode(hStdin, &mode);
|
|
if (!enable) {
|
|
mode &= ~ENABLE_ECHO_INPUT;
|
|
} else {
|
|
mode |= ENABLE_ECHO_INPUT;
|
|
}
|
|
SetConsoleMode(hStdin, mode);
|
|
#else
|
|
struct termios tty;
|
|
tcgetattr(STDIN_FILENO, &tty);
|
|
if (!enable) {
|
|
tty.c_lflag &= ~ECHO;
|
|
} else {
|
|
tty.c_lflag |= ECHO;
|
|
}
|
|
(void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
|
|
#endif
|
|
}
|
|
|
|
bool StdinTerminal()
|
|
{
|
|
#ifdef WIN32
|
|
return _isatty(_fileno(stdin));
|
|
#else
|
|
return isatty(fileno(stdin));
|
|
#endif
|
|
}
|
|
|
|
bool StdinReady()
|
|
{
|
|
if (!StdinTerminal()) {
|
|
return true;
|
|
}
|
|
#ifdef WIN32
|
|
return false;
|
|
#else
|
|
struct pollfd fds;
|
|
fds.fd = 0; /* this is STDIN */
|
|
fds.events = POLLIN;
|
|
return poll(&fds, 1, 0) == 1;
|
|
#endif
|
|
}
|
|
|
|
NoechoInst::NoechoInst() { SetStdinEcho(false); }
|
|
NoechoInst::~NoechoInst() { SetStdinEcho(true); }
|