Bitcoin Core
31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
src
compat
stdin.cpp
Go to the documentation of this file.
1
// Copyright (c) 2018-present 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
19
void
SetStdinEcho
(
bool
enable
)
20
{
21
if
(!
StdinTerminal
()) {
22
return
;
23
}
24
#ifdef WIN32
25
HANDLE
hStdin
=
GetStdHandle
(
STD_INPUT_HANDLE
);
26
DWORD
mode;
27
if
(!
GetConsoleMode
(
hStdin
, &mode)) {
28
fputs
(
"GetConsoleMode failed\n"
,
stderr
);
29
return
;
30
}
31
if
(!
enable
) {
32
mode &=
~ENABLE_ECHO_INPUT
;
33
}
else
{
34
mode |=
ENABLE_ECHO_INPUT
;
35
}
36
if
(!
SetConsoleMode
(
hStdin
, mode)) {
37
fputs
(
"SetConsoleMode failed\n"
,
stderr
);
38
}
39
#else
40
struct
termios
tty
;
41
if
(
tcgetattr
(
STDIN_FILENO
, &
tty
) != 0) {
42
fputs
(
"tcgetattr failed\n"
,
stderr
);
43
return
;
44
}
45
if
(!
enable
) {
46
tty
.c_lflag &=
static_cast<
decltype
(
tty
.
c_lflag
)
>
(
~ECHO
);
47
}
else
{
48
tty
.c_lflag |=
ECHO
;
49
}
50
if
(
tcsetattr
(
STDIN_FILENO
,
TCSANOW
, &
tty
) != 0) {
51
fputs
(
"tcsetattr failed\n"
,
stderr
);
52
}
53
#endif
54
}
55
56
bool
StdinTerminal
()
57
{
58
#ifdef WIN32
59
return
_isatty
(
_fileno
(
stdin
));
60
#else
61
return
isatty
(
fileno
(
stdin
));
62
#endif
63
}
64
65
bool
StdinReady
()
66
{
67
if
(!
StdinTerminal
()) {
68
return
true
;
69
}
70
#ifdef WIN32
71
return
false
;
72
#else
73
struct
pollfd
fds
;
74
fds
.fd =
STDIN_FILENO
;
75
fds
.events =
POLLIN
;
76
return
poll
(&
fds
, 1, 0) == 1;
77
#endif
78
}
79
80
NoechoInst::NoechoInst
() {
SetStdinEcho
(
false
); }
81
NoechoInst::~NoechoInst
() {
SetStdinEcho
(
true
); }
StdinReady
bool StdinReady()
Definition
stdin.cpp:65
SetStdinEcho
void SetStdinEcho(bool enable)
Definition
stdin.cpp:19
StdinTerminal
bool StdinTerminal()
Definition
stdin.cpp:56
stdin.h
NoechoInst::~NoechoInst
~NoechoInst()
Definition
stdin.cpp:81
NoechoInst::NoechoInst
NoechoInst()
Definition
stdin.cpp:80
Ticks
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition
time.h:73
Generated on Thu Apr 16 2026 09:42:38 for Bitcoin Core by
1.10.0