chiark / gitweb /
basic/cgroup-util: simplify cg_get_keyed_attribute(), add test
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 1 Mar 2018 08:30:55 +0000 (09:30 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 30 May 2018 05:59:10 +0000 (07:59 +0200)
I didn't like the nested loop where we'd count what we have acquired already,
since we should always know that.

src/basic/cgroup-util.c

index 9e5c540c6fc9fb8dc1a39e9b6d045a5dab92f5c0..452a8e2f7e333b8f78993637e0ad7cbe362335ae 100644 (file)
@@ -2148,7 +2148,7 @@ int cg_get_keyed_attribute(
         _cleanup_free_ char *filename = NULL, *contents = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         const char *p;
-        size_t n, i;
+        size_t n, i, n_done = 0;
         char **v;
         int r;
 
@@ -2175,42 +2175,31 @@ int cg_get_keyed_attribute(
 
         for (p = contents; *p;) {
                 const char *w = NULL;
-                size_t n_done = 0;
 
-                for (i = 0; i < n; i++) {
-                        if (v[i])
-                                n_done ++;
-                        else {
+                for (i = 0; i < n; i++)
+                        if (!v[i]) {
                                 w = first_word(p, keys[i]);
                                 if (w)
                                         break;
                         }
-                }
 
                 if (w) {
-                        char *c;
                         size_t l;
 
                         l = strcspn(w, NEWLINE);
-                        c = strndup(w, l);
-                        if (!c) {
+                        v[i] = strndup(w, l);
+                        if (!v[i]) {
                                 r = -ENOMEM;
                                 goto fail;
                         }
 
-                        v[i] = c;
                         n_done++;
-
                         if (n_done >= n)
                                 goto done;
 
                         p = w + l;
-                } else {
-                        if (n_done >= n)
-                                goto done;
-
+                } else
                         p += strcspn(p, NEWLINE);
-                }
 
                 p += strspn(p, NEWLINE);
         }