chiark / gitweb /
systemctl: allow comma sepearted property lists
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 16 Feb 2013 22:20:28 +0000 (17:20 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 16 Feb 2013 22:36:00 +0000 (17:36 -0500)
man/systemctl.xml
src/systemctl/systemctl.c

index 1a55522..683f2e7 100644 (file)
@@ -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>
 
index ddf46b6..509651c 100644 (file)
@@ -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;
                 }