X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftarget.c;h=1118693a3907bc698b3915fdee35a635f24b9235;hp=c7285fa737ccece67a9eee4775c3cd05aaf9963b;hb=7d568925bda9797f611e36d1d00cd941701cb3c8;hpb=c4e2ceae941d02de5574becbfd3b4db15de2eda3 diff --git a/src/target.c b/src/target.c index c7285fa73..1118693a3 100644 --- a/src/target.c +++ b/src/target.c @@ -21,6 +21,7 @@ #include #include +#include #include "unit.h" #include "target.h" @@ -28,6 +29,7 @@ #include "log.h" #include "dbus-target.h" #include "special.h" +#include "unit-name.h" static const UnitActiveState state_translation_table[_TARGET_STATE_MAX] = { [TARGET_DEAD] = UNIT_INACTIVE, @@ -73,6 +75,47 @@ static int target_add_default_dependencies(Target *t) { if ((r = unit_add_dependency(UNIT(t), UNIT_AFTER, other, true)) < 0) return r; + /* Make sure targets are unloaded on shutdown */ + return unit_add_dependency_by_name(UNIT(t), UNIT_CONFLICTED_BY, SPECIAL_SHUTDOWN_TARGET, NULL, true); +} + +static int target_add_getty_dependencies(Target *t) { + char *n; + int r; + + assert(t); + + if (!unit_has_name(UNIT(t), SPECIAL_GETTY_TARGET)) + return 0; + + /* Automatically add in a serial getty on the kernel + * console */ + if (t->meta.manager->console) { + log_debug("Automatically adding serial getty for %s", t->meta.manager->console); + if (!(n = unit_name_replace_instance(SPECIAL_SERIAL_GETTY_SERVICE, t->meta.manager->console))) + return -ENOMEM; + + r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_WANTS, n, NULL, true); + free(n); + + if (r < 0) + return r; + } + + /* Automatically add in a serial getty on the first + * virtualizer console */ + if (access("/sys/class/tty/hvc0", F_OK) == 0) { + log_debug("Automatic adding serial getty for hvc0"); + if (!(n = unit_name_replace_instance(SPECIAL_SERIAL_GETTY_SERVICE, "hvc0"))) + return -ENOMEM; + + r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_WANTS, n, NULL, true); + free(n); + + if (r < 0) + return r; + } + return 0; } @@ -90,6 +133,9 @@ static int target_load(Unit *u) { if (u->meta.default_dependencies) if ((r = target_add_default_dependencies(t)) < 0) return r; + + if ((r = target_add_getty_dependencies(t)) < 0) + return r; } return 0;