]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/config: convert `key` to a local variable
authorPatrick Steinhardt <ps@pks.im>
Wed, 15 May 2024 06:42:58 +0000 (08:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 May 2024 14:17:56 +0000 (07:17 -0700)
The `key` variable is used by the `get_value()` function for two
purposes:

  - It is used to store the result of `git_config_parse_key()`, which is
    then passed on to `collect_config()`.

  - It is used as a store to convert the provided key to an
    all-lowercase key when `use_key_regexp` is set.

Neither of these cases warrant a global variable at all. In the former
case we can pass the key via `struct collect_config_data`. And in the
latter case we really only want to have it as a temporary local variable
such that we can free associated memory.

Refactor the code accordingly to reduce our reliance on global state.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/config.c

index 08a11b79996287015818e1a511ddef390585e71d..5a03dbb4526fdf6d029375ba9ed4b2c77d489f87 100644 (file)
@@ -123,7 +123,6 @@ struct config_display_options {
        .key_delim = ' ', \
 }
 
-static char *key;
 static int use_key_regexp;
 static int do_all;
 static int fixed_value;
@@ -325,6 +324,7 @@ struct collect_config_data {
        const struct config_display_options *display_opts;
        struct strbuf_list *values;
        const char *value_pattern;
+       const char *key;
        regex_t *regexp;
        regex_t *key_regexp;
        int do_not_match;
@@ -337,7 +337,7 @@ static int collect_config(const char *key_, const char *value_,
        struct strbuf_list *values = data->values;
        const struct key_value_info *kvi = ctx->kvi;
 
-       if (!use_key_regexp && strcmp(key_, key))
+       if (!use_key_regexp && strcmp(key_, data->key))
                return 0;
        if (use_key_regexp && regexec(data->key_regexp, key_, 0, NULL, 0))
                return 0;
@@ -364,6 +364,7 @@ static int get_value(const struct config_location_options *opts,
                .display_opts = display_opts,
                .values = &values,
        };
+       char *key = NULL;
        int i;
 
        if (use_key_regexp) {
@@ -395,6 +396,8 @@ static int get_value(const struct config_location_options *opts,
                        ret = CONFIG_INVALID_KEY;
                        goto free_strings;
                }
+
+               data.key = key;
        }
 
        if (regex_ && (flags & CONFIG_FLAGS_FIXED_VALUE))