summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-10 04:48:33 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-10 18:00:20 +0200
commitf6ff8c29caeeec3d1f1164be73f87d867d8f1b18 (patch)
treedf5db18dabb33b6afbfcf67721e42e2682749f5a
parent013b87c09199926434583e8bb54ac6cb4b835eb5 (diff)
unit: introduce unit_load_related_unit()
-rw-r--r--unit.c22
-rw-r--r--unit.h2
2 files changed, 24 insertions, 0 deletions
diff --git a/unit.c b/unit.c
index a8058500d1..6d6f56416d 100644
--- a/unit.c
+++ b/unit.c
@@ -1440,6 +1440,28 @@ CGroupBonding* unit_get_default_cgroup(Unit *u) {
return cgroup_bonding_find_list(u->meta.cgroup_bondings, u->meta.manager->cgroup_controller);
}
+int unit_load_related_unit(Unit *u, const char *type, Unit **_found) {
+ char *t;
+ int r;
+
+ assert(u);
+ assert(type);
+ assert(_found);
+
+ if (!(t = unit_name_change_suffix(unit_id(u), type)))
+ return -ENOMEM;
+
+ assert(!unit_has_name(u, t));
+
+ r = manager_load_unit(u->meta.manager, t, _found);
+ free(t);
+
+ if (r >= 0)
+ assert(*_found != u);
+
+ return r;
+}
+
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
[UNIT_SERVICE] = "service",
[UNIT_TIMER] = "timer",
diff --git a/unit.h b/unit.h
index 9def661ce1..bfd0907fc3 100644
--- a/unit.h
+++ b/unit.h
@@ -324,6 +324,8 @@ char *unit_name_escape_path(const char *path, const char *suffix);
char *unit_dbus_path(Unit *u);
+int unit_load_related_unit(Unit *u, const char *type, Unit **_found);
+
const char *unit_type_to_string(UnitType i);
UnitType unit_type_from_string(const char *s);