X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=automount.c;h=c28472da769106f1ff61f6d633094f257d3552b5;hp=b64bacbf4a398339eea1946c5c9a2623e97f74bc;hb=d2b9fd2bb971b3b7a23acdfa1748d6810629c94c;hpb=034c6ed7da5e44bfdde5a5d0da75f7b7a59953b8 diff --git a/automount.c b/automount.c index b64bacbf4..c28472da7 100644 --- a/automount.c +++ b/automount.c @@ -1,44 +1,73 @@ /*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*** + This file is part of systemd. + + Copyright 2010 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with systemd; If not, see . +***/ + #include -#include "name.h" +#include "unit.h" #include "automount.h" #include "load-fragment.h" -#include "load-fstab.h" #include "load-dropin.h" -static int automount_init(Name *n) { +static int automount_init(Unit *u, UnitLoadState *new_state) { int r; - Automount *a = AUTOMOUNT(n); + Automount *a = AUTOMOUNT(u); assert(a); exec_context_init(&a->exec_context); /* Load a .automount file */ - if ((r = name_load_fragment(n)) < 0 && errno != -ENOENT) + if ((r = unit_load_fragment(u, new_state)) < 0) return r; - /* Load entry from /etc/fstab */ - if ((r = name_load_fstab(n)) < 0) - return r; + if (*new_state == UNIT_STUB) + *new_state = UNIT_LOADED; /* Load drop-in directory data */ - if ((r = name_load_dropin(n)) < 0) + if ((r = unit_load_dropin(unit_follow_merge(u))) < 0) return r; + if (*new_state == UNIT_LOADED) { + + if ((r = unit_add_dependency(u, UNIT_BEFORE, UNIT(a->mount))) < 0) + return r; + + if ((r = unit_add_exec_dependencies(u, &a->exec_context)) < 0) + return r; + + if ((r = unit_add_default_cgroup(u)) < 0) + return r; + } + return 0; } -static void automount_done(Name *n) { - Automount *d = AUTOMOUNT(n); +static void automount_done(Unit *u) { + Automount *d = AUTOMOUNT(u); assert(d); free(d->path); } -static void automount_dump(Name *n, FILE *f, const char *prefix) { +static void automount_dump(Unit *u, FILE *f, const char *prefix) { static const char* const state_table[_AUTOMOUNT_STATE_MAX] = { [AUTOMOUNT_DEAD] = "dead", @@ -59,7 +88,7 @@ static void automount_dump(Name *n, FILE *f, const char *prefix) { }; AutomountExecCommand c; - Automount *s = AUTOMOUNT(n); + Automount *s = AUTOMOUNT(u); assert(s); @@ -79,23 +108,23 @@ static void automount_dump(Name *n, FILE *f, const char *prefix) { } } -static NameActiveState automount_active_state(Name *n) { - - static const NameActiveState table[_AUTOMOUNT_STATE_MAX] = { - [AUTOMOUNT_DEAD] = NAME_INACTIVE, - [AUTOMOUNT_START_PRE] = NAME_ACTIVATING, - [AUTOMOUNT_START_POST] = NAME_ACTIVATING, - [AUTOMOUNT_WAITING] = NAME_ACTIVE, - [AUTOMOUNT_RUNNING] = NAME_ACTIVE, - [AUTOMOUNT_STOP_PRE] = NAME_DEACTIVATING, - [AUTOMOUNT_STOP_POST] = NAME_DEACTIVATING, - [AUTOMOUNT_MAINTAINANCE] = NAME_INACTIVE, +static UnitActiveState automount_active_state(Unit *u) { + + static const UnitActiveState table[_AUTOMOUNT_STATE_MAX] = { + [AUTOMOUNT_DEAD] = UNIT_INACTIVE, + [AUTOMOUNT_START_PRE] = UNIT_ACTIVATING, + [AUTOMOUNT_START_POST] = UNIT_ACTIVATING, + [AUTOMOUNT_WAITING] = UNIT_ACTIVE, + [AUTOMOUNT_RUNNING] = UNIT_ACTIVE, + [AUTOMOUNT_STOP_PRE] = UNIT_DEACTIVATING, + [AUTOMOUNT_STOP_POST] = UNIT_DEACTIVATING, + [AUTOMOUNT_MAINTAINANCE] = UNIT_INACTIVE, }; - return table[AUTOMOUNT(n)->state]; + return table[AUTOMOUNT(u)->state]; } -const NameVTable automount_vtable = { +const UnitVTable automount_vtable = { .suffix = ".mount", .init = automount_init,