This commit is contained in:
Wes 2025-08-03 08:16:46 -05:00 committed by GitHub
commit 5263f4c160
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -57,9 +57,18 @@ NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream)
#ifdef _WIN32
#ifndef UNDER_CE
#define MY_DISABLE_ECHO
#define MY_DISABLE_ECHO_WIN32
#endif
#endif
#ifdef unix
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#define MY_DISABLE_ECHO
#define MY_DISABLE_ECHO_UNIX
#endif
static bool GetPassword(CStdOutStream *outStream, UString &psw)
{
if (outStream)
@ -72,7 +81,7 @@ static bool GetPassword(CStdOutStream *outStream, UString &psw)
outStream->Flush();
}
#ifdef MY_DISABLE_ECHO
#ifdef MY_DISABLE_ECHO_WIN32
const HANDLE console = GetStdHandle(STD_INPUT_HANDLE);
@ -91,6 +100,28 @@ static bool GetPassword(CStdOutStream *outStream, UString &psw)
if (wasChanged)
SetConsoleMode(console, mode);
#elif defined(MY_DISABLE_ECHO_UNIX)
int ifd = fileno(stdin);
bool wasChanged = false;
struct termios old_mode = {};
struct termios new_mode = {};
if (tcgetattr(ifd, &old_mode) == 0) {
new_mode = old_mode;
new_mode.c_lflag &= ~ECHO;
wasChanged = true;
tcsetattr(ifd, TCSAFLUSH, &new_mode);
}
bool res = g_StdIn.ScanUStringUntilNewLine(psw);
if (wasChanged) {
tcsetattr(ifd, TCSAFLUSH, &old_mode);
}
#else
const bool res = g_StdIn.ScanUStringUntilNewLine(psw);