summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/condition.c67
-rw-r--r--src/core/condition.h26
-rw-r--r--src/core/unit.c51
-rw-r--r--src/core/unit.h2
-rw-r--r--src/libsystemd-network/network-internal.c2
-rw-r--r--src/test/test-tables.c2
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"