X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Ftarget.c;h=5f64402475976643b1532ba9e9dd0c24cecd997c;hp=f99b2a5af0d54b0e1b23922ef625bbd2dc6a55b1;hb=3164e3cbc50b8754c51f1fdeda7a7d6cedcc39b6;hpb=5430f7f2bc7330f3088b894166bf3524a067e3d8
diff --git a/src/core/target.c b/src/core/target.c
index f99b2a5af..5f6440247 100644
--- a/src/core/target.c
+++ b/src/core/target.c
@@ -19,13 +19,9 @@
along with systemd; If not, see .
***/
-#include
-#include
-#include
#include "unit.h"
#include "target.h"
-#include "load-fragment.h"
#include "log.h"
#include "dbus-target.h"
#include "special.h"
@@ -53,13 +49,15 @@ static void target_set_state(Target *t, TargetState state) {
}
static int target_add_default_dependencies(Target *t) {
+
static const UnitDependency deps[] = {
UNIT_REQUIRES,
UNIT_REQUIRES_OVERRIDABLE,
UNIT_REQUISITE,
UNIT_REQUISITE_OVERRIDABLE,
UNIT_WANTS,
- UNIT_BIND_TO
+ UNIT_BINDS_TO,
+ UNIT_PART_OF
};
Iterator i;
@@ -75,9 +73,11 @@ static int target_add_default_dependencies(Target *t) {
* sure we don't create a loop. */
for (k = 0; k < ELEMENTSOF(deps); k++)
- SET_FOREACH(other, UNIT(t)->dependencies[deps[k]], i)
- if ((r = unit_add_default_target_dependency(other, UNIT(t))) < 0)
+ SET_FOREACH(other, UNIT(t)->dependencies[deps[k]], i) {
+ r = unit_add_default_target_dependency(other, UNIT(t));
+ if (r < 0)
return r;
+ }
/* Make sure targets are unloaded on shutdown */
return unit_add_dependency_by_name(UNIT(t), UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
@@ -89,20 +89,21 @@ static int target_load(Unit *u) {
assert(t);
- if ((r = unit_load_fragment_and_dropin(u)) < 0)
+ r = unit_load_fragment_and_dropin(u);
+ if (r < 0)
return r;
/* This is a new unit? Then let's add in some extras */
- if (u->load_state == UNIT_LOADED) {
- if (u->default_dependencies)
- if ((r = target_add_default_dependencies(t)) < 0)
- return r;
+ if (u->load_state == UNIT_LOADED && u->default_dependencies) {
+ r = target_add_default_dependencies(t);
+ if (r < 0)
+ return r;
}
return 0;
}
-static int target_coldplug(Unit *u) {
+static int target_coldplug(Unit *u, Hashmap *deferred_work) {
Target *t = TARGET(u);
assert(t);
@@ -132,7 +133,7 @@ static int target_start(Unit *u) {
assert(t->state == TARGET_DEAD);
target_set_state(t, TARGET_ACTIVE);
- return 0;
+ return 1;
}
static int target_stop(Unit *u) {
@@ -142,7 +143,7 @@ static int target_stop(Unit *u) {
assert(t->state == TARGET_ACTIVE);
target_set_state(t, TARGET_DEAD);
- return 0;
+ return 1;
}
static int target_serialize(Unit *u, FILE *f, FDSet *fds) {
@@ -167,7 +168,8 @@ static int target_deserialize_item(Unit *u, const char *key, const char *value,
if (streq(key, "state")) {
TargetState state;
- if ((state = target_state_from_string(value)) < 0)
+ state = target_state_from_string(value);
+ if (state < 0)
log_debug("Failed to parse state value %s", value);
else
s->deserialized_state = state;
@@ -178,13 +180,13 @@ static int target_deserialize_item(Unit *u, const char *key, const char *value,
return 0;
}
-static UnitActiveState target_active_state(Unit *u) {
+_pure_ static UnitActiveState target_active_state(Unit *u) {
assert(u);
return state_translation_table[TARGET(u)->state];
}
-static const char *target_sub_state_to_string(Unit *u) {
+_pure_ static const char *target_sub_state_to_string(Unit *u) {
assert(u);
return target_state_to_string(TARGET(u)->state);
@@ -198,8 +200,8 @@ static const char* const target_state_table[_TARGET_STATE_MAX] = {
DEFINE_STRING_TABLE_LOOKUP(target_state, TargetState);
const UnitVTable target_vtable = {
- .suffix = ".target",
.object_size = sizeof(Target),
+
.sections =
"Unit\0"
"Target\0"
@@ -220,5 +222,15 @@ const UnitVTable target_vtable = {
.sub_state_to_string = target_sub_state_to_string,
.bus_interface = "org.freedesktop.systemd1.Target",
- .bus_message_handler = bus_target_message_handler
+ .bus_vtable = bus_target_vtable,
+
+ .status_message_formats = {
+ .finished_start_job = {
+ [JOB_DONE] = "Reached target %s.",
+ [JOB_DEPENDENCY] = "Dependency failed for %s.",
+ },
+ .finished_stop_job = {
+ [JOB_DONE] = "Stopped target %s.",
+ },
+ },
};