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;
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;
}
#include "install.h"
#include "log.h"
#include "macro.h"
+#include "mkdir.h"
#include "path-lookup.h"
#include "path-util.h"
#include "stat-util.h"
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;
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);
+}
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)