mirror of
https://github.com/git/git.git
synced 2026-02-15 12:23:05 +00:00
compat/terminal: support echoing on windows
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@gmail.com>
This commit is contained in:
committed by
Pat Thoyts
parent
760e559f68
commit
431fa8f83c
@@ -1850,21 +1850,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,
|
||||
|
||||
@@ -56,8 +56,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;
|
||||
|
||||
@@ -72,6 +72,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)
|
||||
|
||||
Reference in New Issue
Block a user