From 6d2984d21bf2a8f71d379ef6bc13a761bb2e2756 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 7 Aug 2024 13:12:03 +0200 Subject: [PATCH] core: Introduce unit_is_filtered() --- src/core/dbus-manager.c | 9 +-------- src/core/unit.c | 16 ++++++++++++++++ src/core/unit.h | 2 ++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index e88bb50c802..1fa8b15a801 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -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); diff --git a/src/core/unit.c b/src/core/unit.c index 6a452f888ad..6bd68c7d465 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -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; diff --git a/src/core/unit.h b/src/core/unit.h index bf736a58704..831bce885c1 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -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_; -- 2.47.3