From a25457f5b7689265bd2235c4da218896e7c5c1d0 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Sat, 28 Dec 2019 12:29:19 +0100 Subject: [PATCH 1110/1760] 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 Reference: https://github.com/systemd/systemd/commit/a25457f5b7689265bd2235c4da218896e7c5c1d0 Conflict: NA --- src/systemctl/systemctl.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 20e0d45..3e4fc46 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) { -- 1.8.3.1