X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fdbus-common.c;h=2769b2c882e2081a153934c56cdfba46b1d5514f;hp=50891a8ade4dbcde6e80e9746904d69462f41330;hb=ddb88cc5b8c5896fc30a86397da6d7e14160801b;hpb=71645acac27da55d510f2e4d61cc61b4e5b93035 diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c index 50891a8ad..2769b2c88 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;