summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemctl.xml5
-rw-r--r--src/systemctl/systemctl.c25
2 files changed, 22 insertions, 8 deletions
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 1a55522b12..683f2e7402 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -120,10 +120,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<para>When showing unit/job/manager properties, limit
display to certain properties as specified as argument. If
not specified all set properties are shown. The argument
- should be a property name, such as
+ should be a comma-seperated list of property names, such as
<literal>MainPID</literal>. If specified more than once all
- properties with the specified names are
- shown.</para>
+ properties with the specified names are shown.</para>
</listitem>
</varlistentry>
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index ddf46b66d5..509651c1fd 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -4394,18 +4394,33 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
log_info("Use -t help to see a list of allowed values.");
return -EINVAL;
case 'p': {
- char **l;
+ char *word, *state;
+ size_t size;
+ /* Make sure that if the empty property list
+ was specified, we won't show any properties. */
+ const char *source = isempty(optarg) ? " " : optarg;
+
+ FOREACH_WORD_SEPARATOR(word, size, source, ",", state) {
+ char _cleanup_free_ *prop;
+ char **tmp;
+
+ prop = strndup(word, size);
+ if (!prop)
+ return -ENOMEM;
- if (!(l = strv_append(arg_property, optarg)))
- return -ENOMEM;
+ tmp = strv_append(arg_property, prop);
+ if (!tmp)
+ return -ENOMEM;
- strv_free(arg_property);
- arg_property = l;
+ strv_free(arg_property);
+ arg_property = tmp;
+ }
/* If the user asked for a particular
* property, show it to him, even if it is
* empty. */
arg_all = true;
+
break;
}