diff options
author | Marc-Antoine Perennou <Marc-Antoine@Perennou.com> | 2013-11-05 21:42:25 +0900 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-11-05 18:12:18 +0100 |
commit | 4686d1b6ee73f1e0cea25f621561b668aa2d6651 (patch) | |
tree | 9e859c285f28ff4db660c2133c32e2d13b940077 | |
parent | b3451bed41453304735b68726571d49fb676d466 (diff) |
bus: add sd_bus_message_read_strv()
It will be useful to have that in the public API.
-rw-r--r-- | src/libsystemd-bus/bus-message.c | 20 | ||||
-rw-r--r-- | src/systemd/sd-bus.h | 1 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index 7a4c65d689..96d1778235 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -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; diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h index e0a604111d..c6f940904c 100644 --- a/src/systemd/sd-bus.h +++ b/src/systemd/sd-bus.h @@ -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); |