From c8f3b9555450327afc0d18f3eb1a4d3701232df1 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Perennou Date: Thu, 31 Jan 2013 09:50:21 +0100 Subject: [PATCH 2/5] dbus: introduce parse_unit_info Signed-off-by: Marc-Antoine Perennou --- src/shared/dbus-common.c | 28 ++++++++++++++++++++++++++++ src/shared/dbus-common.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c index 50891a8..2769b2c 100644 --- a/src/shared/dbus-common.c +++ b/src/shared/dbus-common.c @@ -988,6 +988,34 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { return 0; } +int bus_parse_unit_info(DBusMessageIter *iter, struct unit_info *u) { + DBusMessageIter sub; + + assert(iter); + assert(u); + + if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRUCT) + return -EINVAL; + + dbus_message_iter_recurse(iter, &sub); + + if (bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->id, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->description, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->load_state, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->active_state, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->sub_state, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->following, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_OBJECT_PATH, &u->unit_path, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_UINT32, &u->job_id, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_STRING, &u->job_type, true) < 0 || + bus_iter_get_basic_and_next(&sub, DBUS_TYPE_OBJECT_PATH, &u->job_path, false) < 0) { + log_error("Failed to parse reply."); + return -EIO; + } + + return 0; +} + int bus_append_strv_iter(DBusMessageIter *iter, char **l) { DBusMessageIter sub; diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h index 800c0ea..f7f614c 100644 --- a/src/shared/dbus-common.h +++ b/src/shared/dbus-common.h @@ -212,6 +212,8 @@ struct unit_info { const char *job_path; }; +int bus_parse_unit_info(DBusMessageIter *iter, struct unit_info *u); + int bus_append_strv_iter(DBusMessageIter *iter, char **l); int bus_iter_get_basic_and_next(DBusMessageIter *iter, int type, void *data, bool next); -- 1.8.1.1