diff options
author | Ross Lagerwall <rosslagerwall@gmail.com> | 2013-06-17 19:11:50 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-07-13 07:56:11 -0400 |
commit | 92d430a9e03056c0f62ed49149d59aed0046d0dd (patch) | |
tree | 8f9954fdf056f4f7768f90f5a3e49de50e9f9a38 /src | |
parent | 6a75304e41e4487d840057a0e5f9972e141e4540 (diff) |
install: make "reenable" work with templated units
Before, "systemctl reenable getty@tty1.service" would fail with:
Failed to issue method call: File exists
To fix this, reimplement "reenable" explicitly as a disable followed by
an enable.
This is shorter and is how the man page documents its behavior.
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/install.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/src/shared/install.c b/src/shared/install.c index eb9a5fc0b5..116106824f 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -1534,43 +1534,15 @@ int unit_file_reenable( bool force, UnitFileChange **changes, unsigned *n_changes) { + int r; - _cleanup_lookup_paths_free_ LookupPaths paths = {}; - _cleanup_install_context_done_ InstallContext c = {}; - char **i; - _cleanup_free_ char *config_path = NULL; - _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; - int r, q; - - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); - - r = lookup_paths_init_from_scope(&paths, scope); - if (r < 0) - return r; - - r = get_config_path(scope, runtime, root_dir, &config_path); + r = unit_file_disable(scope, runtime, root_dir, files, + changes, n_changes); if (r < 0) return r; - STRV_FOREACH(i, files) { - r = mark_symlink_for_removal(&remove_symlinks_to, *i); - if (r < 0) - return r; - - r = install_info_add_auto(&c, *i); - if (r < 0) - return r; - } - - r = remove_marked_symlinks(remove_symlinks_to, config_path, changes, n_changes, files); - - /* Returns number of symlinks that where supposed to be installed. */ - q = install_context_apply(&c, &paths, config_path, root_dir, force, changes, n_changes); - if (r == 0) - r = q; - - return r; + return unit_file_enable(scope, runtime, root_dir, files, force, + changes, n_changes); } int unit_file_set_default( |