X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=timer.c;h=c3ebba0d1ba80220cfd97112bd91cdee6c21a7b7;hp=b1571ce7ea7af864f11ad6c0273205b0fff77564;hb=94f043472a5af62dc9cd5767e89ba33872212d5e;hpb=5cb5a6ffc33667c93e9bc3572534dcaa684046e3 diff --git a/timer.c b/timer.c index b1571ce7e..c3ebba0d1 100644 --- a/timer.c +++ b/timer.c @@ -1,39 +1,45 @@ /*-*- Mode: C; c-basic-offset: 8 -*-*/ -#include "name.h" -#include "timer.h" +#include -static NameActiveState timer_active_state(Name *n) { +#include "unit.h" +#include "timer.h" - static const NameActiveState table[_TIMER_STATE_MAX] = { - [TIMER_DEAD] = NAME_INACTIVE, - [TIMER_WAITING] = NAME_ACTIVE, - [TIMER_RUNNING] = NAME_ACTIVE - }; +static void timer_done(Unit *u) { + Timer *t = TIMER(u); - return table[TIMER(n)->state]; + assert(t); } -static void timer_free_hook(Name *n) { - Timer *t = TIMER(n); +static int timer_init(Unit *u) { + int r; - assert(t); + assert(u); + + /* Make sure this config file actually exists */ - if (t->service) - t->service->timer = NULL; + if ((r = unit_load_fragment_and_dropin(u)) <= 0) + return r < 0 ? r : -ENOENT; + + return 0; } -const NameVTable timer_vtable = { - .suffix = ".timer", +static UnitActiveState timer_active_state(Unit *u) { + + static const UnitActiveState table[_TIMER_STATE_MAX] = { + [TIMER_DEAD] = UNIT_INACTIVE, + [TIMER_WAITING] = UNIT_ACTIVE, + [TIMER_RUNNING] = UNIT_ACTIVE + }; - .load = name_load_fragment_and_dropin, - .dump = NULL, + return table[TIMER(u)->state]; +} - .start = NULL, - .stop = NULL, - .reload = NULL, +const UnitVTable timer_vtable = { + .suffix = ".timer", - .active_state = timer_active_state, + .init = timer_init, + .done = timer_done, - .free_hook = timer_free_hook + .active_state = timer_active_state };