[PATCH v2 4/6] compat/terminal: separate input and output handles
- From
Erik Faye-Lund <kusmabite@gmail.com>
- Date
- Dec 4, 2012, 08:10 UTC
- Message-ID
- <1354608642-5316-5-git-send-email-kusmabite@gmail.com>
- In-Reply-To
- <1354608642-5316-1-git-send-email-kusmabite@gmail.com>
On Windows, the terminal cannot be opened in read-write mode, so we need distinct pairs for reading and writing. Since this works fine on other platforms as well, always open them in pairs.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> --- compat/terminal.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/compat/terminal.c b/compat/terminal.c index a6212ca..9aecad6 100644 --- a/compat/terminal.c +++ b/compat/terminal.c @@ -50,29 +50,36 @@ char *git_terminal_prompt(const char *prompt, int echo) { static struct strbuf buf = STRBUF_INIT; int r; - FILE *fh; + FILE *input_fh, *output_fh; - fh = fopen("/dev/tty", "w+"); - if (!fh) + input_fh = fopen("/dev/tty", "r"); + if (!input_fh) return NULL; + output_fh = fopen("/dev/tty", "w"); + if (!output_fh) { + fclose(input_fh); + return NULL; + } + if (!echo && disable_echo()) { - fclose(fh); + fclose(input_fh); + fclose(output_fh); return NULL; } - fputs(prompt, fh); - fflush(fh); + fputs(prompt, output_fh); + fflush(output_fh); - r = strbuf_getline(&buf, fh, '\n'); + r = strbuf_getline(&buf, input_fh, '\n'); if (!echo) { - fseek(fh, SEEK_CUR, 0); - putc('\n', fh); - fflush(fh); + putc('\n', output_fh); + fflush(output_fh); } restore_term(); - fclose(fh); + fclose(input_fh); + fclose(output_fh); if (r == EOF) return NULL;
-- 1.8.0.4.g3c6fb4f.dirty -- *** Please reply-to-all at all times *** *** (do not pretend to know who is subscribed and who is not) *** *** Please avoid top-posting. *** The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free. You received this message because you are subscribed to the Google Groups "msysGit" group. To post to this group, send email to msysgit@googlegroups.com To unsubscribe from this group, send email to msysgit+unsubscribe@googlegroups.com For more options, and view previous threads, visit this group at http://groups.google.com/group/msysgit?hl=en_US?hl=en