]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
busctl: use strdup_to() and set_consume()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Apr 2025 01:04:41 +0000 (10:04 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Apr 2025 03:23:13 +0000 (12:23 +0900)
src/busctl/busctl.c

index 9a9f98c8081a99ded3f3c778eabc3ee9615d7815..924defd2673b2c6e57ec8270b57518e9a4c7bcca 100644 (file)
@@ -824,18 +824,17 @@ static int on_interface(const char *interface, uint64_t flags, void *userdata) {
                 .flags = flags,
         };
 
-        r = free_and_strdup(&m->interface, interface);
+        r = strdup_to(&m->interface, interface);
         if (r < 0)
                 return log_oom();
 
-        r = set_put(members, m);
+        r = set_consume(members, TAKE_PTR(m));
+        if (r < 0)
+                return log_oom();
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
                                        "Invalid introspection data: duplicate interface '%s'.", interface);
-        if (r < 0)
-                return log_oom();
 
-        m = NULL;
         return 0;
 }
 
@@ -856,30 +855,29 @@ static int on_method(const char *interface, const char *name, const char *signat
                 .flags = flags,
         };
 
-        r = free_and_strdup(&m->interface, interface);
+        r = strdup_to(&m->interface, interface);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->name, name);
+        r = strdup_to(&m->name, name);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->signature, signature);
+        r = strdup_to(&m->signature, signature);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->result, result);
+        r = strdup_to(&m->result, result);
         if (r < 0)
                 return log_oom();
 
-        r = set_put(members, m);
+        r = set_consume(members, TAKE_PTR(m));
+        if (r < 0)
+                return log_oom();
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
                                        "Invalid introspection data: duplicate method '%s' on interface '%s'.", name, interface);
-        if (r < 0)
-                return log_oom();
 
-        m = NULL;
         return 0;
 }
 
@@ -900,26 +898,25 @@ static int on_signal(const char *interface, const char *name, const char *signat
                 .flags = flags,
         };
 
-        r = free_and_strdup(&m->interface, interface);
+        r = strdup_to(&m->interface, interface);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->name, name);
+        r = strdup_to(&m->name, name);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->signature, signature);
+        r = strdup_to(&m->signature, signature);
         if (r < 0)
                 return log_oom();
 
-        r = set_put(members, m);
+        r = set_consume(members, TAKE_PTR(m));
+        if (r < 0)
+                return log_oom();
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
                                        "Invalid introspection data: duplicate signal '%s' on interface '%s'.", name, interface);
-        if (r < 0)
-                return log_oom();
 
-        m = NULL;
         return 0;
 }
 
@@ -941,26 +938,25 @@ static int on_property(const char *interface, const char *name, const char *sign
                 .writable = writable,
         };
 
-        r = free_and_strdup(&m->interface, interface);
+        r = strdup_to(&m->interface, interface);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->name, name);
+        r = strdup_to(&m->name, name);
         if (r < 0)
                 return log_oom();
 
-        r = free_and_strdup(&m->signature, signature);
+        r = strdup_to(&m->signature, signature);
         if (r < 0)
                 return log_oom();
 
-        r = set_put(members, m);
+        r = set_consume(members, TAKE_PTR(m));
+        if (r < 0)
+                return log_oom();
         if (r == 0)
                 return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
                                        "Invalid introspection data: duplicate property '%s' on interface '%s'.", name, interface);
-        if (r < 0)
-                return log_oom();
 
-        m = NULL;
         return 0;
 }