[systemd-devel] [PATCH 4/4] systemctl: unit_find_paths(): unify error handling in two code pathes

Ivan Shapovalov intelfx100 at gmail.com
Fri Dec 19 06:08:10 PST 2014


---
 src/systemctl/systemctl.c | 63 ++++++++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 28 deletions(-)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 20c367c..2a4e2a2 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2309,6 +2309,9 @@ static int unit_find_paths(sd_bus *bus,
                            LookupPaths *lp,
                            char **fragment_path,
                            char ***dropin_paths) {
+
+        _cleanup_free_ char *path = NULL;
+        _cleanup_strv_free_ char **dropins = NULL;
         int r;
 
         /**
@@ -2327,8 +2330,6 @@ static int unit_find_paths(sd_bus *bus,
                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
                 _cleanup_bus_message_unref_ sd_bus_message *unit_load_error = NULL;
                 _cleanup_free_ char *unit = NULL;
-                _cleanup_free_ char *path = NULL;
-                _cleanup_strv_free_ char **dropins = NULL;
                 _cleanup_strv_free_ char **load_error = NULL;
                 char *unit_load_error_name, *unit_load_error_message;
 
@@ -2375,28 +2376,17 @@ static int unit_find_paths(sd_bus *bus,
                 if (r < 0)
                         return log_error_errno(r, "Failed to get FragmentPath: %s", bus_error_message(&error, r));
 
-                r = sd_bus_get_property_strv(
-                                bus,
-                                "org.freedesktop.systemd1",
-                                unit,
-                                "org.freedesktop.systemd1.Unit",
-                                "DropInPaths",
-                                &error,
-                                &dropins);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to get DropInPaths: %s", bus_error_message(&error, r));
-
-                r = 0;
-                if (!isempty(path)) {
-                        *fragment_path = path;
-                        path = NULL;
-                        r = 1;
-                }
-
-                if (dropin_paths && !strv_isempty(dropins)) {
-                        *dropin_paths = dropins;
-                        dropins = NULL;
-                        r = 1;
+                if (dropin_paths) {
+                        r = sd_bus_get_property_strv(
+                                        bus,
+                                        "org.freedesktop.systemd1",
+                                        unit,
+                                        "org.freedesktop.systemd1.Unit",
+                                        "DropInPaths",
+                                        &error,
+                                        &dropins);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to get DropInPaths: %s", bus_error_message(&error, r));
                 }
         } else {
                 _cleanup_set_free_ Set *names;
@@ -2409,7 +2399,7 @@ static int unit_find_paths(sd_bus *bus,
                 if (r < 0)
                         return r;
 
-                r = unit_file_find_path(lp, unit_name, fragment_path);
+                r = unit_file_find_path(lp, unit_name, &path);
                 if (r < 0)
                         return r;
 
@@ -2421,14 +2411,31 @@ static int unit_find_paths(sd_bus *bus,
                                 return log_oom();
 
                         if (!streq(template, unit_name)) {
-                                r = unit_file_find_path(lp, template, fragment_path);
+                                r = unit_file_find_path(lp, template, &path);
                                 if (r < 0)
                                         return r;
                         }
                 }
 
-                if (dropin_paths)
-                        r = unit_file_find_dropin_paths(lp->unit_path, NULL, names, dropin_paths);
+                if (dropin_paths) {
+                        r = unit_file_find_dropin_paths(lp->unit_path, NULL, names, &dropins);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
+        r = 0;
+
+        if (!isempty(path)) {
+                *fragment_path = path;
+                path = NULL;
+                r = 1;
+        }
+
+        if (dropin_paths && !strv_isempty(dropins)) {
+                *dropin_paths = dropins;
+                dropins = NULL;
+                r = 1;
         }
 
         if (r == 0) {
-- 
2.2.0



More information about the systemd-devel mailing list