chiark / gitweb /
util: more join() optimizations
[elogind.git] / src / unit.c
index d4142098d1f4b742ca357f17aec42824d3efa61d..65ee0cc35f9abccf0b560e4c5a4cd0f87bb76e9c 100644 (file)
@@ -73,6 +73,7 @@ Unit *unit_new(Manager *m) {
         u->meta.type = _UNIT_TYPE_INVALID;
         u->meta.deserialized_job = _JOB_TYPE_INVALID;
         u->meta.default_dependencies = true;
+        u->meta.unit_file_state = _UNIT_FILE_STATE_INVALID;
 
         return u;
 }
@@ -1771,22 +1772,22 @@ int unit_add_cgroup(Unit *u, CGroupBonding *b) {
 
 static char *default_cgroup_path(Unit *u) {
         char *p;
-        int r;
 
         assert(u);
 
         if (u->meta.instance) {
                 char *t;
 
-                if (!(t = unit_name_template(u->meta.id)))
+                t = unit_name_template(u->meta.id);
+                if (!t)
                         return NULL;
 
-                r = asprintf(&p, "%s/%s/%s", u->meta.manager->cgroup_hierarchy, t, u->meta.instance);
+                p = join(u->meta.manager->cgroup_hierarchy, "/", t, "/", u->meta.instance, NULL);
                 free(t);
         } else
-                r = asprintf(&p, "%s/%s", u->meta.manager->cgroup_hierarchy, u->meta.id);
+                p = join(u->meta.manager->cgroup_hierarchy, "/", u->meta.id, NULL);
 
-        return r < 0 ? NULL : p;
+        return p;
 }
 
 int unit_add_cgroup_from_text(Unit *u, const char *name) {
@@ -2482,6 +2483,17 @@ int unit_following_set(Unit *u, Set **s) {
         return 0;
 }
 
+UnitFileState unit_get_unit_file_state(Unit *u) {
+        assert(u);
+
+        if (u->meta.unit_file_state < 0 && u->meta.fragment_path)
+                u->meta.unit_file_state = unit_file_get_state(
+                                u->meta.manager->running_as == MANAGER_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER,
+                                NULL, file_name_from_path(u->meta.fragment_path));
+
+        return u->meta.unit_file_state;
+}
+
 static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
         [UNIT_STUB] = "stub",
         [UNIT_LOADED] = "loaded",