summaryrefslogtreecommitdiffstats
path: root/src/shared/install.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-03-07 19:15:51 +0100
committerLennart Poettering <lennart@poettering.net>2016-04-12 13:43:31 +0200
commit76adb5b8b57ce40947fd00f7b33ea7b1d1e1e738 (patch)
treeb2336a38d5e656287de020374b07b8fe52e3071d /src/shared/install.c
parentinstall: introduce a new unit file state "transient" (diff)
downloadsystemd-76adb5b8b57ce40947fd00f7b33ea7b1d1e1e738.tar.xz
systemd-76adb5b8b57ce40947fd00f7b33ea7b1d1e1e738.zip
install: unify checking whether operations may be applied to a unit file in a new function
Let's replace repeated code by a single implementation in a single function.
Diffstat (limited to 'src/shared/install.c')
-rw-r--r--src/shared/install.c67
1 files changed, 35 insertions, 32 deletions
diff --git a/src/shared/install.c b/src/shared/install.c
index c19c85a3b5..f78cc814e5 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -704,6 +704,23 @@ static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *nam
return ordered_hashmap_get(c->will_process, name);
}
+static int install_info_may_process(UnitFileInstallInfo *i, const LookupPaths *paths) {
+ assert(i);
+ assert(paths);
+
+ /* Checks whether the loaded unit file is one we should process, or is masked, transient or generated and thus
+ * not subject to enable/disable operations. */
+
+ if (i->type == UNIT_FILE_TYPE_MASKED)
+ return -ESHUTDOWN;
+ if (path_is_generator(paths, i->path))
+ return -EADDRNOTAVAIL;
+ if (path_is_transient(paths, i->path))
+ return -EADDRNOTAVAIL;
+
+ return 0;
+}
+
static int install_info_add(
InstallContext *c,
const char *name,
@@ -1719,12 +1736,9 @@ int unit_file_add_dependency(
r = install_info_discover(scope, &c, &paths, target, SEARCH_FOLLOW_CONFIG_SYMLINKS, &target_info);
if (r < 0)
return r;
- if (target_info->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
- if (path_is_generator(&paths, target_info->path))
- return -EADDRNOTAVAIL;
- if (path_is_transient(&paths, target_info->path))
- return -EADDRNOTAVAIL;
+ r = install_info_may_process(target_info, &paths);
+ if (r < 0)
+ return r;
assert(target_info->type == UNIT_FILE_TYPE_REGULAR);
@@ -1734,12 +1748,9 @@ int unit_file_add_dependency(
r = install_info_discover(scope, &c, &paths, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS, &i);
if (r < 0)
return r;
- if (i->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
- if (path_is_generator(&paths, i->path))
- return -EADDRNOTAVAIL;
- if (path_is_transient(&paths, i->path))
- return -EADDRNOTAVAIL;
+ r = install_info_may_process(i, &paths);
+ if (r < 0)
+ return r;
assert(i->type == UNIT_FILE_TYPE_REGULAR);
@@ -1790,12 +1801,9 @@ int unit_file_enable(
r = install_info_discover(scope, &c, &paths, *f, SEARCH_LOAD, &i);
if (r < 0)
return r;
- if (i->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
- if (path_is_generator(&paths, i->path))
- return -EADDRNOTAVAIL;
- if (path_is_transient(&paths, i->path))
- return -EADDRNOTAVAIL;
+ r = install_info_may_process(i, &paths);
+ if (r < 0)
+ return r;
assert(i->type == UNIT_FILE_TYPE_REGULAR);
}
@@ -1906,12 +1914,9 @@ int unit_file_set_default(
r = install_info_discover(scope, &c, &paths, name, 0, &i);
if (r < 0)
return r;
- if (i->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
- if (path_is_generator(&paths, i->path))
- return -EADDRNOTAVAIL;
- if (path_is_transient(&paths, i->path))
- return -EADDRNOTAVAIL;
+ r = install_info_may_process(i, &paths);
+ if (r < 0)
+ return r;
old_path = skip_root(&paths, i->path);
new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
@@ -1941,8 +1946,9 @@ int unit_file_get_default(
r = install_info_discover(scope, &c, &paths, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS, &i);
if (r < 0)
return r;
- if (i->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
+ r = install_info_may_process(i, &paths);
+ if (r < 0)
+ return r;
n = strdup(i->name);
if (!n)
@@ -2201,12 +2207,9 @@ static int preset_prepare_one(
if (r < 0)
return r;
- if (i->type == UNIT_FILE_TYPE_MASKED)
- return -ESHUTDOWN;
- if (path_is_generator(paths, i->path))
- return -EADDRNOTAVAIL;
- if (path_is_transient(paths, i->path))
- return -EADDRNOTAVAIL;
+ r = install_info_may_process(i, paths);
+ if (r < 0)
+ return r;
} else
r = install_info_discover(scope, minus, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, &i);