Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
compat/terminal: support echoing on windows
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
kusma committed Jun 24, 2012
1 parent 68b7ef2 commit 3006a55
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 17 deletions.
15 changes: 0 additions & 15 deletions compat/mingw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 0 additions & 2 deletions compat/mingw.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 20 additions & 0 deletions compat/terminal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 3006a55

Please sign in to comment.