diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2013-08-08 19:57:59 +0400 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2013-08-08 22:38:42 +0400 |
commit | 99dfb538addc06c2f40d29371c52dd43f0d6ceb1 (patch) | |
tree | 510b54d1c86f58ebb48caadb455e9c7c20a919d2 /src/config_file.c | |
parent | cca5df6376fd41fb4fbbb9f8a9ff87c38079dfd5 (diff) |
config: working multivar iterator
Implement the foreach version as a wrapper around the iterator.
Diffstat (limited to 'src/config_file.c')
-rw-r--r-- | src/config_file.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/config_file.c b/src/config_file.c index 74b200073..38cb9f8b8 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -261,7 +261,7 @@ static void config_iterator_free( } static int config_iterator_next( - git_config_entry *entry, + git_config_entry **entry, git_config_iterator *iter) { git_config_file_iter *it = (git_config_file_iter *) iter; @@ -282,9 +282,7 @@ static int config_iterator_next( return -1; } - entry->name = key; - entry->value = var->entry->value; - entry->level = var->entry->level; + *entry = var->entry; it->next_var = CVAR_LIST_NEXT(var); return 0; @@ -433,19 +431,18 @@ static void foreach_iter_free(git_config_iterator *_iter) git__free(iter); } -static int foreach_iter_next(git_config_entry *out, git_config_iterator *_iter) +static int foreach_iter_next(git_config_entry **out, git_config_iterator *_iter) { foreach_iter *iter = (foreach_iter *) _iter; cvar_t* var = iter->var; + if (var == NULL) return GIT_ITEROVER; if (!iter->have_regex) { - out->name = var->entry->name; - out->value = var->entry->value; - + *out = var->entry; iter->var = var->next; return 0; } @@ -455,10 +452,11 @@ static int foreach_iter_next(git_config_entry *out, git_config_iterator *_iter) git_config_entry *entry = var->entry; regex_t *regex = &iter->regex;; if (regexec(regex, entry->value, 0, NULL, 0) == 0) { - out->name = entry->name; - out->value = entry->value; + *out = entry; + iter->var = var->next; return 0; } + var = var->next; } while(var != NULL); return GIT_ITEROVER; @@ -550,7 +548,7 @@ static int config_get_multivar_foreach( if (regexec(®ex, var->entry->value, 0, NULL, 0) == 0) { /* early termination by the user is not an error; * just break and return successfully */ - if (fn(var->entry, data) < 0) + if (fn(var->entry, data)) break; } |