diff options
author | Frantisek Sumsal <frantisek@sumsal.cz> | 2019-12-28 12:29:19 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2020-01-02 15:27:25 +0100 |
commit | a25457f5b7689265bd2235c4da218896e7c5c1d0 (patch) | |
tree | 9b704fdd7e11e8e76622a05030337f90d2db92c4 /src/systemctl | |
parent | 49d418d4ab52206143c8e598c82b5c7843306d2b (diff) | |
download | systemd-a25457f5b7689265bd2235c4da218896e7c5c1d0.tar.gz |
systemctl: skip non-existent units in the 'cat' verb
When processing list of units (either provided manually or as a
wildcard), let's skip units for which we don't have an on-disk
counterpart, but note the -ENOENT error code and propagate it back to
the user.
Fixes: #14082
Diffstat (limited to 'src/systemctl')
-rw-r--r-- | src/systemctl/systemctl.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 20e0d453d2..3e4fc46154 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -5937,7 +5937,7 @@ static int cat(int argc, char *argv[], void *userdata) { char **name; sd_bus *bus; bool first = true; - int r; + int r, rc = 0; /* Include all units by default — i.e. continue as if the --all * option was used */ @@ -5982,8 +5982,12 @@ static int cat(int argc, char *argv[], void *userdata) { } if (r < 0) return r; - if (r == 0) - return -ENOENT; + if (r == 0) { + /* Skip units which have no on-disk counterpart, but + * propagate the error to the user */ + rc = -ENOENT; + continue; + } if (first) first = false; @@ -6009,7 +6013,7 @@ static int cat(int argc, char *argv[], void *userdata) { return r; } - return 0; + return rc; } static int set_property(int argc, char *argv[], void *userdata) { |