diff options
author | Lennart Poettering <lennart@poettering.net> | 2016-11-18 11:08:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-18 11:08:06 +0100 |
commit | 2e6dbc0fcd45c152f15aed77cde4fd07957c150c (patch) | |
tree | f1110db4a4acf0dde5dc7f2eed58ad5eef47406b /src/basic | |
parent | 9a4550e2589bddb12cea93693b83211d805444e1 (diff) | |
parent | 539622bd8c0b425626cab8562c85a5b0e1dda502 (diff) | |
download | systemd-2e6dbc0fcd45c152f15aed77cde4fd07957c150c.tar.gz systemd-2e6dbc0fcd45c152f15aed77cde4fd07957c150c.tar.bz2 systemd-2e6dbc0fcd45c152f15aed77cde4fd07957c150c.zip |
Merge pull request #4538 from fbuihuu/confirm-spawn-fixes
Confirm spawn fixes/enhancements
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/terminal-util.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index eafdea9eb3..9a8ef825c5 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -144,12 +144,14 @@ int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) { return 0; } -int ask_char(char *ret, const char *replies, const char *text, ...) { +#define DEFAULT_ASK_REFRESH_USEC (2*USEC_PER_SEC) + +int ask_char(char *ret, const char *replies, const char *fmt, ...) { int r; assert(ret); assert(replies); - assert(text); + assert(fmt); for (;;) { va_list ap; @@ -159,8 +161,10 @@ int ask_char(char *ret, const char *replies, const char *text, ...) { if (colors_enabled()) fputs(ANSI_HIGHLIGHT, stdout); - va_start(ap, text); - vprintf(text, ap); + putchar('\r'); + + va_start(ap, fmt); + vprintf(fmt, ap); va_end(ap); if (colors_enabled()) @@ -168,9 +172,12 @@ int ask_char(char *ret, const char *replies, const char *text, ...) { fflush(stdout); - r = read_one_char(stdin, &c, USEC_INFINITY, &need_nl); + r = read_one_char(stdin, &c, DEFAULT_ASK_REFRESH_USEC, &need_nl); if (r < 0) { + if (r == -ETIMEDOUT) + continue; + if (r == -EBADMSG) { puts("Bad input, please try again."); continue; @@ -455,7 +462,7 @@ int acquire_terminal( goto fail; } - r = fd_wait_for_event(fd, POLLIN, ts + timeout - n); + r = fd_wait_for_event(notify, POLLIN, ts + timeout - n); if (r < 0) goto fail; |