]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
path-lookup: split out logic for mkdir/rmdir of generator dirs in their own functions
authorLennart Poettering <lennart@poettering.net>
Thu, 25 Feb 2016 00:44:30 +0000 (01:44 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 12 Apr 2016 11:43:30 +0000 (13:43 +0200)
src/core/manager.c
src/shared/path-lookup.c
src/shared/path-lookup.h

index 1bc7921abe8f58cd3d9a9abb92d03c730318ef5f..d48b41d88ff557fcb98348f064927bd8b747ffda 100644 (file)
@@ -2737,15 +2737,7 @@ static int manager_run_generators(Manager *m) {
         return 0;
 
  found:
-        r = mkdir_p_label(m->lookup_paths.generator, 0755);
-        if (r < 0)
-                goto finish;
-
-        r = mkdir_p_label(m->lookup_paths.generator_early, 0755);
-        if (r < 0)
-                goto finish;
-
-        r = mkdir_p_label(m->lookup_paths.generator_late, 0755);
+        r = lookup_paths_mkdir_generator(&m->lookup_paths);
         if (r < 0)
                 goto finish;
 
@@ -2759,10 +2751,7 @@ static int manager_run_generators(Manager *m) {
                 execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, (char**) argv);
 
 finish:
-        /* Trim empty dirs */
-        (void) rmdir(m->lookup_paths.generator);
-        (void) rmdir(m->lookup_paths.generator_early);
-        (void) rmdir(m->lookup_paths.generator_late);
+        lookup_paths_trim_generator(&m->lookup_paths);
         return r;
 }
 
index f437de370ca3919547dc373d4676aeff677ee38c..083e46747524e648a6a011f9384c51fc498f25d0 100644 (file)
@@ -26,6 +26,7 @@
 #include "install.h"
 #include "log.h"
 #include "macro.h"
+#include "mkdir.h"
 #include "path-lookup.h"
 #include "path-util.h"
 #include "stat-util.h"
@@ -457,8 +458,7 @@ int lookup_paths_init(
         if (r < 0 && r != -EOPNOTSUPP && r != -ENXIO)
                 return r;
 
-        /* First priority is whatever has been passed to us via env
-         * vars */
+        /* First priority is whatever has been passed to us via env vars */
         e = getenv("SYSTEMD_UNIT_PATH");
         if (e) {
                 const char *k;
@@ -633,3 +633,36 @@ void lookup_paths_free(LookupPaths *p) {
 
         p->root_dir = mfree(p->root_dir);
 }
+
+int lookup_paths_mkdir_generator(LookupPaths *p) {
+        int r, q;
+
+        assert(p);
+
+        r = mkdir_p_label(p->generator, 0755);
+
+        q = mkdir_p_label(p->generator_early, 0755);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        q = mkdir_p_label(p->generator_late, 0755);
+        if (q < 0 && r >= 0)
+                r = q;
+
+        return r;
+}
+
+void lookup_paths_trim_generator(LookupPaths *p) {
+        assert(p);
+
+        /* Trim empty dirs */
+
+        if (p->generator)
+                (void) rmdir(p->generator);
+
+        if (p->generator_early)
+                (void) rmdir(p->generator_early);
+
+        if (p->generator_late)
+                (void) rmdir(p->generator_late);
+}
index b0603c0c99bc52c2408bc4f63615076118558420..27be1d8be8bfc76f3d2517cc206083b1de6b0598 100644 (file)
@@ -52,5 +52,8 @@ char **generator_paths(UnitFileScope scope);
 
 int lookup_paths_init(LookupPaths *p, UnitFileScope scope, const char *root_dir);
 
+int lookup_paths_mkdir_generator(LookupPaths *p);
+void lookup_paths_trim_generator(LookupPaths *p);
+
 void lookup_paths_free(LookupPaths *p);
 #define _cleanup_lookup_paths_free_ _cleanup_(lookup_paths_free)