From eb1041f13014b18e7973c1ee15aaf35e2a05501d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Thu, 23 Apr 2009 20:38:15 +0200 Subject: [PATCH] Make Windows client read password without echo again Commit 8c3b8d10 replaced the getpass() for Windows by a generic ersatz_getpass(). This lost the "switch off echo" feature, with the excuse that it doesn't work for me (MinGW & Wine). Turns out it works under real Windows. Restore the feature. --- src/client/login.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/client/login.c b/src/client/login.c index 350e6449..13eaf5e9 100644 --- a/src/client/login.c +++ b/src/client/login.c @@ -52,11 +52,22 @@ ersatz_getpass(char *prompt) static char buf[128]; char *p; size_t len; +#ifdef _WIN32 + DWORD mode; + HANDLE input_handle = GetStdHandle(STD_INPUT_HANDLE); - printf("Note: your input is echoed to the screen\n"); + if (GetConsoleMode(input_handle, &mode)) + SetConsoleMode(input_handle, mode & ~ENABLE_ECHO_INPUT); + else +#endif + printf("Note: your input is echoed to the screen\n"); printf("Your name? "); fflush(stdout); p = fgets(buf, sizeof(buf), stdin); +#ifdef _WIN32 + if (GetConsoleMode(input_handle, &mode)) + SetConsoleMode(input_handle, mode | ENABLE_ECHO_INPUT); +#endif if (!p) return NULL; len = strlen(p);