summaryrefslogtreecommitdiff
path: root/src/systemctl
diff options
context:
space:
mode:
authorFrantisek Sumsal <frantisek@sumsal.cz>2019-12-28 12:29:19 +0100
committerLennart Poettering <lennart@poettering.net>2020-01-02 15:27:25 +0100
commita25457f5b7689265bd2235c4da218896e7c5c1d0 (patch)
tree9b704fdd7e11e8e76622a05030337f90d2db92c4 /src/systemctl
parent49d418d4ab52206143c8e598c82b5c7843306d2b (diff)
downloadsystemd-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.c12
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) {