Bitcoin Core 28.99.0
P2P Digital Currency
stdin.cpp
Go to the documentation of this file.
1// Copyright (c) 2018-2022 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <compat/stdin.h>
6
7#include <cstdio>
8
9#ifdef WIN32
10#include <windows.h>
11#include <io.h>
12#else
13#include <termios.h>
14#include <unistd.h>
15#include <poll.h>
16#endif
17
18// https://stackoverflow.com/questions/1413445/reading-a-password-from-stdcin
19void SetStdinEcho(bool enable)
20{
21#ifdef WIN32
22 HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
23 DWORD mode;
24 GetConsoleMode(hStdin, &mode);
25 if (!enable) {
26 mode &= ~ENABLE_ECHO_INPUT;
27 } else {
28 mode |= ENABLE_ECHO_INPUT;
29 }
30 SetConsoleMode(hStdin, mode);
31#else
32 struct termios tty;
33 tcgetattr(STDIN_FILENO, &tty);
34 if (!enable) {
35 tty.c_lflag &= ~ECHO;
36 } else {
37 tty.c_lflag |= ECHO;
38 }
39 (void)tcsetattr(STDIN_FILENO, TCSANOW, &tty);
40#endif
41}
42
44{
45#ifdef WIN32
46 return _isatty(_fileno(stdin));
47#else
48 return isatty(fileno(stdin));
49#endif
50}
51
53{
54 if (!StdinTerminal()) {
55 return true;
56 }
57#ifdef WIN32
58 return false;
59#else
60 struct pollfd fds;
61 fds.fd = STDIN_FILENO;
62 fds.events = POLLIN;
63 return poll(&fds, 1, 0) == 1;
64#endif
65}
66
bool StdinReady()
Definition: stdin.cpp:52
void SetStdinEcho(bool enable)
Definition: stdin.cpp:19
bool StdinTerminal()
Definition: stdin.cpp:43
~NoechoInst()
Definition: stdin.cpp:68
NoechoInst()
Definition: stdin.cpp:67