chiark / gitweb /
Revert "Revert "sd-bus: change serialization of kdbus messages to qualify in their...
[elogind.git] / src / libsystemd / sd-bus / test-bus-chat.c
index 021379f0b0dadb54fa8842e3c36160a4ce867910..8625ee6d89bee867291bd637bb7b1a10b6a0c816 100644 (file)
@@ -19,7 +19,6 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-#include <assert.h>
 #include <stdlib.h>
 #include <pthread.h>
 #include <unistd.h>
@@ -44,7 +43,7 @@ static int match_callback(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus
 static int object_callback(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
         int r;
 
-        assert(bus);
+        assert_se(bus);
 
         if (sd_bus_message_is_method_error(m, NULL))
                 return 0;
@@ -53,10 +52,8 @@ static int object_callback(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bu
                 log_info("Invoked Foobar() on %s", sd_bus_message_get_path(m));
 
                 r = sd_bus_reply_method_return(m, NULL);
-                if (r < 0) {
-                        log_error("Failed to send reply: %s", strerror(-r));
-                        return r;
-                }
+                if (r < 0)
+                        return log_error_errno(r, "Failed to send reply: %m");
 
                 return 1;
         }
@@ -70,23 +67,23 @@ static int server_init(sd_bus **_bus) {
         int r;
         const char *unique;
 
-        assert(_bus);
+        assert_se(_bus);
 
         r = sd_bus_open_user(&bus);
         if (r < 0) {
-                log_error("Failed to connect to user bus: %s", strerror(-r));
+                log_error_errno(r, "Failed to connect to user bus: %m");
                 goto fail;
         }
 
-        r = sd_bus_get_server_id(bus, &id);
+        r = sd_bus_get_bus_id(bus, &id);
         if (r < 0) {
-                log_error("Failed to get server ID: %s", strerror(-r));
+                log_error_errno(r, "Failed to get server ID: %m");
                 goto fail;
         }
 
         r = sd_bus_get_unique_name(bus, &unique);
         if (r < 0) {
-                log_error("Failed to get unique name: %s", strerror(-r));
+                log_error_errno(r, "Failed to get unique name: %m");
                 goto fail;
         }
 
@@ -96,25 +93,25 @@ static int server_init(sd_bus **_bus) {
 
         r = sd_bus_request_name(bus, "org.freedesktop.systemd.test", 0);
         if (r < 0) {
-                log_error("Failed to acquire name: %s", strerror(-r));
+                log_error_errno(r, "Failed to acquire name: %m");
                 goto fail;
         }
 
-        r = sd_bus_add_fallback(bus, "/foo/bar", object_callback, NULL);
+        r = sd_bus_add_fallback(bus, NULL, "/foo/bar", object_callback, NULL);
         if (r < 0) {
-                log_error("Failed to add object: %s", strerror(-r));
+                log_error_errno(r, "Failed to add object: %m");
                 goto fail;
         }
 
-        r = sd_bus_add_match(bus, "type='signal',interface='foo.bar',member='Notify'", match_callback, NULL);
+        r = sd_bus_add_match(bus, NULL, "type='signal',interface='foo.bar',member='Notify'", match_callback, NULL);
         if (r < 0) {
-                log_error("Failed to add match: %s", strerror(-r));
+                log_error_errno(r, "Failed to add match: %m");
                 goto fail;
         }
 
-        r = sd_bus_add_match(bus, "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'", match_callback, NULL);
+        r = sd_bus_add_match(bus, NULL, "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'", match_callback, NULL);
         if (r < 0) {
-                log_error("Failed to add match: %s", strerror(-r));
+                log_error_errno(r, "Failed to add match: %m");
                 goto fail;
         }
 
@@ -141,14 +138,14 @@ static int server(sd_bus *bus) {
 
                 r = sd_bus_process(bus, &m);
                 if (r < 0) {
-                        log_error("Failed to process requests: %s", strerror(-r));
+                        log_error_errno(r, "Failed to process requests: %m");
                         goto fail;
                 }
 
                 if (r == 0) {
                         r = sd_bus_wait(bus, (uint64_t) -1);
                         if (r < 0) {
-                                log_error("Failed to wait: %s", strerror(-r));
+                                log_error_errno(r, "Failed to wait: %m");
                                 goto fail;
                         }
 
@@ -160,9 +157,9 @@ static int server(sd_bus *bus) {
 
                 sd_bus_creds_get_pid(sd_bus_message_get_creds(m), &pid);
                 sd_bus_creds_get_selinux_context(sd_bus_message_get_creds(m), &label);
-                log_info("Got message! member=%s pid=%lu label=%s",
+                log_info("Got message! member=%s pid="PID_FMT" label=%s",
                          strna(sd_bus_message_get_member(m)),
-                         (unsigned long) pid,
+                         pid,
                          strna(label));
                 /* bus_message_dump(m); */
                 /* sd_bus_message_rewind(m, true); */
@@ -173,7 +170,7 @@ static int server(sd_bus *bus) {
 
                         r = sd_bus_message_read(m, "s", &hello);
                         if (r < 0) {
-                                log_error("Failed to get parameter: %s", strerror(-r));
+                                log_error_errno(r, "Failed to get parameter: %m");
                                 goto fail;
                         }
 
@@ -187,14 +184,14 @@ static int server(sd_bus *bus) {
 
                         r = sd_bus_reply_method_return(m, "s", lowercase);
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
                 } else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient1")) {
 
                         r = sd_bus_reply_method_return(m, NULL);
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
 
@@ -203,7 +200,7 @@ static int server(sd_bus *bus) {
 
                         r = sd_bus_reply_method_return(m, NULL);
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
 
@@ -214,7 +211,7 @@ static int server(sd_bus *bus) {
 
                         r = sd_bus_reply_method_return(m, NULL);
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
 
@@ -224,21 +221,21 @@ static int server(sd_bus *bus) {
 
                         r = sd_bus_message_read(m, "h", &fd);
                         if (r < 0) {
-                                log_error("Failed to get parameter: %s", strerror(-r));
+                                log_error_errno(r, "Failed to get parameter: %m");
                                 goto fail;
                         }
 
                         log_info("Received fd=%d", fd);
 
                         if (write(fd, &x, 1) < 0) {
-                                log_error("Failed to write to fd: %m");
-                                close_nointr_nofail(fd);
+                                log_error_errno(errno, "Failed to write to fd: %m");
+                                safe_close(fd);
                                 goto fail;
                         }
 
                         r = sd_bus_reply_method_return(m, NULL);
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
 
@@ -248,7 +245,7 @@ static int server(sd_bus *bus) {
                                         m,
                                         &SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_UNKNOWN_METHOD, "Unknown method."));
                         if (r < 0) {
-                                log_error("Failed to send reply: %s", strerror(-r));
+                                log_error_errno(r, "Failed to send reply: %m");
                                 goto fail;
                         }
                 }
@@ -276,7 +273,7 @@ static void* client1(void*p) {
 
         r = sd_bus_open_user(&bus);
         if (r < 0) {
-                log_error("Failed to connect to user bus: %s", strerror(-r));
+                log_error_errno(r, "Failed to connect to user bus: %m");
                 goto finish;
         }
 
@@ -291,20 +288,20 @@ static void* client1(void*p) {
                         "s",
                         "HELLO");
         if (r < 0) {
-                log_error("Failed to issue method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to issue method call: %m");
                 goto finish;
         }
 
         r = sd_bus_message_read(reply, "s", &hello);
         if (r < 0) {
-                log_error("Failed to get string: %s", strerror(-r));
+                log_error_errno(r, "Failed to get string: %m");
                 goto finish;
         }
 
-        assert(streq(hello, "hello"));
+        assert_se(streq(hello, "hello"));
 
         if (pipe2(pp, O_CLOEXEC|O_NONBLOCK) < 0) {
-                log_error("Failed to allocate pipe: %m");
+                log_error_errno(errno, "Failed to allocate pipe: %m");
                 r = -errno;
                 goto finish;
         }
@@ -322,7 +319,7 @@ static void* client1(void*p) {
                         "h",
                         pp[1]);
         if (r < 0) {
-                log_error("Failed to issue method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to issue method call: %m");
                 goto finish;
         }
 
@@ -340,13 +337,13 @@ finish:
 
                 r = sd_bus_message_new_method_call(
                                 bus,
+                                &q,
                                 "org.freedesktop.systemd.test",
                                 "/",
                                 "org.freedesktop.systemd.test",
-                                "ExitClient1",
-                                &q);
+                                "ExitClient1");
                 if (r < 0)
-                        log_error("Failed to allocate method call: %s", strerror(-r));
+                        log_error_errno(r, "Failed to allocate method call: %m");
                 else
                         sd_bus_send(bus, q, NULL);
 
@@ -356,7 +353,7 @@ finish:
 
         sd_bus_error_free(&error);
 
-        close_pipe(pp);
+        safe_close_pair(pp);
 
         return INT_TO_PTR(r);
 }
@@ -380,19 +377,19 @@ static void* client2(void*p) {
 
         r = sd_bus_open_user(&bus);
         if (r < 0) {
-                log_error("Failed to connect to user bus: %s", strerror(-r));
+                log_error_errno(r, "Failed to connect to user bus: %m");
                 goto finish;
         }
 
         r = sd_bus_message_new_method_call(
                         bus,
+                        &m,
                         "org.freedesktop.systemd.test",
                         "/foo/bar/waldo/piep",
                         "org.object.test",
-                        "Foobar",
-                        &m);
+                        "Foobar");
         if (r < 0) {
-                log_error("Failed to allocate method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to allocate method call: %m");
                 goto finish;
         }
 
@@ -407,12 +404,12 @@ static void* client2(void*p) {
 
         r = sd_bus_message_new_signal(
                         bus,
+                        &m,
                         "/foobar",
                         "foo.bar",
-                        "Notify",
-                        &m);
+                        "Notify");
         if (r < 0) {
-                log_error("Failed to allocate signal: %s", strerror(-r));
+                log_error_errno(r, "Failed to allocate signal: %m");
                 goto finish;
         }
 
@@ -427,13 +424,13 @@ static void* client2(void*p) {
 
         r = sd_bus_message_new_method_call(
                         bus,
+                        &m,
                         "org.freedesktop.systemd.test",
                         "/",
                         "org.freedesktop.DBus.Peer",
-                        "GetMachineId",
-                        &m);
+                        "GetMachineId");
         if (r < 0) {
-                log_error("Failed to allocate method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to allocate method call: %m");
                 goto finish;
         }
 
@@ -445,7 +442,7 @@ static void* client2(void*p) {
 
         r = sd_bus_message_read(reply, "s", &mid);
         if (r < 0) {
-                log_error("Failed to parse machine ID: %s", strerror(-r));
+                log_error_errno(r, "Failed to parse machine ID: %m");
                 goto finish;
         }
 
@@ -456,13 +453,13 @@ static void* client2(void*p) {
 
         r = sd_bus_message_new_method_call(
                         bus,
+                        &m,
                         "org.freedesktop.systemd.test",
                         "/",
                         "org.freedesktop.systemd.test",
-                        "Slow",
-                        &m);
+                        "Slow");
         if (r < 0) {
-                log_error("Failed to allocate method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to allocate method call: %m");
                 goto finish;
         }
 
@@ -480,17 +477,17 @@ static void* client2(void*p) {
 
         r = sd_bus_message_new_method_call(
                         bus,
+                        &m,
                         "org.freedesktop.systemd.test",
                         "/",
                         "org.freedesktop.systemd.test",
-                        "Slow",
-                        &m);
+                        "Slow");
         if (r < 0) {
-                log_error("Failed to allocate method call: %s", strerror(-r));
+                log_error_errno(r, "Failed to allocate method call: %m");
                 goto finish;
         }
 
-        r = sd_bus_call_async(bus, m, quit_callback, &quit, 200 * USEC_PER_MSEC, NULL);
+        r = sd_bus_call_async(bus, NULL, m, quit_callback, &quit, 200 * USEC_PER_MSEC);
         if (r < 0) {
                 log_info("Failed to issue method call: %s", bus_error_message(&error, -r));
                 goto finish;
@@ -499,13 +496,13 @@ static void* client2(void*p) {
         while (!quit) {
                 r = sd_bus_process(bus, NULL);
                 if (r < 0) {
-                        log_error("Failed to process requests: %s", strerror(-r));
+                        log_error_errno(r, "Failed to process requests: %m");
                         goto finish;
                 }
                 if (r == 0) {
                         r = sd_bus_wait(bus, (uint64_t) -1);
                         if (r < 0) {
-                                log_error("Failed to wait: %s", strerror(-r));
+                                log_error_errno(r, "Failed to wait: %m");
                                 goto finish;
                         }
                 }
@@ -519,13 +516,13 @@ finish:
 
                 r = sd_bus_message_new_method_call(
                                 bus,
+                                &q,
                                 "org.freedesktop.systemd.test",
                                 "/",
                                 "org.freedesktop.systemd.test",
-                                "ExitClient2",
-                                &q);
+                                "ExitClient2");
                 if (r < 0) {
-                        log_error("Failed to allocate method call: %s", strerror(-r));
+                        log_error_errno(r, "Failed to allocate method call: %m");
                         goto finish;
                 }