chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: introduce parse_ip_port (#4825)
[elogind.git]
/
src
/
basic
/
terminal-util.c
diff --git
a/src/basic/terminal-util.c
b/src/basic/terminal-util.c
index 0659310a743b92a759c1a1743d8720c746982f0f..6cf623d5196fc16d7ca4b908829a406d1a6704aa 100644
(file)
--- 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;
}
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);
int r;
assert(ret);
assert(replies);
- assert(
tex
t);
+ assert(
fm
t);
for (;;) {
va_list ap;
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);
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())
va_end(ap);
if (colors_enabled())
@@
-168,9
+172,12
@@
int ask_char(char *ret, const char *replies, const char *text, ...) {
fflush(stdout);
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 < 0) {
+ if (r == -ETIMEDOUT)
+ continue;
+
if (r == -EBADMSG) {
puts("Bad input, please try again.");
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);
}
r = isatty(fd);
- if (r < 0) {
- safe_close(fd);
- return -errno;
- }
-
- if (!r) {
+ if (r == 0) {
safe_close(fd);
return -ENOTTY;
}
safe_close(fd);
return -ENOTTY;
}
@@
-462,7
+464,7
@@
int acquire_terminal(
goto fail;
}
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;
if (r < 0)
goto fail;
@@
-792,7
+794,7
@@
bool tty_is_vc_resolve(const char *tty) {
}
const char *default_term_for_tty(const char *tty) {
}
const char *default_term_for_tty(const char *tty) {
- return tty && tty_is_vc_resolve(tty) ? "
TERM=linux" : "TERM=
vt220";
+ return tty && tty_is_vc_resolve(tty) ? "
linux" : "
vt220";
}
#endif // 0
}
#endif // 0
@@
-1224,15
+1226,17
@@
bool colors_enabled(void) {
static int enabled = -1;
if (_unlikely_(enabled < 0)) {
static int enabled = -1;
if (_unlikely_(enabled < 0)) {
- const char *colors;
+#if 0 /// elogind does not allow such forcing, and we are never init!
+ int val;
-
colors = getenv
("SYSTEMD_COLORS");
- if (
colors
)
- enabled =
parse_boolean(colors) != 0
;
+
val = getenv_bool
("SYSTEMD_COLORS");
+ if (
val >= 0
)
+ enabled =
val
;
else if (getpid() == 1)
/* PID1 outputs to the console without holding it open all the time */
enabled = !getenv_terminal_is_dumb();
else
else if (getpid() == 1)
/* PID1 outputs to the console without holding it open all the time */
enabled = !getenv_terminal_is_dumb();
else
+#endif // 0
enabled = !terminal_is_dumb();
}
enabled = !terminal_is_dumb();
}