Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
compat/terminal: factor out echo-disabling
author
Erik Faye-Lund
<kusmabite@gmail.com>
Tue, 4 Dec 2012 08:10:39 +0000
(09:10 +0100)
committer
Junio C Hamano
<gitster@pobox.com>
Tue, 4 Dec 2012 16:01:59 +0000
(08:01 -0800)
By moving the echo-disabling code to a separate function, we can
implement OS-specific versions of it for non-POSIX platforms.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/terminal.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
176478a
)
diff --git
a/compat/terminal.c
b/compat/terminal.c
index bbb038dd0103034b85b0e9d407dfa91e607c1eeb..a6212ca3c988ca0e3ee71c397a79144e6b482fe8 100644
(file)
--- a/
compat/terminal.c
+++ b/
compat/terminal.c
@@
-14,6
+14,7
@@
static void restore_term(void)
return;
tcsetattr(term_fd, TCSAFLUSH, &old_term);
return;
tcsetattr(term_fd, TCSAFLUSH, &old_term);
+ close(term_fd);
term_fd = -1;
}
term_fd = -1;
}
@@
-24,6
+25,27
@@
static void restore_term_on_signal(int sig)
raise(sig);
}
raise(sig);
}
+static int disable_echo(void)
+{
+ struct termios t;
+
+ term_fd = open("/dev/tty", O_RDWR);
+ if (tcgetattr(term_fd, &t) < 0)
+ goto error;
+
+ old_term = t;
+ sigchain_push_common(restore_term_on_signal);
+
+ t.c_lflag &= ~ECHO;
+ if (!tcsetattr(term_fd, TCSAFLUSH, &t))
+ return 0;
+
+error:
+ close(term_fd);
+ term_fd = -1;
+ return -1;
+}
+
char *git_terminal_prompt(const char *prompt, int echo)
{
static struct strbuf buf = STRBUF_INIT;
char *git_terminal_prompt(const char *prompt, int echo)
{
static struct strbuf buf = STRBUF_INIT;
@@
-34,24
+56,9
@@
char *git_terminal_prompt(const char *prompt, int echo)
if (!fh)
return NULL;
if (!fh)
return NULL;
- if (!echo) {
- struct termios t;
-
- if (tcgetattr(fileno(fh), &t) < 0) {
- fclose(fh);
- return NULL;
- }
-
- old_term = t;
- term_fd = fileno(fh);
- sigchain_push_common(restore_term_on_signal);
-
- t.c_lflag &= ~ECHO;
- if (tcsetattr(fileno(fh), TCSAFLUSH, &t) < 0) {
- term_fd = -1;
- fclose(fh);
- return NULL;
- }
+ if (!echo && disable_echo()) {
+ fclose(fh);
+ return NULL;
}
fputs(prompt, fh);
}
fputs(prompt, fh);