chiark / gitweb /
core: split out unit bus path unescaping into unit_name_from_dbus_path()
authorLennart Poettering <lennart@poettering.net>
Mon, 1 Jul 2013 23:35:08 +0000 (01:35 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 1 Jul 2013 23:48:55 +0000 (01:48 +0200)
src/core/manager.c
src/shared/unit-name.c
src/shared/unit-name.h

index 42c9bcd48cbf0d9a692a02e028c91d6aa82a4e9b..080561b5d108a1729687c004fae4780daaaa01b8 100644 (file)
@@ -1783,7 +1783,7 @@ int manager_loop(Manager *m) {
 }
 
 int manager_load_unit_from_dbus_path(Manager *m, const char *s, DBusError *e, Unit **_u) {
-        char *n;
+        _cleanup_free_ char *n = NULL;
         Unit *u;
         int r;
 
@@ -1791,16 +1791,11 @@ int manager_load_unit_from_dbus_path(Manager *m, const char *s, DBusError *e, Un
         assert(s);
         assert(_u);
 
-        if (!startswith(s, "/org/freedesktop/systemd1/unit/"))
-                return -EINVAL;
-
-        n = bus_path_unescape(s+31);
-        if (!n)
-                return -ENOMEM;
+        r = unit_name_from_dbus_path(s, &n);
+        if (r < 0)
+                return r;
 
         r = manager_load_unit(m, n, NULL, e, &u);
-        free(n);
-
         if (r < 0)
                 return r;
 
index f2c30a6e4f7333c5e1f56d30ef331be423306d17..7733aae0e72689192f7f4dad899271cea8f49226 100644 (file)
@@ -467,6 +467,22 @@ char *unit_dbus_path_from_name(const char *name) {
         return strappend("/org/freedesktop/systemd1/unit/", e);
 }
 
+int unit_name_from_dbus_path(const char *path, char **name) {
+        const char *e;
+        char *n;
+
+        e = startswith(path, "/org/freedesktop/systemd1/unit/");
+        if (!e)
+                return -EINVAL;
+
+        n = bus_path_unescape(e);
+        if (!n)
+                return -ENOMEM;
+
+        *name = n;
+        return 0;
+}
+
 char *unit_name_mangle(const char *name) {
         char *r, *t;
         const char *f;
index 88f2b83443d1e1f70a6bedb24e1c4d78feb7a277..7f4ae56433ce6d055a6eee4dbeb64eb46cf90a6c 100644 (file)
@@ -95,6 +95,7 @@ char *unit_name_from_path_instance(const char *prefix, const char *path, const c
 char *unit_name_to_path(const char *name);
 
 char *unit_dbus_path_from_name(const char *name);
+int unit_name_from_dbus_path(const char *path, char **name);
 
 char *unit_name_mangle(const char *name);
 char *unit_name_mangle_with_suffix(const char *name, const char *suffix);