]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: Use extract_first_word in config_parse_join_controllers
authorFilipe Brandenburger <filbranden@google.com>
Mon, 31 Aug 2015 04:00:30 +0000 (21:00 -0700)
committerFilipe Brandenburger <filbranden@google.com>
Tue, 1 Sep 2015 00:33:35 +0000 (17:33 -0700)
Related to the TODO item to replace FOREACH_WORD_QUOTED with it.

Tested by setting `JoinControllers=cpu,cpuacct,memory net_cls,blkio' in
/etc/systemd/system.conf, rebooting the system with the patched binaries
and checking that the desired setup was created by inspecting the
entries under /sys/fs/cgroup.

No regressions observed in test cases.

src/core/main.c

index e232be88c015ebadd0a0c4866b8663eec8db64d0..e5d9ec1a4ed289db6d04e3ac146dd8d74485961c 100644 (file)
@@ -539,8 +539,6 @@ static int config_parse_join_controllers(const char *unit,
                                          void *userdata) {
 
         unsigned n = 0;
-        const char *word, *state;
-        size_t length;
 
         assert(filename);
         assert(lvalue);
@@ -548,16 +546,18 @@ static int config_parse_join_controllers(const char *unit,
 
         free_join_controllers();
 
-        FOREACH_WORD_QUOTED(word, length, rvalue, state) {
-                char *s, **l;
-
-                s = strndup(word, length);
-                if (!s)
-                        return log_oom();
+        for (;;) {
+                _cleanup_free_ char *word = NULL;
+                char **l;
+                int r;
 
-                l = strv_split(s, ",");
-                free(s);
+                r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES);
+                if (r < 0)
+                        return r;
+                if (r == 0)
+                        break;
 
+                l = strv_split(word, ",");
                 strv_uniq(l);
 
                 if (strv_length(l) <= 1) {
@@ -617,7 +617,7 @@ static int config_parse_join_controllers(const char *unit,
                         arg_join_controllers = t;
                 }
         }
-        if (!isempty(state))
+        if (!isempty(rvalue))
                 log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                            "Trailing garbage, ignoring.");