mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-20 21:50:23 +07:00
rework config file load logic
This commit is contained in:
parent
98b5b2986f
commit
d46de8a1a2
@ -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 */
|
||||
|
@ -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;
|
||||
|
6
main.c
6
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");
|
||||
|
||||
|
2
mount.c
2
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 */
|
||||
|
15
service.c
15
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);
|
||||
|
5
socket.c
5
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;
|
||||
|
16
target.c
16
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,
|
||||
|
||||
|
17
timer.c
17
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
|
||||
|
6
unit.c
6
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user