chiark / gitweb /
unit-name: introduce unit_dbus_path_from_name()
authorMichal Schmidt <mschmidt@redhat.com>
Wed, 13 Jun 2012 16:22:08 +0000 (18:22 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Wed, 13 Jun 2012 16:42:02 +0000 (18:42 +0200)
Use the same function in core and in systemctl.
get_unit_path() in systemctl becomes unnecessary.

src/core/unit.c
src/shared/unit-name.c
src/shared/unit-name.h
src/systemctl/systemctl.c

index f53bdd5a911addb49980da9af5a94fa5042a8e77..4cffc57793723c612cf1303bd5e0c702e28625e3 100644 (file)
@@ -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) {
index 1440d2f2eac59ca4271c476c13e9d56cb8f5144c..91f464ee9ce8f7b84c0fdeffe5f2ace92eba867c 100644 (file)
@@ -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;
+}
index 4dfb9fa3ce922f8c2b5b681f8e484544d1bee819..7aab2e557de5f21537924b021cac646ae3a84063 100644 (file)
@@ -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
index 223e862a5390b5e93a4c2f166ee2740720960e40..ae6113089d0c297b4fa6402eabcc551b1531afc9 100644 (file)
@@ -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;