free(u->description);
strv_free(u->documentation);
free(u->fragment_path);
+ free(u->source_path);
free(u->instance);
set_free_free(u->names);
if (u->fragment_path)
fprintf(f, "%s\tFragment Path: %s\n", prefix, u->fragment_path);
+ if (u->source_path)
+ fprintf(f, "%s\tSource Path: %s\n", prefix, u->source_path);
+
if (u->job_timeout > 0)
fprintf(f, "%s\tJob Timeout: %s\n", prefix, format_timespan(timespan, sizeof(timespan), u->job_timeout));
}
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) {
if (!t)
return NULL;
- p = join(u->manager->cgroup_hierarchy, "/", t, "/", u->instance, NULL);
+ p = strjoin(u->manager->cgroup_hierarchy, "/", t, "/", u->instance, NULL);
free(t);
} else
- p = join(u->manager->cgroup_hierarchy, "/", u->id, NULL);
+ p = strjoin(u->manager->cgroup_hierarchy, "/", u->id, NULL);
return p;
}
if (!is_device_path(what))
return 0;
- if (!(e = unit_name_build_escape(what+1, NULL, ".device")))
+ e = unit_name_from_path(what, ".device");
+ if (!e)
return -ENOMEM;
r = manager_load_unit(u->manager, e, NULL, NULL, &device);
}
bool unit_need_daemon_reload(Unit *u) {
+ struct stat st;
+
assert(u);
if (u->fragment_path) {
- struct stat st;
-
zero(st);
if (stat(u->fragment_path, &st) < 0)
/* What, cannot access this anymore? */
return true;
}
- if (UNIT_VTABLE(u)->need_daemon_reload)
- return UNIT_VTABLE(u)->need_daemon_reload(u);
+ if (u->source_path) {
+ zero(st);
+ if (stat(u->source_path, &st) < 0)
+ return true;
+
+ if (u->source_mtime > 0 &&
+ timespec_load(&st.st_mtim) != u->source_mtime)
+ return true;
+ }
return false;
}
return false;
}
-UnitType unit_name_to_type(const char *n) {
- UnitType t;
-
- assert(n);
-
- for (t = 0; t < _UNIT_TYPE_MAX; t++)
- if (endswith(n, unit_vtable[t]->suffix))
- return t;
-
- return _UNIT_TYPE_INVALID;
-}
-
-bool unit_name_is_valid(const char *n, bool template_ok) {
- UnitType t;
-
- t = unit_name_to_type(n);
- if (t < 0 || t >= _UNIT_TYPE_MAX)
- return false;
-
- return unit_name_is_valid_no_type(n, template_ok);
-}
-
int unit_kill(Unit *u, KillWho w, KillMode m, int signo, DBusError *error) {
assert(u);
assert(w >= 0 && w < _KILL_WHO_MAX);
return 0;
}
-static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
- [UNIT_STUB] = "stub",
- [UNIT_LOADED] = "loaded",
- [UNIT_ERROR] = "error",
- [UNIT_MERGED] = "merged",
- [UNIT_MASKED] = "masked"
-};
-
-DEFINE_STRING_TABLE_LOOKUP(unit_load_state, UnitLoadState);
-
static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
[UNIT_ACTIVE] = "active",
[UNIT_RELOADING] = "reloading",