From: Frantisek Sumsal Date: Sat, 28 Dec 2019 11:29:19 +0000 (+0100) Subject: systemctl: skip non-existent units in the 'cat' verb X-Git-Tag: v245-rc1~204 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a25457f5b7689265bd2235c4da218896e7c5c1d0;p=thirdparty%2Fsystemd.git 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 --- diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 20e0d453d2a..3e4fc46154d 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) {