]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: do not use strbuf_split()
authorJunio C Hamano <gitster@pobox.com>
Thu, 31 Jul 2025 22:54:29 +0000 (15:54 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Aug 2025 05:44:58 +0000 (22:44 -0700)
When parsing an old-style GIT_CONFIG_PARAMETERS environment
variable, the code parses key=value pairs by splitting them at '='
into an array of strbuf's.  As strbuf_split() leaves the delimiter
at the end of the split piece, the code has to manually trim it.

If we split with string_list_split(), that becomes unnecessary.
Retire the use of strbuf_split() from this code path.

Note that the max parameter of string_list_split() is of
an ergonomically iffy design---it specifies the maximum number of
times the function is allowed to split, which means that in order to
split a text into up to 2 pieces, you have to pass 1, not 2.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c

index 8a2d0b7916442f3775f8452395417b0e22b269ff..1769f15ee31862dd3fe3d7f4730de42bb59fdd01 100644 (file)
--- a/config.c
+++ b/config.c
@@ -638,31 +638,28 @@ int git_config_parse_parameter(const char *text,
                               config_fn_t fn, void *data)
 {
        const char *value;
-       struct strbuf **pair;
+       struct string_list pair = STRING_LIST_INIT_DUP;
        int ret;
        struct key_value_info kvi = KVI_INIT;
 
        kvi_from_param(&kvi);
 
-       pair = strbuf_split_str(text, '=', 2);
-       if (!pair[0])
+       string_list_split(&pair, text, "=", 1);
+       if (!pair.nr)
                return error(_("bogus config parameter: %s"), text);
 
-       if (pair[0]->len && pair[0]->buf[pair[0]->len - 1] == '=') {
-               strbuf_setlen(pair[0], pair[0]->len - 1);
-               value = pair[1] ? pair[1]->buf : "";
-       } else {
+       if (pair.nr == 1)
                value = NULL;
-       }
+       else
+               value = pair.items[1].string;
 
-       strbuf_trim(pair[0]);
-       if (!pair[0]->len) {
-               strbuf_list_free(pair);
+       if (!*pair.items[0].string) {
+               string_list_clear(&pair, 0);
                return error(_("bogus config parameter: %s"), text);
        }
 
-       ret = config_parse_pair(pair[0]->buf, value, &kvi, fn, data);
-       strbuf_list_free(pair);
+       ret = config_parse_pair(pair.items[0].string, value, &kvi, fn, data);
+       string_list_clear(&pair, 0);
        return ret;
 }