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
This commit is contained in:
Frantisek Sumsal 2019-12-28 12:29:19 +01:00 committed by Lennart Poettering
parent 49d418d4ab
commit a25457f5b7
1 changed files with 8 additions and 4 deletions

View File

@ -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) {