]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-polkit: refactor a bit to avoid goto
authorDavid Tardon <dtardon@redhat.com>
Tue, 27 Jun 2023 12:52:57 +0000 (14:52 +0200)
committerDavid Tardon <dtardon@redhat.com>
Thu, 13 Jul 2023 14:00:06 +0000 (16:00 +0200)
src/shared/bus-polkit.c

index 904d775c17800d2cef2beb8b84c39057ca508d57..8bfae41e03795b87d50c5af1fa30344fd0a06c10 100644 (file)
@@ -212,11 +212,11 @@ static int async_polkit_defer(sd_event_source *s, void *userdata) {
         return 0;
 }
 
-static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
-        AsyncPolkitQuery *q = ASSERT_PTR(userdata);
+static int async_polkit_process_reply(sd_bus_message *reply, AsyncPolkitQuery *q) {
         int r;
 
         assert(reply);
+        assert(q);
 
         assert(q->slot);
         q->slot = sd_bus_slot_unref(q->slot);
@@ -234,30 +234,39 @@ static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_e
         assert(!q->defer_event_source);
         r = sd_event_add_defer(sd_bus_get_event(sd_bus_message_get_bus(reply)), &q->defer_event_source, async_polkit_defer, q);
         if (r < 0)
-                goto fail;
+                return r;
 
         r = sd_event_source_set_priority(q->defer_event_source, SD_EVENT_PRIORITY_IDLE);
         if (r < 0)
-                goto fail;
+                return r;
 
         r = sd_event_source_set_enabled(q->defer_event_source, SD_EVENT_ONESHOT);
         if (r < 0)
-                goto fail;
+                return r;
 
         r = sd_bus_message_rewind(q->request, true);
         if (r < 0)
-                goto fail;
+                return r;
 
         r = sd_bus_enqueue_for_read(sd_bus_message_get_bus(q->request), q->request);
         if (r < 0)
-                goto fail;
+                return r;
 
         return 1;
+}
 
-fail:
-        log_debug_errno(r, "Processing asynchronous PolicyKit reply failed, ignoring: %m");
-        (void) sd_bus_reply_method_errno(q->request, r, NULL);
-        async_polkit_query_free(q);
+static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
+        AsyncPolkitQuery *q = ASSERT_PTR(userdata);
+        int r;
+
+        assert(reply);
+
+        r = async_polkit_process_reply(reply, q);
+        if (r < 0) {
+                log_debug_errno(r, "Processing asynchronous PolicyKit reply failed, ignoring: %m");
+                (void) sd_bus_reply_method_errno(q->request, r, NULL);
+                async_polkit_query_free(q);
+        }
         return r;
 }