]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: Introduce unit_is_filtered()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 7 Aug 2024 11:12:03 +0000 (13:12 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 14 Aug 2024 12:18:40 +0000 (14:18 +0200)
src/core/dbus-manager.c
src/core/unit.c
src/core/unit.h

index e88bb50c802dfd736943d6cc206addd3a99a3387..1fa8b15a80175996f62482e60cccf1f63b9c68de 100644 (file)
@@ -1218,14 +1218,7 @@ static int list_units_filtered(sd_bus_message *message, void *userdata, sd_bus_e
                 if (k != u->id)
                         continue;
 
-                if (!strv_isempty(states) &&
-                    !strv_contains(states, unit_load_state_to_string(u->load_state)) &&
-                    !strv_contains(states, unit_active_state_to_string(unit_active_state(u))) &&
-                    !strv_contains(states, unit_sub_state_to_string(u)))
-                        continue;
-
-                if (!strv_isempty(patterns) &&
-                    !strv_fnmatch_or_empty(patterns, u->id, FNM_NOESCAPE))
+                if (unit_is_filtered(u, states, patterns))
                         continue;
 
                 r = reply_unit_info(reply, u);
index 6a452f888ad7fe4d64873ccd6b19f1779d4ac713..6bd68c7d465e6b0693a0ffd28d62656c201afba3 100644 (file)
@@ -6470,6 +6470,22 @@ int unit_arm_timer(
         return 0;
 }
 
+bool unit_is_filtered(Unit *u, char *const *states, char *const *patterns) {
+        assert(u);
+
+        if (!strv_isempty(states)) {
+                char *const *unit_states = STRV_MAKE(
+                                unit_load_state_to_string(u->load_state),
+                                unit_active_state_to_string(unit_active_state(u)),
+                                unit_sub_state_to_string(u));
+
+                if (!strv_overlap(states, unit_states))
+                        return true;
+        }
+
+        return !strv_isempty(patterns) && !strv_fnmatch_or_empty(patterns, u->id, FNM_NOESCAPE);
+}
+
 static int unit_get_nice(Unit *u) {
         ExecContext *ec;
 
index bf736a5870492a00a177313d21c8f88117e8ad98..831bce885c1cdf481dcd12ba3dd0293b2413f4aa 100644 (file)
@@ -1043,6 +1043,8 @@ Condition *unit_find_failed_condition(Unit *u);
 
 int unit_arm_timer(Unit *u, sd_event_source **source, bool relative, usec_t usec, sd_event_time_handler_t handler);
 
+bool unit_is_filtered(Unit *u, char *const *states, char *const *patterns);
+
 int unit_compare_priority(Unit *a, Unit *b);
 
 UnitMountDependencyType unit_mount_dependency_type_from_string(const char *s) _const_;