diff options
author | Lennart Poettering <lennart@poettering.net> | 2016-03-07 19:15:51 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2016-04-12 13:43:31 +0200 |
commit | 76adb5b8b57ce40947fd00f7b33ea7b1d1e1e738 (patch) | |
tree | b2336a38d5e656287de020374b07b8fe52e3071d /src/shared/install.c | |
parent | install: introduce a new unit file state "transient" (diff) | |
download | systemd-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.c | 67 |
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); |