From 48899192a7b28b6a338cc8ec18aa35ccd8867acb Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Wed, 13 Jun 2012 18:22:08 +0200 Subject: [PATCH] unit-name: introduce unit_dbus_path_from_name() Use the same function in core and in systemctl. get_unit_path() in systemctl becomes unnecessary. --- src/core/unit.c | 10 +---- src/shared/unit-name.c | 13 +++++++ src/shared/unit-name.h | 2 + src/systemctl/systemctl.c | 81 +++------------------------------------ 4 files changed, 21 insertions(+), 85 deletions(-) diff --git a/src/core/unit.c b/src/core/unit.c index f53bdd5a911..4cffc577937 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1835,20 +1835,12 @@ int set_unit_path(const char *p) { } char *unit_dbus_path(Unit *u) { - char *p, *e; - assert(u); if (!u->id) return NULL; - if (!(e = bus_path_escape(u->id))) - return NULL; - - p = strappend("/org/freedesktop/systemd1/unit/", e); - free(e); - - return p; + return unit_dbus_path_from_name(u->id); } int unit_add_cgroup(Unit *u, CGroupBonding *b) { diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c index 1440d2f2eac..91f464ee9ce 100644 --- a/src/shared/unit-name.c +++ b/src/shared/unit-name.c @@ -458,3 +458,16 @@ char *unit_name_path_unescape(const char *f) { return e; } + +char *unit_dbus_path_from_name(const char *name) { + char *e, *p; + + e = bus_path_escape(name); + if (!e) + return NULL; + + p = strappend("/org/freedesktop/systemd1/unit/", e); + free(e); + + return p; +} diff --git a/src/shared/unit-name.h b/src/shared/unit-name.h index 4dfb9fa3ce9..7aab2e557de 100644 --- a/src/shared/unit-name.h +++ b/src/shared/unit-name.h @@ -54,4 +54,6 @@ char *unit_name_from_path(const char *path, const char *suffix); char *unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix); char *unit_name_to_path(const char *name); +char *unit_dbus_path_from_name(const char *name); + #endif diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 223e862a539..ae6113089d0 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -1500,75 +1500,6 @@ finish: return r; } -static int get_unit_path( - DBusConnection *bus, - const char *name, - char **unit_path) { - - DBusError error; - DBusMessage *m = NULL, *reply = NULL; - char *path; - int r = 0; - - assert(bus); - assert(name); - assert(unit_path); - - dbus_error_init(&error); - - m = dbus_message_new_method_call("org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager", - "GetUnit"); - if (!m) { - log_error("Could not allocate message."); - r = -ENOMEM; - goto finish; - } - - if (!dbus_message_append_args(m, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_INVALID)) { - log_error("Could not append arguments to message."); - r = -ENOMEM; - goto finish; - } - - reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error); - if (!reply) { - if (streq(error.name, BUS_ERROR_NO_SUCH_UNIT)) - r = -EINVAL; - else { - log_error("Failed to issue method call: %s", bus_error_message(&error)); - r = -EIO; - } - goto finish; - } - - if (!dbus_message_get_args(reply, &error, - DBUS_TYPE_OBJECT_PATH, &path, - DBUS_TYPE_INVALID)) { - log_error("Failed to parse reply: %s", bus_error_message(&error)); - r = -EIO; - goto finish; - } - - *unit_path = strdup(path); - if (!(*unit_path)) { - log_error("Failed to duplicate unit path"); - r = -ENOMEM; - } -finish: - if (m) - dbus_message_unref(m); - if (reply) - dbus_message_unref(reply); - - dbus_error_free(&error); - - return r; -} - static int check_one_unit(DBusConnection *bus, char *name, bool quiet) { DBusMessage *m = NULL, *reply = NULL; DBusError error; @@ -1701,8 +1632,11 @@ static void check_triggering_units( dbus_error_init(&error); - if (get_unit_path(bus, unit_name, &unit_path) < 0) + unit_path = unit_dbus_path_from_name(unit_name); + if (!unit_path) { + log_error("Could not allocate dbus path."); goto finish; + } m = dbus_message_new_method_call("org.freedesktop.systemd1", unit_path, @@ -3306,12 +3240,7 @@ static int show(DBusConnection *bus, char **args) { /* Interpret as unit name */ - char *e, *p; - e = bus_path_escape(*name); - if (!e) - return -ENOMEM; - p = strappend("/org/freedesktop/systemd1/unit/", e); - free(e); + char *p = unit_dbus_path_from_name(*name); if (!p) return -ENOMEM; -- 2.39.5