diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/cgroup-util.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 9e5c540c6..452a8e2f7 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -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); } |