diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/condition.c | 67 | ||||
-rw-r--r-- | src/core/condition.h | 26 | ||||
-rw-r--r-- | src/core/unit.c | 51 | ||||
-rw-r--r-- | src/core/unit.h | 2 | ||||
-rw-r--r-- | src/libsystemd-network/network-internal.c | 2 | ||||
-rw-r--r-- | src/test/test-tables.c | 2 |
6 files changed, 52 insertions, 98 deletions
diff --git a/src/core/condition.c b/src/core/condition.c deleted file mode 100644 index c20c0f01e1..0000000000 --- a/src/core/condition.c +++ /dev/null @@ -1,67 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** - 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 Lesser General Public License as published by - the Free Software Foundation; either version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include "condition.h" -#include "unit.h" - -bool condition_test_list(const char *unit, Condition *first, const char *(*to_string)(ConditionType t)) { - Condition *c; - int triggered = -1; - - /* If the condition list is empty, then it is true */ - if (!first) - return true; - - /* Otherwise, if all of the non-trigger conditions apply and - * if any of the trigger conditions apply (unless there are - * none) we return true */ - LIST_FOREACH(conditions, c, first) { - int r; - - r = condition_test(c); - if (r < 0) - log_warning_unit(unit, - "Couldn't determine result for %s=%s%s%s for %s, assuming failed: %s", - to_string(c->type), - c->trigger ? "|" : "", - c->negate ? "!" : "", - c->parameter, - unit, - strerror(-r)); - else - log_debug_unit(unit, - "%s=%s%s%s %s for %s.", - to_string(c->type), - c->trigger ? "|" : "", - c->negate ? "!" : "", - c->parameter, - condition_result_to_string(c->result), - unit); - - if (!c->trigger && r <= 0) - return false; - - if (c->trigger && triggered <= 0) - triggered = r > 0; - } - - return triggered != 0; -} diff --git a/src/core/condition.h b/src/core/condition.h deleted file mode 100644 index a6a31edc7a..0000000000 --- a/src/core/condition.h +++ /dev/null @@ -1,26 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -#pragma once - -/*** - 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 Lesser General Public License as published by - the Free Software Foundation; either version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include "condition-util.h" - -bool condition_test_list(const char *unit, Condition *c, const char *(*to_string)(ConditionType t)); diff --git a/src/core/unit.c b/src/core/unit.c index 66f53ddc7c..948f8e21bd 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1245,11 +1245,58 @@ fail: return r; } +static bool unit_condition_test_list(Unit *u, Condition *first, const char *(*to_string)(ConditionType t)) { + Condition *c; + int triggered = -1; + + assert(u); + assert(to_string); + + /* If the condition list is empty, then it is true */ + if (!first) + return true; + + /* Otherwise, if all of the non-trigger conditions apply and + * if any of the trigger conditions apply (unless there are + * none) we return true */ + LIST_FOREACH(conditions, c, first) { + int r; + + r = condition_test(c); + if (r < 0) + log_warning_unit(u->id, + "Couldn't determine result for %s=%s%s%s for %s, assuming failed: %s", + to_string(c->type), + c->trigger ? "|" : "", + c->negate ? "!" : "", + c->parameter, + u->id, + strerror(-r)); + else + log_debug_unit(u->id, + "%s=%s%s%s %s for %s.", + to_string(c->type), + c->trigger ? "|" : "", + c->negate ? "!" : "", + c->parameter, + condition_result_to_string(c->result), + u->id); + + if (!c->trigger && r <= 0) + return false; + + if (c->trigger && triggered <= 0) + triggered = r > 0; + } + + return triggered != 0; +} + static bool unit_condition_test(Unit *u) { assert(u); dual_timestamp_get(&u->condition_timestamp); - u->condition_result = condition_test_list(u->id, u->conditions, condition_type_to_string); + u->condition_result = unit_condition_test_list(u, u->conditions, condition_type_to_string); return u->condition_result; } @@ -1258,7 +1305,7 @@ static bool unit_assert_test(Unit *u) { assert(u); dual_timestamp_get(&u->assert_timestamp); - u->assert_result = condition_test_list(u->id, u->asserts, assert_type_to_string); + u->assert_result = unit_condition_test_list(u, u->asserts, assert_type_to_string); return u->assert_result; } diff --git a/src/core/unit.h b/src/core/unit.h index 8b24272245..b5a224b3d4 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -38,7 +38,7 @@ typedef struct UnitStatusMessageFormats UnitStatusMessageFormats; #include "socket-util.h" #include "execute.h" #include "cgroup.h" -#include "condition.h" +#include "condition-util.h" #include "install.h" #include "unit-name.h" #include "failure-action.h" diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 6f16050cdc..f3141f75dc 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -32,7 +32,7 @@ #include "utf8.h" #include "util.h" #include "conf-parser.h" -#include "condition.h" +#include "condition-util.h" #include "network-internal.h" const char *net_get_name(struct udev_device *device) { diff --git a/src/test/test-tables.c b/src/test/test-tables.c index 97d5609adf..d0a621c775 100644 --- a/src/test/test-tables.c +++ b/src/test/test-tables.c @@ -20,7 +20,7 @@ #include "automount.h" #include "cgroup.h" #include "compress.h" -#include "condition.h" +#include "condition-util.h" #include "device.h" #include "execute.h" #include "exit-status.h" |