From de8be28e03b8e428269b076fac5e116a951d19df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 22 Aug 2020 11:55:20 +0200 Subject: [PATCH 1/2] shared/install: reduce scope of iterator variables --- src/shared/install.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/shared/install.c b/src/shared/install.c index 3d19387504..b08dc241e0 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -76,12 +76,10 @@ static bool unit_file_install_info_has_also(const UnitFileInstallInfo *i) { } void unit_file_presets_freep(UnitFilePresets *p) { - size_t i; - if (!p) return; - for (i = 0; i < p->n_rules; i++) { + for (size_t i = 0; i < p->n_rules; i++) { free(p->rules[i].pattern); strv_free(p->rules[i].instances); } @@ -290,11 +288,9 @@ int unit_file_changes_add( } void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) { - size_t i; - assert(changes || n_changes == 0); - for (i = 0; i < n_changes; i++) { + for (size_t i = 0; i < n_changes; i++) { free(changes[i].path); free(changes[i].source); } @@ -303,14 +299,13 @@ void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) { } void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet) { - size_t i; bool logged = false; assert(changes || n_changes == 0); /* If verb is not specified, errors are not allowed! */ assert(verb || r >= 0); - for (i = 0; i < n_changes; i++) { + for (size_t i = 0; i < n_changes; i++) { assert(verb || changes[i].type >= 0); switch(changes[i].type) { @@ -3091,12 +3086,11 @@ static int pattern_match_multiple_instances( static int query_presets(const char *name, const UnitFilePresets *presets, char ***instance_name_list) { PresetAction action = PRESET_UNKNOWN; - size_t i; - char **s; + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) return -EINVAL; - for (i = 0; i < presets->n_rules; i++) + for (size_t i = 0; i < presets->n_rules; i++) if (pattern_match_multiple_instances(presets->rules[i], name, instance_name_list) > 0 || fnmatch(presets->rules[i].pattern, name, FNM_NOESCAPE) == 0) { action = presets->rules[i].action; @@ -3108,10 +3102,11 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char log_debug("Preset files don't specify rule for %s. Enabling.", name); return 1; case PRESET_ENABLE: - if (instance_name_list && *instance_name_list) + if (instance_name_list && *instance_name_list) { + char **s; STRV_FOREACH(s, *instance_name_list) log_debug("Preset files say enable %s.", *s); - else + } else log_debug("Preset files say enable %s.", name); return 1; case PRESET_DISABLE: From 47ab95fe4315b3f7ee5a3694460a744bb88c52fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 22 Aug 2020 11:58:15 +0200 Subject: [PATCH 2/2] shared/install: fix preset operations for non-service instantiated units Fixes https://github.com/coreos/ignition/issues/1064. --- src/shared/install.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/shared/install.c b/src/shared/install.c index b08dc241e0..0f21cdc3f7 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -3050,20 +3050,17 @@ static int pattern_match_multiple_instances( /* Compose a list of specified instances when unit name is a template */ if (unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) { - _cleanup_free_ char *prefix = NULL; _cleanup_strv_free_ char **out_strv = NULL; + char **iter; - - r = unit_name_to_prefix(unit_name, &prefix); - if (r < 0) - return r; - STRV_FOREACH(iter, rule.instances) { _cleanup_free_ char *name = NULL; - r = unit_name_build(prefix, *iter, ".service", &name); + + r = unit_name_replace_instance(unit_name, *iter, &name); if (r < 0) return r; - r = strv_extend(&out_strv, name); + + r = strv_consume(&out_strv, TAKE_PTR(name)); if (r < 0) return r; }