chiark / gitweb /
bus: add sd_bus_message_read_strv()
authorMarc-Antoine Perennou <Marc-Antoine@Perennou.com>
Tue, 5 Nov 2013 12:42:25 +0000 (21:42 +0900)
committerLennart Poettering <lennart@poettering.net>
Tue, 5 Nov 2013 17:12:18 +0000 (18:12 +0100)
It will be useful to have that in the public API.

src/libsystemd-bus/bus-message.c
src/systemd/sd-bus.h

index 7a4c65d68927d3661e6dc75d1ceb22e8721db2d5..96d177823584f1fb32fecd9842c913b26d700ec5 100644 (file)
@@ -4486,7 +4486,7 @@ int bus_message_read_strv_extend(sd_bus_message *m, char ***l) {
         assert(l);
 
         r = sd_bus_message_enter_container(m, 'a', "s");
-        if (r < 0)
+        if (r <= 0)
                 return r;
 
         for (;;) {
@@ -4510,6 +4510,24 @@ int bus_message_read_strv_extend(sd_bus_message *m, char ***l) {
         return 0;
 }
 
+int sd_bus_message_read_strv(sd_bus_message *m, char ***l) {
+        char **strv = NULL;
+        int r;
+
+        assert_return(m, -EINVAL);
+        assert_return(m->sealed, -EPERM);
+        assert_return(l, -EINVAL);
+
+        r = bus_message_read_strv_extend(m, &strv);
+        if (r <= 0) {
+                strv_free(strv);
+                return r;
+        }
+
+        *l = strv;
+        return 1;
+}
+
 const char* bus_message_get_arg(sd_bus_message *m, unsigned i) {
         int r;
         const char *t = NULL;
index e0a604111dab772cadee27bfa8f154f61dce7ee0..c6f940904c9670e9be2ad2fd7207e3c5eeca5197 100644 (file)
@@ -197,6 +197,7 @@ int sd_bus_message_copy(sd_bus_message *m, sd_bus_message *source, int all);
 int sd_bus_message_read(sd_bus_message *m, const char *types, ...);
 int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);
 int sd_bus_message_read_array(sd_bus_message *m, char type, const void **ptr, size_t *size);
+int sd_bus_message_read_strv(sd_bus_message *m, char ***l);
 int sd_bus_message_skip(sd_bus_message *m, const char *types);
 int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *contents);
 int sd_bus_message_exit_container(sd_bus_message *m);