diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-03-11 00:24:22 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-03-11 00:24:22 +0300 |
commit | 963792ed277bde985ea9ff4953529d656b186571 (patch) | |
tree | ce457fde106f33c0cd9c75b1c15a5169752431cb | |
parent | 34061299002fcbf5467385debbd9ad3d5f1c5a4e (diff) | |
parent | ad8c7cdadd96c66d0adf894250c8f4dd77bb2bee (diff) |
Merge branch 'jk/parse-config-key-cleanup'
The "parse_config_key()" API function has been cleaned up.
* jk/parse-config-key-cleanup:
parse_hide_refs_config: tell parse_config_key we don't want a subsection
parse_config_key: allow matching single-level config
parse_config_key: use skip_prefix instead of starts_with
-rw-r--r-- | cache.h | 5 | ||||
-rw-r--r-- | config.c | 15 | ||||
-rw-r--r-- | refs.c | 7 |
3 files changed, 16 insertions, 11 deletions
@@ -1863,8 +1863,11 @@ extern int git_config_include(const char *name, const char *value, void *data); * * (i.e., what gets handed to a config_fn_t). The caller provides the section; * we return -1 if it does not match, 0 otherwise. The subsection and key - * out-parameters are filled by the function (and subsection is NULL if it is + * out-parameters are filled by the function (and *subsection is NULL if it is * missing). + * + * If the subsection pointer-to-pointer passed in is NULL, returns 0 only if + * there is no subsection at all. */ extern int parse_config_key(const char *var, const char *section, @@ -2540,11 +2540,10 @@ int parse_config_key(const char *var, const char **subsection, int *subsection_len, const char **key) { - int section_len = strlen(section); const char *dot; /* Does it start with "section." ? */ - if (!starts_with(var, section) || var[section_len] != '.') + if (!skip_prefix(var, section, &var) || *var != '.') return -1; /* @@ -2556,12 +2555,16 @@ int parse_config_key(const char *var, *key = dot + 1; /* Did we have a subsection at all? */ - if (dot == var + section_len) { - *subsection = NULL; - *subsection_len = 0; + if (dot == var) { + if (subsection) { + *subsection = NULL; + *subsection_len = 0; + } } else { - *subsection = var + section_len + 1; + if (!subsection) + return -1; + *subsection = var + 1; *subsection_len = dot - *subsection; } @@ -1035,11 +1035,10 @@ static struct string_list *hide_refs; int parse_hide_refs_config(const char *var, const char *value, const char *section) { - const char *subsection, *key; - int subsection_len; + const char *key; if (!strcmp("transfer.hiderefs", var) || - (!parse_config_key(var, section, &subsection, &subsection_len, &key) - && !subsection && !strcmp(key, "hiderefs"))) { + (!parse_config_key(var, section, NULL, NULL, &key) && + !strcmp(key, "hiderefs"))) { char *ref; int len; |