X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=prompt.c;h=d851807feb9849813635471d7099e67ed743a2d7;hb=HEAD;hp=72ab9de2f94be30eef9e41ced97580f7de48e0fc;hpb=a95750c4e8f78eb89c277abd41f05be58715314f;p=git.git diff --git a/prompt.c b/prompt.c index 72ab9de2f..d851807fe 100644 --- a/prompt.c +++ b/prompt.c @@ -9,6 +9,7 @@ static char *do_askpass(const char *cmd, const char *prompt) struct child_process pass; const char *args[3]; static struct strbuf buffer = STRBUF_INIT; + int err = 0; args[0] = cmd; args[1] = prompt; @@ -19,25 +20,30 @@ static char *do_askpass(const char *cmd, const char *prompt) pass.out = -1; if (start_command(&pass)) - exit(1); + return NULL; - strbuf_reset(&buffer); if (strbuf_read(&buffer, pass.out, 20) < 0) - die("failed to get '%s' from %s\n", prompt, cmd); + err = 1; close(pass.out); if (finish_command(&pass)) - exit(1); + err = 1; + + if (err) { + error("unable to read askpass response from '%s'", cmd); + strbuf_release(&buffer); + return NULL; + } strbuf_setlen(&buffer, strcspn(buffer.buf, "\r\n")); - return buffer.buf; + return strbuf_detach(&buffer, NULL); } char *git_prompt(const char *prompt, int flags) { - char *r; + char *r = NULL; if (flags & PROMPT_ASKPASS) { const char *askpass; @@ -48,12 +54,15 @@ char *git_prompt(const char *prompt, int flags) if (!askpass) askpass = getenv("SSH_ASKPASS"); if (askpass && *askpass) - return do_askpass(askpass, prompt); + r = do_askpass(askpass, prompt); } - r = git_terminal_prompt(prompt, flags & PROMPT_ECHO); if (!r) - die_errno("could not read '%s'", prompt); + r = git_terminal_prompt(prompt, flags & PROMPT_ECHO); + if (!r) { + /* prompts already contain ": " at the end */ + die("could not read %s%s", prompt, strerror(errno)); + } return r; }