sd-bus: use _cleanup_ for struct introspect
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 19 Apr 2019 09:28:36 +0000 (11:28 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 23 Apr 2019 10:23:15 +0000 (12:23 +0200)
src/libsystemd/sd-bus/bus-objects.c
src/libsystemd/sd-bus/test-bus-introspect.c

index 7053471..650cee6 100644 (file)
@@ -894,7 +894,7 @@ static int process_introspect(
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_set_free_free_ Set *s = NULL;
         const char *previous_interface = NULL;
-        struct introspect intro;
+        _cleanup_(introspect_free) struct introspect intro = {};
         struct node_vtable *c;
         bool empty;
         int r;
@@ -925,14 +925,10 @@ static int process_introspect(
                         continue;
 
                 r = node_vtable_get_userdata(bus, m->path, c, NULL, &error);
-                if (r < 0) {
-                        r = bus_maybe_reply_error(m, r, &error);
-                        goto finish;
-                }
-                if (bus->nodes_modified) {
-                        r = 0;
-                        goto finish;
-                }
+                if (r < 0)
+                        return bus_maybe_reply_error(m, r, &error);
+                if (bus->nodes_modified)
+                        return 0;
                 if (r == 0)
                         continue;
 
@@ -942,7 +938,6 @@ static int process_introspect(
                         continue;
 
                 if (!streq_ptr(previous_interface, c->interface)) {
-
                         if (previous_interface)
                                 fputs(" </interface>\n", intro.f);
 
@@ -951,7 +946,7 @@ static int process_introspect(
 
                 r = introspect_write_interface(&intro, c->vtable);
                 if (r < 0)
-                        goto finish;
+                        return r;
 
                 previous_interface = c->interface;
         }
@@ -963,35 +958,27 @@ static int process_introspect(
                 /* Nothing?, let's see if we exist at all, and if not
                  * refuse to do anything */
                 r = bus_node_exists(bus, n, m->path, require_fallback);
-                if (r <= 0) {
-                        r = bus_maybe_reply_error(m, r, &error);
-                        goto finish;
-                }
-                if (bus->nodes_modified) {
-                        r = 0;
-                        goto finish;
-                }
+                if (r <= 0)
+                        return bus_maybe_reply_error(m, r, &error);
+                if (bus->nodes_modified)
+                        return 0;
         }
 
         *found_object = true;
 
         r = introspect_write_child_nodes(&intro, s, m->path);
         if (r < 0)
-                goto finish;
+                return r;
 
         r = introspect_finish(&intro, bus, m, &reply);
         if (r < 0)
-                goto finish;
+                return r;
 
         r = sd_bus_send(bus, reply, NULL);
         if (r < 0)
-                goto finish;
-
-        r = 1;
+                return r;
 
-finish:
-        introspect_free(&intro);
-        return r;
+        return 1;
 }
 
 static int object_manager_serialize_path(
index 9c8e93e..968de40 100644 (file)
@@ -28,7 +28,7 @@ static const sd_bus_vtable vtable[] = {
 };
 
 int main(int argc, char *argv[]) {
-        struct introspect intro;
+        _cleanup_(introspect_free) struct introspect intro = {};
 
         test_setup_logging(LOG_DEBUG);
 
@@ -41,7 +41,5 @@ int main(int argc, char *argv[]) {
         fflush(intro.f);
         fputs(intro.introspection, stdout);
 
-        introspect_free(&intro);
-
         return 0;
 }