Projekt

Allgemein

Profil

Bug #235 » 0001-Fix-bug-not-hiding-passwort-in-command-line.patch

rhabacker, 15.08.2022 23:30

Unterschiede anzeigen:

src/gui/cgui.c
#ifdef HAVE_ICONV_H
# include <iconv.h>
#endif
#ifdef OS_WIN32
#include <windows.h>
#endif
#ifndef ICONV_CONST
# define ICONV_CONST
#endif
......
return chr;
}
#ifdef OS_WIN32
int GWEN_Gui_CGui__input(GWEN_UNUSED GWEN_GUI *gui,
uint32_t flags,
char *buffer,
int minLen,
int maxLen,
uint32_t guiid)
{
const char ABORT=3;
const char BACKSPACE=8;
const char RETURN=13;
const int show_asterisk=!(flags & GWEN_GUI_INPUT_FLAGS_SHOW);
int rv = 0;
unsigned char ch=0;
char *p=buffer;
DWORD con_mode;
DWORD dwRead;
HANDLE hIn=GetStdHandle(STD_INPUT_HANDLE);
if (hIn == INVALID_HANDLE_VALUE) {
DBG_ERROR(GWEN_LOGDOMAIN, "Cannot get handle to stdin");
rv=GWEN_ERROR_GENERIC;
return rv;
}
if (!GetConsoleMode(hIn, &con_mode)) {
DBG_ERROR(GWEN_LOGDOMAIN, "Error on getting console mode for stdin: %d", GetLastError());
rv=GWEN_ERROR_GENERIC;
return rv;
}
if (!SetConsoleMode(hIn, con_mode & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_OUTPUT))) {
DBG_ERROR(GWEN_LOGDOMAIN, "Error on seting console mode for stdin: %d", GetLastError());
rv=GWEN_ERROR_GENERIC;
return rv;
}
while(ReadConsoleA(hIn, &ch, 1, &dwRead, NULL) && ch !=RETURN) {
if (ch==BACKSPACE) {
if (p>buffer) {
if (show_asterisk) {
putchar('\b');
putchar(' ');
putchar('\b');
}
*--p='\0';
}
} else if (ch==ABORT) {
DBG_INFO(GWEN_LOGDOMAIN, "User aborted");
rv=GWEN_ERROR_USER_ABORTED;
break;
} else if (p-buffer<maxLen) {
*p++=ch;
*p='\0';
if (show_asterisk)
putchar('*');
else
putchar(ch);
}
}
putchar('\n');
if (!SetConsoleMode(hIn, con_mode)) {
DBG_ERROR(GWEN_LOGDOMAIN, "Error on resetting console mode for stdin: %d", GetLastError());
rv=GWEN_ERROR_GENERIC;
}
return rv;
}
#else
int GWEN_Gui_CGui__input(GWEN_UNUSED GWEN_GUI *gui,
uint32_t flags,
char *buffer,
......
#endif
return rv;
}
#endif
int GWENHYWFAR_CB GWEN_Gui_CGui_MessageBox(GWEN_GUI *gui,
(3-3/3)