summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.c8
-rw-r--r--src/config.h5
-rw-r--r--src/config_file.c59
3 files changed, 34 insertions, 38 deletions
diff --git a/src/config.c b/src/config.c
index a4627c9ad..5bec0f040 100644
--- a/src/config.c
+++ b/src/config.c
@@ -328,7 +328,7 @@ int git_config_backend_foreach_match(
void *data)
{
git_config_entry entry;
- git_config_backend_iter* iter;
+ git_config_iterator* iter;
regex_t regex;
int result = 0;
@@ -340,12 +340,12 @@ int git_config_backend_foreach_match(
}
}
- if ((result = backend->iterator_new(&iter, backend)) < 0) {
+ if ((result = backend->iterator(&iter, backend)) < 0) {
iter = NULL;
return -1;
}
- while(!(backend->next(&entry, iter) < 0)) {
+ while(!(iter->next(&entry, iter) < 0)) {
/* skip non-matching keys if regexp was provided */
if (regexp && regexec(&regex, entry.name, 0, NULL, 0) != 0)
continue;
@@ -362,7 +362,7 @@ cleanup:
if (regexp != NULL)
regfree(&regex);
- backend->iterator_free(iter);
+ iter->free(iter);
return result;
}
diff --git a/src/config.h b/src/config.h
index 2f7c96d7f..c5c11ae14 100644
--- a/src/config.h
+++ b/src/config.h
@@ -24,11 +24,6 @@ struct git_config {
git_vector files;
};
-struct git_config_backend_iter {
- git_config_backend *backend;
- unsigned int flags;
-};
-
extern int git_config_find_global_r(git_buf *global_config_path);
extern int git_config_find_xdg_r(git_buf *system_config_path);
extern int git_config_find_system_r(git_buf *system_config_path);
diff --git a/src/config_file.c b/src/config_file.c
index ed79624eb..3e0c6cc0b 100644
--- a/src/config_file.c
+++ b/src/config_file.c
@@ -28,9 +28,9 @@ typedef struct cvar_t {
} cvar_t;
typedef struct git_config_file_iter {
- git_config_backend_iter parent;
+ git_config_iterator parent;
git_strmap_iter iter;
- cvar_t* next;
+ cvar_t* next_var;
} git_config_file_iter;
@@ -254,32 +254,15 @@ static void backend_free(git_config_backend *_backend)
git__free(backend);
}
-static int config_iterator_new(
- git_config_backend_iter **iter,
- struct git_config_backend* backend)
-{
- diskfile_backend *b = (diskfile_backend *)backend;
- git_config_file_iter *it = git__calloc(1, sizeof(git_config_file_iter));
-
- GITERR_CHECK_ALLOC(it);
-
- it->parent.backend = backend;
- it->iter = git_strmap_begin(b->values);
- it->next = NULL;
- *iter = (git_config_backend_iter *) it;
-
- return 0;
-}
-
static void config_iterator_free(
- git_config_backend_iter* iter)
+ git_config_iterator* iter)
{
git__free(iter);
}
static int config_iterator_next(
git_config_entry *entry,
- git_config_backend_iter *iter)
+ git_config_iterator *iter)
{
git_config_file_iter *it = (git_config_file_iter *) iter;
diskfile_backend *b = (diskfile_backend *) it->parent.backend;
@@ -287,22 +270,42 @@ static int config_iterator_next(
cvar_t * var;
const char* key;
- if (it->next == NULL) {
+ if (it->next_var == NULL) {
err = git_strmap_next(&key, (void**) &var, &(it->iter), b->values);
} else {
- key = it->next->entry->name;
- var = it->next;
+ key = it->next_var->entry->name;
+ var = it->next_var;
}
if (err < 0) {
- it->next = NULL;
+ it->next_var = NULL;
return -1;
}
entry->name = key;
entry->value = var->entry->value;
entry->level = var->entry->level;
- it->next = CVAR_LIST_NEXT(var);
+ it->next_var = CVAR_LIST_NEXT(var);
+
+ return 0;
+}
+
+static int config_iterator_new(
+ git_config_iterator **iter,
+ struct git_config_backend* backend)
+{
+ diskfile_backend *b = (diskfile_backend *)backend;
+ git_config_file_iter *it = git__calloc(1, sizeof(git_config_file_iter));
+
+ GITERR_CHECK_ALLOC(it);
+
+ it->parent.backend = backend;
+ it->iter = git_strmap_begin(b->values);
+ it->next_var = NULL;
+
+ it->parent.next = config_iterator_next;
+ it->parent.free = config_iterator_free;
+ *iter = (git_config_iterator *) it;
return 0;
}
@@ -607,9 +610,7 @@ int git_config_file__ondisk(git_config_backend **out, const char *path)
backend->parent.set = config_set;
backend->parent.set_multivar = config_set_multivar;
backend->parent.del = config_delete;
- backend->parent.iterator_new = config_iterator_new;
- backend->parent.iterator_free = config_iterator_free;
- backend->parent.next = config_iterator_next;
+ backend->parent.iterator = config_iterator_new;
backend->parent.refresh = config_refresh;
backend->parent.free = backend_free;