summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranck Bui <fbui@suse.com>2016-11-07 17:14:59 +0100
committerFranck Bui <fbui@suse.com>2016-11-17 18:16:50 +0100
commit2bcd3c26fe2a21cf1541a2850350194b3cdf5e83 (patch)
treee8a6830710e1e154046edc70b93f4a11872e3374
parent3c670f8998a34e99f0981622f57350b974448887 (diff)
core: limit the length of the confirmation question
When "confirmation_spawn=1", the confirmation question can look like: Execute /usr/bin/kmod static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf? [Yes, No, Skip] which is pretty verbose and might not fit in the console width size (which is usually 80 chars) and thus question will be splitted into 2 consecutive lines. However since the question is now refreshed every 2 secs, the reprinted question will overwrite the second line of the previous one... To prevent this, this patch makes sure that the command line won't be longer than 60 chars by ellipsizing it if the command is longer: Execute /usr/bin/kmod static-nodes --format=tmpfiles --output=/ru…nf? [Yes, No, View, Skip] A following patch will introduce a new choice that will allow the user to get details on the command to be executed so it will still be possible to see the full command line.
-rw-r--r--src/core/execute.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/core/execute.c b/src/core/execute.c
index 10e9dd7cc8..0273b1966f 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -722,6 +722,7 @@ enum {
static int ask_for_confirmation(const char *vc, const char *cmdline) {
int saved_stdout = -1, saved_stdin = -1, r;
+ _cleanup_free_ char *e = NULL;
char c;
/* For any internal errors, assume a positive response. */
@@ -731,7 +732,14 @@ static int ask_for_confirmation(const char *vc, const char *cmdline) {
return CONFIRM_EXECUTE;
}
- r = ask_char(&c, "yfs", "Execute %s? [Yes, Fail, Skip] ", cmdline);
+ e = ellipsize(cmdline, 60, 100);
+ if (!e) {
+ log_oom();
+ r = CONFIRM_EXECUTE;
+ goto restore_stdio;
+ }
+
+ r = ask_char(&c, "yfs", "Execute %s? [Yes, Fail, Skip] ", e);
if (r < 0) {
write_confirm_error_fd(r, STDOUT_FILENO);
r = CONFIRM_EXECUTE;