summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-01-28 02:44:47 +0100
committerLennart Poettering <lennart@poettering.net>2010-01-28 02:44:47 +0100
commitd46de8a1a249e179687361dcaeba27e1c586253a (patch)
tree42f790e46583f88c557ac33ea67e857654a794a4
parent98b5b2986fa1b85fd2d2e80f867f1647b4e4e3b5 (diff)
rework config file load logic
-rw-r--r--automount.c2
-rw-r--r--load-fragment.c12
-rw-r--r--main.c6
-rw-r--r--mount.c2
-rw-r--r--service.c15
-rw-r--r--socket.c5
-rw-r--r--target.c16
-rw-r--r--timer.c17
-rw-r--r--unit.c6
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;
diff --git a/main.c b/main.c
index 624a73e178..2486f06292 100644
--- a/main.c
+++ b/main.c
@@ -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");
diff --git a/mount.c b/mount.c
index f4a6d6f246..7a1ec087e7 100644
--- a/mount.c
+++ b/mount.c
@@ -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 */
diff --git a/service.c b/service.c
index 1cbfb3dceb..70299dd065 100644
--- a/service.c
+++ b/service.c
@@ -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);
diff --git a/socket.c b/socket.c
index 7bcd112739..926a0fb646 100644
--- a/socket.c
+++ b/socket.c
@@ -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;
diff --git a/target.c b/target.c
index 748dfeef1a..03f092e35c 100644
--- a/target.c
+++ b/target.c
@@ -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,
diff --git a/timer.c b/timer.c
index 29346204f8..c3ebba0d1b 100644
--- a/timer.c
+++ b/timer.c
@@ -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
diff --git a/unit.c b/unit.c
index 88615319d7..4076120920 100644
--- a/unit.c
+++ b/unit.c
@@ -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) {