X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbasic%2Fterminal-util.c;h=6cf623d5196fc16d7ca4b908829a406d1a6704aa;hp=215b764882b95dbde54dc09b599b0a948776de1f;hb=d93247127eb2e073a6d3b5bcc67bcc4048d674fe;hpb=e28a8a014111dbbd4083c0c5790d484001388fbe diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 215b76488..6cf623d51 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; @@ -347,12 +354,7 @@ int open_terminal(const char *name, int mode) { } r = isatty(fd); - if (r < 0) { - safe_close(fd); - return -errno; - } - - if (!r) { + if (r == 0) { safe_close(fd); return -ENOTTY; } @@ -462,7 +464,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; @@ -1224,6 +1226,7 @@ bool colors_enabled(void) { static int enabled = -1; if (_unlikely_(enabled < 0)) { +#if 0 /// elogind does not allow such forcing, and we are never init! int val; val = getenv_bool("SYSTEMD_COLORS"); @@ -1233,6 +1236,7 @@ bool colors_enabled(void) { /* PID1 outputs to the console without holding it open all the time */ enabled = !getenv_terminal_is_dumb(); else +#endif // 0 enabled = !terminal_is_dumb(); }