diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-01-28 02:44:47 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-01-28 02:44:47 +0100 |
commit | d46de8a1a249e179687361dcaeba27e1c586253a (patch) | |
tree | 42f790e46583f88c557ac33ea67e857654a794a4 | |
parent | 98b5b2986fa1b85fd2d2e80f867f1647b4e4e3b5 (diff) |
rework config file load logic
-rw-r--r-- | automount.c | 2 | ||||
-rw-r--r-- | load-fragment.c | 12 | ||||
-rw-r--r-- | main.c | 6 | ||||
-rw-r--r-- | mount.c | 2 | ||||
-rw-r--r-- | service.c | 15 | ||||
-rw-r--r-- | socket.c | 5 | ||||
-rw-r--r-- | target.c | 16 | ||||
-rw-r--r-- | timer.c | 17 | ||||
-rw-r--r-- | unit.c | 6 |
9 files changed, 59 insertions, 22 deletions
diff --git a/automount.c b/automount.c index 7b397c9b9b..eb9c3d3c1d 100644 --- a/automount.c +++ b/automount.c @@ -17,7 +17,7 @@ static int automount_init(Unit *u) { exec_context_init(&a->exec_context); /* Load a .automount file */ - if ((r = unit_load_fragment(u)) < 0 && errno != -ENOENT) + if ((r = unit_load_fragment(u)) < 0) return r; /* Load entry from /etc/fstab */ diff --git a/load-fragment.c b/load-fragment.c index 2757506aba..9273fc8b83 100644 --- a/load-fragment.c +++ b/load-fragment.c @@ -824,7 +824,7 @@ finish: } int unit_load_fragment(Unit *u) { - int r = -ENOENT; + int r = 0; ExecContext *c; assert(u); @@ -851,14 +851,16 @@ int unit_load_fragment(Unit *u) { if (r >= 0 && c && (c->output == EXEC_KERNEL || c->output == EXEC_SYSLOG)) { + int k; + /* If syslog or kernel logging is requested, make sure * our own logging daemon is run first. */ - if ((r = unit_add_dependency(u, UNIT_AFTER, u->meta.manager->special_units[SPECIAL_LOGGER_SOCKET])) < 0) - return r; + if ((k = unit_add_dependency(u, UNIT_AFTER, u->meta.manager->special_units[SPECIAL_LOGGER_SOCKET])) < 0) + return k; - if ((r = unit_add_dependency(u, UNIT_REQUIRES, u->meta.manager->special_units[SPECIAL_LOGGER_SOCKET])) < 0) - return r; + if ((k = unit_add_dependency(u, UNIT_REQUIRES, u->meta.manager->special_units[SPECIAL_LOGGER_SOCKET])) < 0) + return k; } return r; @@ -26,14 +26,14 @@ int main(int argc, char *argv[]) { goto finish; } + printf("→ By units:\n"); + manager_dump_units(m, stdout, "\t"); + if ((r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &job)) < 0) { log_error("Failed to start default target: %s", strerror(-r)); goto finish; } - printf("→ By units:\n"); - manager_dump_units(m, stdout, "\t"); - printf("→ By jobs:\n"); manager_dump_jobs(m, stdout, "\t"); @@ -15,7 +15,7 @@ static int mount_init(Unit *u) { assert(m); /* Load a .mount file */ - if ((r = unit_load_fragment(u)) < 0 && errno != -ENOENT) + if ((r = unit_load_fragment(u)) < 0) return r; /* Load entry from /etc/fstab */ @@ -101,17 +101,18 @@ static int service_init(Unit *u) { s->state = SERVICE_DEAD; /* Load a .service file */ - r = unit_load_fragment(u); - - /* Load a classic init script as a fallback */ - if (r == -ENOENT) - r = service_load_sysv(s); - - if (r < 0) { + if ((r = unit_load_fragment(u)) < 0) { service_done(u); return r; } + /* Load a classic init script as a fallback, if we couldn*t find anything */ + if (r == 0) + if ((r = service_load_sysv(s)) <= 0) { + service_done(u); + return r < 0 ? r : -ENOENT; + } + /* Load dropin directory data */ if ((r = unit_load_dropin(u)) < 0) { service_done(u); @@ -88,8 +88,11 @@ static int socket_init(Unit *u) { s->timeout_usec = DEFAULT_TIMEOUT_USEC; exec_context_init(&s->exec_context); - if ((r = unit_load_fragment_and_dropin(u)) < 0) + if ((r = unit_load_fragment_and_dropin(u)) <= 0) { + if (r == 0) + r = -ENOENT; goto fail; + } if (!(t = unit_name_change_suffix(unit_id(u), ".service"))) { r = -ENOMEM; @@ -1,5 +1,7 @@ /*-*- Mode: C; c-basic-offset: 8 -*-*/ +#include <errno.h> + #include "unit.h" #include "target.h" #include "load-fragment.h" @@ -15,6 +17,18 @@ static const char* const state_string_table[_TARGET_STATE_MAX] = { [TARGET_ACTIVE] = "active" }; +static int target_init(Unit *u) { + int r; + assert(u); + + /* Make sure this config file actually exists */ + + if ((r = unit_load_fragment_and_dropin(u)) <= 0) + return r < 0 ? r : -ENOENT; + + return 0; +} + static void target_dump(Unit *u, FILE *f, const char *prefix) { Target *t = TARGET(u); @@ -67,7 +81,7 @@ static UnitActiveState target_active_state(Unit *u) { const UnitVTable target_vtable = { .suffix = ".target", - .init = unit_load_fragment_and_dropin, + .init = target_init, .dump = target_dump, @@ -1,5 +1,7 @@ /*-*- Mode: C; c-basic-offset: 8 -*-*/ +#include <errno.h> + #include "unit.h" #include "timer.h" @@ -9,6 +11,19 @@ static void timer_done(Unit *u) { assert(t); } +static int timer_init(Unit *u) { + int r; + + assert(u); + + /* Make sure this config file actually exists */ + + if ((r = unit_load_fragment_and_dropin(u)) <= 0) + return r < 0 ? r : -ENOENT; + + return 0; +} + static UnitActiveState timer_active_state(Unit *u) { static const UnitActiveState table[_TIMER_STATE_MAX] = { @@ -23,7 +38,7 @@ static UnitActiveState timer_active_state(Unit *u) { const UnitVTable timer_vtable = { .suffix = ".timer", - .init = unit_load_fragment_and_dropin, + .init = timer_init, .done = timer_done, .active_state = timer_active_state @@ -372,7 +372,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { /* Common implementation for multiple backends */ int unit_load_fragment_and_dropin(Unit *u) { - int r; + int r, ret; assert(u); @@ -380,11 +380,13 @@ int unit_load_fragment_and_dropin(Unit *u) { if ((r = unit_load_fragment(u)) < 0) return r; + ret = r > 0; + /* Load drop-in directory data */ if ((r = unit_load_dropin(u)) < 0) return r; - return 0; + return ret; } int unit_load(Unit *u) { |