1 #include "git-compat-util.h"
2 #include "compat/terminal.h"
8 static int term_fd
= -1;
9 static struct termios old_term
;
11 static void restore_term(void)
16 tcsetattr(term_fd
, TCSAFLUSH
, &old_term
);
20 static void restore_term_on_signal(int sig
)
27 char *git_terminal_prompt(const char *prompt
, int echo
)
29 static struct strbuf buf
= STRBUF_INIT
;
33 fh
= fopen("/dev/tty", "w+");
40 if (tcgetattr(fileno(fh
), &t
) < 0) {
47 sigchain_push_common(restore_term_on_signal
);
50 if (tcsetattr(fileno(fh
), TCSAFLUSH
, &t
) < 0) {
60 r
= strbuf_getline(&buf
, fh
, '\n');
62 fseek(fh
, SEEK_CUR
, 0);
77 char *git_terminal_prompt(const char *prompt
, int echo
)
79 static struct strbuf buf
= STRBUF_INIT
;
81 fputs(prompt
, stderr
);
85 if (c
== '\n' || c
== '\r')
89 strbuf_addch(&buf
, c
);
97 char *git_terminal_prompt(const char *prompt
, int echo
)
99 return getpass(prompt
);