Bug #235 » 0001-Fix-bug-not-hiding-passwort-in-command-line.patch
| 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,
|
||