Zbigniew Jędrzejewski-Szmek ea1976
From 6ce0f84be6b567660fc4ad4e766ef14217392c05 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek ea1976
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek ea1976
Date: Wed, 29 Oct 2014 22:46:30 -0400
Zbigniew Jędrzejewski-Szmek ea1976
Subject: [PATCH] systemctl: let list-{units,unit-files } honour --type
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
The docs don't clarify what is expected, but I don't see any reason
Zbigniew Jędrzejewski-Szmek ea1976
why --type should be ignored.
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
Also restucture the compund conditions into separate clauses for
Zbigniew Jędrzejewski-Szmek ea1976
easier reading.
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
(cherry picked from commit 6c71341aeecc3d092ed90f66e1b2c481b8e260ff)
Zbigniew Jędrzejewski-Szmek ea1976
---
Zbigniew Jędrzejewski-Szmek ea1976
 src/systemctl/systemctl.c | 48 ++++++++++++++++++++++++++++++++++++-----------
Zbigniew Jędrzejewski-Szmek ea1976
 1 file changed, 37 insertions(+), 11 deletions(-)
Zbigniew Jędrzejewski-Szmek ea1976
Zbigniew Jędrzejewski-Szmek ea1976
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek ea1976
index 28eaa6a847..b71040be40 100644
Zbigniew Jędrzejewski-Szmek ea1976
--- a/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek ea1976
+++ b/src/systemctl/systemctl.c
Zbigniew Jędrzejewski-Szmek ea1976
@@ -301,21 +301,37 @@ static int compare_unit_info(const void *a, const void *b) {
Zbigniew Jędrzejewski-Szmek ea1976
 }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
 static bool output_show_unit(const UnitInfo *u, char **patterns) {
Zbigniew Jędrzejewski-Szmek ea1976
-        const char *dot;
Zbigniew Jędrzejewski-Szmek ea1976
-
Zbigniew Jędrzejewski-Szmek ea1976
         if (!strv_isempty(patterns)) {
Zbigniew Jędrzejewski-Szmek ea1976
                 char **pattern;
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
                 STRV_FOREACH(pattern, patterns)
Zbigniew Jędrzejewski-Szmek ea1976
                         if (fnmatch(*pattern, u->id, FNM_NOESCAPE) == 0)
Zbigniew Jędrzejewski-Szmek ea1976
-                                return true;
Zbigniew Jędrzejewski-Szmek ea1976
+                                goto next;
Zbigniew Jędrzejewski-Szmek ea1976
                 return false;
Zbigniew Jędrzejewski-Szmek ea1976
         }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
-        return (!arg_types || ((dot = strrchr(u->id, '.')) &&
Zbigniew Jędrzejewski-Szmek ea1976
-                               strv_find(arg_types, dot+1))) &&
Zbigniew Jędrzejewski-Szmek ea1976
-                (arg_all || !(streq(u->active_state, "inactive")
Zbigniew Jędrzejewski-Szmek ea1976
-                              || u->following[0]) || u->job_id > 0);
Zbigniew Jędrzejewski-Szmek ea1976
+next:
Zbigniew Jędrzejewski-Szmek ea1976
+        if (arg_types) {
Zbigniew Jędrzejewski-Szmek ea1976
+                const char *dot;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+                dot = strrchr(u->id, '.');
Zbigniew Jędrzejewski-Szmek ea1976
+                if (!dot)
Zbigniew Jędrzejewski-Szmek ea1976
+                        return false;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+                if (!strv_find(arg_types, dot+1))
Zbigniew Jędrzejewski-Szmek ea1976
+                        return false;
Zbigniew Jędrzejewski-Szmek ea1976
+        }
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+        if (arg_all)
Zbigniew Jędrzejewski-Szmek ea1976
+                return true;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+        if (u->job_id > 0)
Zbigniew Jędrzejewski-Szmek ea1976
+                return true;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+        if (streq(u->active_state, "inactive") || u->following[0])
Zbigniew Jędrzejewski-Szmek ea1976
+                return false;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+        return true;
Zbigniew Jędrzejewski-Szmek ea1976
 }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
 static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
Zbigniew Jędrzejewski-Szmek ea1976
@@ -1231,18 +1247,28 @@ static int compare_unit_file_list(const void *a, const void *b) {
Zbigniew Jędrzejewski-Szmek ea1976
 }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
 static bool output_show_unit_file(const UnitFileList *u, char **patterns) {
Zbigniew Jędrzejewski-Szmek ea1976
-        const char *dot;
Zbigniew Jędrzejewski-Szmek ea1976
-
Zbigniew Jędrzejewski-Szmek ea1976
         if (!strv_isempty(patterns)) {
Zbigniew Jędrzejewski-Szmek ea1976
                 char **pattern;
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
                 STRV_FOREACH(pattern, patterns)
Zbigniew Jędrzejewski-Szmek ea1976
                         if (fnmatch(*pattern, basename(u->path), FNM_NOESCAPE) == 0)
Zbigniew Jędrzejewski-Szmek ea1976
-                                return true;
Zbigniew Jędrzejewski-Szmek ea1976
+                                goto next;
Zbigniew Jędrzejewski-Szmek ea1976
                 return false;
Zbigniew Jędrzejewski-Szmek ea1976
         }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
-        return !arg_types || ((dot = strrchr(u->path, '.')) && strv_find(arg_types, dot+1));
Zbigniew Jędrzejewski-Szmek ea1976
+next:
Zbigniew Jędrzejewski-Szmek ea1976
+        if (!strv_isempty(arg_types)) {
Zbigniew Jędrzejewski-Szmek ea1976
+                const char *dot;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+                dot = strrchr(u->path, '.');
Zbigniew Jędrzejewski-Szmek ea1976
+                if (!dot)
Zbigniew Jędrzejewski-Szmek ea1976
+                        return false;
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+                if (!strv_find(arg_types, dot+1))
Zbigniew Jędrzejewski-Szmek ea1976
+                        return false;
Zbigniew Jędrzejewski-Szmek ea1976
+        }
Zbigniew Jędrzejewski-Szmek ea1976
+
Zbigniew Jędrzejewski-Szmek ea1976
+        return true;
Zbigniew Jędrzejewski-Szmek ea1976
 }
Zbigniew Jędrzejewski-Szmek ea1976
 
Zbigniew Jędrzejewski-Szmek ea1976
 static void output_unit_file_list(const UnitFileList *units, unsigned c) {