bidi_set_free(u, u->meta.dependencies[d]);
free(u->meta.description);
- free(u->meta.load_path);
+ free(u->meta.fragment_path);
while ((t = set_steal_first(u->meta.names)))
free(t);
prefix, yes_no(u->meta.recursive_stop),
prefix, yes_no(u->meta.stop_when_unneeded));
- if (u->meta.load_path)
- fprintf(f, "%s\tLoad Path: %s\n", prefix, u->meta.load_path);
+ if (u->meta.fragment_path)
+ fprintf(f, "%s\tFragment Path: %s\n", prefix, u->meta.fragment_path);
SET_FOREACH(t, u->meta.names, i)
fprintf(f, "%s\tName: %s\n", prefix, t);
assert(u);
- if (!UNIT_VTABLE(u)->start)
- return -EBADR;
-
+ /* If this is already (being) started, then this will
+ * succeed. Note that this will even succeed if this unit is
+ * not startable by the user. This is relied on to detect when
+ * we need to wait for units and when waiting is finished. */
state = unit_active_state(u);
if (UNIT_IS_ACTIVE_OR_RELOADING(state))
return -EALREADY;
+ /* If it is stopped, but we cannot start it, then fail */
+ if (!UNIT_VTABLE(u)->start)
+ return -EBADR;
+
/* We don't suppress calls to ->start() here when we are
* already starting, to allow this request to be used as a
* "hurry up" call, for example when the unit is in some "auto
assert(u);
- if (!UNIT_VTABLE(u)->stop)
- return -EBADR;
-
state = unit_active_state(u);
if (state == UNIT_INACTIVE)
return -EALREADY;
+ if (!UNIT_VTABLE(u)->stop)
+ return -EBADR;
+
if (state == UNIT_DEACTIVATING)
return 0;
return 0;
}
-const char *unit_path(void) {
- char *e;
-
- if ((e = getenv("UNIT_PATH")))
- if (path_is_absolute(e))
- return e;
-
- return UNIT_PATH;
-}
-
int set_unit_path(const char *p) {
char *cwd, *c;
int r;
return -ENOMEM;
}
- if (setenv("UNIT_PATH", c, 0) < 0) {
+ if (setenv("SYSTEMD_UNIT_PATH", c, 0) < 0) {
r = -errno;
free(c);
return r;