]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
busctl: use set_put_strdup()
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 24 May 2020 10:30:55 +0000 (12:30 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 25 May 2020 09:09:21 +0000 (11:09 +0200)
src/busctl/busctl.c

index 7aceb1796f1621c56e2fde5c50792cd9e1a592e3..eab418d21926b7a004662a3a701bd1b3da614e13 100644 (file)
@@ -496,33 +496,22 @@ static int find_nodes(sd_bus *bus, const char *service, const char *path, Set *p
 }
 
 static int tree_one(sd_bus *bus, const char *service, const char *prefix, bool many) {
-        _cleanup_set_free_free_ Set *paths = NULL, *done = NULL, *failed = NULL;
+        _cleanup_set_free_ Set *paths = NULL, *done = NULL, *failed = NULL;
         _cleanup_free_ char **l = NULL;
-        char *m;
         int r;
 
-        paths = set_new(&string_hash_ops);
-        if (!paths)
+        r = set_put_strdup(&paths, "/");
+        if (r < 0)
                 return log_oom();
 
-        done = set_new(&string_hash_ops);
+        done = set_new(&string_hash_ops_free);
         if (!done)
                 return log_oom();
 
-        failed = set_new(&string_hash_ops);
+        failed = set_new(&string_hash_ops_free);
         if (!failed)
                 return log_oom();
 
-        m = strdup("/");
-        if (!m)
-                return log_oom();
-
-        r = set_put(paths, m);
-        if (r < 0) {
-                free(m);
-                return log_oom();
-        }
-
         for (;;) {
                 _cleanup_free_ char *p = NULL;
                 int q;
@@ -536,19 +525,13 @@ static int tree_one(sd_bus *bus, const char *service, const char *prefix, bool m
                         continue;
 
                 q = find_nodes(bus, service, p, paths, many);
-                if (q < 0) {
-                        if (r >= 0)
-                                r = q;
-
-                        q = set_put(failed, p);
-                } else
-                        q = set_put(done, p);
+                if (q < 0 && r >= 0)
+                        r = q;
 
+                q = set_consume(q < 0 ? failed : done, TAKE_PTR(p));
+                assert(q != 0);
                 if (q < 0)
                         return log_oom();
-
-                assert(q != 0);
-                p = NULL;
         }
 
         (void) pager_open(arg_pager_flags);
@@ -2608,7 +2591,6 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 static int busctl_main(int argc, char *argv[]) {
-
         static const Verb verbs[] = {
                 { "list",         VERB_ANY, 1,        VERB_DEFAULT, list_bus_names },
                 { "status",       VERB_ANY, 2,        0,            status         },