case UNIT_FILE_USER:
- if (root_dir || runtime)
+ if (root_dir)
return -EINVAL;
- r = user_config_home(&p);
+ if (runtime)
+ r = user_runtime_dir(&p);
+ else
+ r = user_config_home(&p);
+
if (r <= 0)
return r < 0 ? r : -ENOENT;
assert(p);
- r = set_ensure_allocated(remove_symlinks_to, string_hash_func, string_compare_func);
+ r = set_ensure_allocated(remove_symlinks_to, &string_hash_ops);
if (r < 0)
return r;
UnitFileState *state) {
int r;
- _cleanup_free_ char *path2 = NULL;
+ _cleanup_free_ char *path = NULL;
bool same_name_link_runtime = false, same_name_link = false;
assert(scope >= 0);
assert(scope < _UNIT_FILE_SCOPE_MAX);
assert(name);
- if (scope == UNIT_FILE_SYSTEM || scope == UNIT_FILE_GLOBAL) {
- _cleanup_free_ char *path = NULL;
- /* First look in runtime config path */
- r = get_config_path(scope, true, root_dir, &path);
- if (r < 0)
- return r;
+ /* First look in runtime config path */
+ r = get_config_path(scope, true, root_dir, &path);
+ if (r < 0)
+ return r;
- r = find_symlinks(name, path, &same_name_link_runtime);
- if (r < 0)
- return r;
- else if (r > 0) {
- *state = UNIT_FILE_ENABLED_RUNTIME;
- return r;
- }
+ r = find_symlinks(name, path, &same_name_link_runtime);
+ if (r < 0)
+ return r;
+ else if (r > 0) {
+ *state = UNIT_FILE_ENABLED_RUNTIME;
+ return r;
}
/* Then look in the normal config path */
- r = get_config_path(scope, false, root_dir, &path2);
+ r = get_config_path(scope, false, root_dir, &path);
if (r < 0)
return r;
- r = find_symlinks(name, path2, &same_name_link);
+ r = find_symlinks(name, path, &same_name_link);
if (r < 0)
return r;
else if (r > 0) {
hashmap_get(c->will_install, name))
return 0;
- r = hashmap_ensure_allocated(&c->will_install, string_hash_func, string_compare_func);
+ r = hashmap_ensure_allocated(&c->will_install, &string_hash_ops);
if (r < 0)
return r;
if (r < 0)
return r;
- if (!unit_instance_is_valid(printed))
+ if (!unit_instance_is_valid(printed)) {
+ free(printed);
return -EINVAL;
+ }
free(i->default_instance);
i->default_instance = printed;
while ((i = hashmap_first(c->will_install))) {
- q = hashmap_ensure_allocated(&c->have_installed, string_hash_func, string_compare_func);
+ q = hashmap_ensure_allocated(&c->have_installed, &string_hash_ops);
if (q < 0)
return q;
while ((i = hashmap_first(c->will_install))) {
- q = hashmap_ensure_allocated(&c->have_installed, string_hash_func, string_compare_func);
+ q = hashmap_ensure_allocated(&c->have_installed, &string_hash_ops);
if (q < 0)
return q;
return r;
STRV_FOREACH(i, files) {
+ UnitFileState state;
+
+ state = unit_file_get_state(scope, root_dir, *i);
+ if (state < 0) {
+ log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
+ return state;
+ }
+
+ if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
+ log_error("Failed to enable unit: Unit %s is masked", *i);
+ return -ENOTSUP;
+ }
+
r = install_info_add_auto(&c, *i);
if (r < 0)
return r;