They will soon be used in systemctl --- src/analyze/analyze.c | 68 +++---------------------------------------- src/libsystemd-bus/bus-util.c | 49 +++++++++++++++++++++++++++++++ src/libsystemd-bus/bus-util.h | 17 +++++++++++ 3 files changed, 70 insertions(+), 64 deletions(-)
diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index e149b15..19e6508 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -89,19 +89,6 @@ struct boot_times { usec_t unitsload_finish_time; }; -struct unit_info { - const char *id; - const char *description; - const char *load_state; - const char *active_state; - const char *sub_state; - const char *following; - const char *unit_path; - uint32_t job_id; - const char *job_type; - const char *job_path; -}; - struct unit_times { char *name; usec_t activating; @@ -146,31 +133,6 @@ static int bus_get_uint64_property(sd_bus *bus, const char *path, const char *in return 0; } -static int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv) { - _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - int r; - - assert(bus); - assert(path); - assert(property); - assert(strv); - - r = sd_bus_get_property_strv( - bus, - "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Unit", - property, - &error, - strv); - if (r < 0) { - log_error("Failed to get unit property %s: %s", property, bus_error_message(&error, -r)); - return r; - } - - return 0; -} - static int compare_unit_time(const void *a, const void *b) { return compare(((struct unit_times *)b)->time, ((struct unit_times *)a)->time); @@ -205,34 +167,12 @@ static void free_unit_times(struct unit_times *t, unsigned n) { free(t); } -static int bus_parse_unit_info(sd_bus_message *message, struct unit_info *u) { - int r = 0; - - assert(message); - assert(u); - - r = sd_bus_message_read(message, "(ssssssouso)", &u->id, - &u->description, - &u->load_state, - &u->active_state, - &u->sub_state, - &u->following, - &u->unit_path, - &u->job_id, - &u->job_type, - &u->job_path); - if (r < 0) - return bus_log_parse_error(r); - - return r; -} - static int acquire_time_data(sd_bus *bus, struct unit_times **out) { _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; int r, c = 0, n_units = 0; struct unit_times *unit_times = NULL; - struct unit_info u; + struct unit_info u = {}; r = sd_bus_call_method( bus, @@ -253,7 +193,7 @@ static int acquire_time_data(sd_bus *bus, struct unit_times **out) { goto fail; } - while ((r = bus_parse_unit_info(reply, &u)) > 0) { + while ((r = bus_message_read_unit_info(reply, &u)) > 0) { struct unit_times *t; if (r < 0) @@ -1027,8 +967,8 @@ static int graph_one(sd_bus *bus, const struct unit_info *u, char *patterns[]) { static int dot(sd_bus *bus, char* patterns[]) { _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; + struct unit_info u = {}; int r; - struct unit_info u; r = sd_bus_call_method( bus, @@ -1050,7 +990,7 @@ static int dot(sd_bus *bus, char* patterns[]) { printf("digraph systemd {\n"); - while ((r = bus_parse_unit_info(reply, &u)) > 0) { + while ((r = bus_message_read_unit_info(reply, &u)) > 0) { r = graph_one(bus, &u, patterns); if (r < 0) return r; diff --git a/src/libsystemd-bus/bus-util.c b/src/libsystemd-bus/bus-util.c index ae9733d..3959972 100644 --- a/src/libsystemd-bus/bus-util.c +++ b/src/libsystemd-bus/bus-util.c @@ -958,3 +958,52 @@ int bus_log_parse_error(int r) { log_error("Failed to parse message: %s", strerror(-r)); return r; } + +int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv) { + _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; + int r; + + assert(bus); + assert(path); + assert(property); + assert(strv); + + r = sd_bus_get_property_strv( + bus, + "org.freedesktop.systemd1", + path, + "org.freedesktop.systemd1.Unit", + property, + &error, + strv); + if (r < 0) { + log_error("Failed to get unit property %s: %s", property, bus_error_message(&error, -r)); + return r; + } + + return 0; +} + +int bus_message_read_unit_info(sd_bus_message *m, struct unit_info *u) { + int r; + + assert(m); + assert(u); + + r = sd_bus_message_read(m, "(ssssssouso)", &u->id, + &u->description, + &u->load_state, + &u->active_state, + &u->sub_state, + &u->following, + &u->unit_path, + &u->job_id, + &u->job_type, + &u->job_path); + if (r < 0) { + log_error("Failed to parse message as unit_info."); + return -EIO; + } + + return r; +} diff --git a/src/libsystemd-bus/bus-util.h b/src/libsystemd-bus/bus-util.h index 5f0a0b3..9cdf3fc 100644 --- a/src/libsystemd-bus/bus-util.h +++ b/src/libsystemd-bus/bus-util.h @@ -75,6 +75,23 @@ int bus_property_get_uid(sd_bus *bus, const char *path, const char *interface, c #define bus_property_get_gid bus_property_get_uid #define bus_property_get_pid bus_property_get_uid +int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv); + +struct unit_info { + const char *id; + const char *description; + const char *load_state; + const char *active_state; + const char *sub_state; + const char *following; + const char *unit_path; + uint32_t job_id; + const char *job_type; + const char *job_path; +}; + +int bus_message_read_unit_info(sd_bus_message *m, struct unit_info *u); + int bus_log_parse_error(int r); DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, sd_bus_unref); -- 1.8.4.2 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel