diff options
author | Franck Bui <fbui@suse.com> | 2016-11-07 17:14:59 +0100 |
---|---|---|
committer | Franck Bui <fbui@suse.com> | 2016-11-17 18:16:50 +0100 |
commit | 2bcd3c26fe2a21cf1541a2850350194b3cdf5e83 (patch) | |
tree | e8a6830710e1e154046edc70b93f4a11872e3374 /src | |
parent | 3c670f8998a34e99f0981622f57350b974448887 (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.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/execute.c | 10 |
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; |