Without /dev/tty support, git_terminal_prompt simply ignores the 'echo'-parameter. On Windows we can do better by clevering up our getpass-implementation a bit so it can conditionally echo. While we're at it, plug a small memory-leak by returning a pointer to a static strbuf instead of detaching it. This is the same thing the /dev/tty-version of git_terminal_prompt does, and the callee doesn't expect to have to free it's memory. Signed-off-by: Erik Faye-Lund <kusmabite@xxxxxxxxx> --- compat/mingw.c | 15 --------------- compat/mingw.h | 2 -- compat/terminal.c | 20 ++++++++++++++++++++ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/compat/mingw.c b/compat/mingw.c index afc892d..56ab74c 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1699,21 +1699,6 @@ int link(const char *oldpath, const char *newpath) return 0; } -char *getpass(const char *prompt) -{ - struct strbuf buf = STRBUF_INIT; - - fputs(prompt, stderr); - for (;;) { - char c = _getch(); - if (c == '\r' || c == '\n') - break; - strbuf_addch(&buf, c); - } - fputs("\n", stderr); - return strbuf_detach(&buf, NULL); -} - pid_t waitpid(pid_t pid, int *status, int options) { HANDLE h = OpenProcess(SYNCHRONIZE | PROCESS_QUERY_INFORMATION, diff --git a/compat/mingw.h b/compat/mingw.h index 61a6521..5e64a98 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -55,8 +55,6 @@ struct passwd { char *pw_dir; }; -extern char *getpass(const char *prompt); - typedef void (__cdecl *sig_handler_t)(int); struct sigaction { sig_handler_t sa_handler; diff --git a/compat/terminal.c b/compat/terminal.c index 6d16c8f..53c5166 100644 --- a/compat/terminal.c +++ b/compat/terminal.c @@ -71,6 +71,26 @@ char *git_terminal_prompt(const char *prompt, int echo) return buf.buf; } +#elif defined(WIN32) + +char *git_terminal_prompt(const char *prompt, int echo) +{ + static struct strbuf buf = STRBUF_INIT; + + fputs(prompt, stderr); + strbuf_reset(&buf); + for (;;) { + int c = _getch(); + if (c == '\n' || c == '\r') + break; + if (echo) + putc(c, stderr); + strbuf_addch(&buf, c); + } + putc('\n', stderr); + return buf.buf; +} + #else char *git_terminal_prompt(const char *prompt, int echo) -- 1.7.11.1.27.gdae0dbb -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html