From: Daan De Meyer Date: Wed, 7 Aug 2024 11:12:03 +0000 (+0200) Subject: core: Introduce unit_is_filtered() X-Git-Tag: v257-rc1~705^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d2984d21bf2a8f71d379ef6bc13a761bb2e2756;p=thirdparty%2Fsystemd.git core: Introduce unit_is_filtered() --- 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_;