path-lookup: split out logic for mkdir/rmdir of generator dirs in their own functions

This commit is contained in:
Lennart Poettering 2016-02-25 01:44:30 +01:00
parent 3959135139
commit cd64fd5613
3 changed files with 40 additions and 15 deletions

View 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;
}

View 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);
}

View 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)