chiark / gitweb /
update fixme
[elogind.git] / src / target.c
index f8df6fb757742d3cb8f166d63c582ef3f563e8a1..48137fe313ce33b02f3cc410906c9bc4372e6c08 100644 (file)
@@ -1,4 +1,4 @@
-/*-*- Mode: C; c-basic-offset: 8 -*-*/
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
 
 /***
   This file is part of systemd.
@@ -55,18 +55,23 @@ static int target_add_default_dependencies(Target *t) {
         Unit *other;
         int r;
 
-        /* Imply ordering for requirement dependencies
-         * on target units. */
+        /* Imply ordering for requirement dependencies on target
+         * units. Note that when the user created a contradicting
+         * ordering manually we won't add anything in here to make
+         * sure we don't create a loop. */
 
         SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES], i)
-                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
-                        return r;
+                if (!set_get(t->meta.dependencies[UNIT_BEFORE], other))
+                        if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                                return r;
         SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES_OVERRIDABLE], i)
-                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
-                        return r;
+                if (!set_get(t->meta.dependencies[UNIT_BEFORE], other))
+                        if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                                return r;
         SET_FOREACH(other, t->meta.dependencies[UNIT_WANTS], i)
-                if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
-                        return r;
+                if (!set_get(t->meta.dependencies[UNIT_BEFORE], other))
+                        if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0)
+                                return r;
 
         return 0;
 }
@@ -178,35 +183,6 @@ static const char *target_sub_state_to_string(Unit *u) {
         return target_state_to_string(TARGET(u)->state);
 }
 
-int target_get_runlevel(Target *t) {
-
-        static const struct {
-                const char *special;
-                const int runlevel;
-        } table[] = {
-                { SPECIAL_RUNLEVEL5_TARGET, '5' },
-                { SPECIAL_RUNLEVEL4_TARGET, '4' },
-                { SPECIAL_RUNLEVEL3_TARGET, '3' },
-                { SPECIAL_RUNLEVEL2_TARGET, '2' },
-                { SPECIAL_RESCUE_TARGET,    '1' },
-                { SPECIAL_POWEROFF_TARGET,  '0' },
-                { SPECIAL_REBOOT_TARGET,    '6' },
-        };
-
-        unsigned i;
-
-        assert(t);
-
-        /* Tries to determine if this is a SysV runlevel and returns
-         * it if that is so. */
-
-        for (i = 0; i < ELEMENTSOF(table); i++)
-                if (unit_has_name(UNIT(t), table[i].special))
-                        return table[i].runlevel;
-
-        return 0;
-}
-
 static const char* const target_state_table[_TARGET_STATE_MAX] = {
         [TARGET_DEAD] = "dead",
         [TARGET_ACTIVE] = "active"