diff options
author | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-02-01 17:21:28 +0100 |
---|---|---|
committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2012-02-17 19:43:43 +0100 |
commit | 0774d94d31d072a4eb0958cad74a80977495a324 (patch) | |
tree | a7c7f3e40071a3bbc2044f9df61fbfdb42924242 | |
parent | fefd4551a5b53c6c0572bdcb063f113b0a763e1d (diff) | |
download | libgit2-0774d94d31d072a4eb0958cad74a80977495a324.tar.gz |
Store multivars in the multimap
-rw-r--r-- | src/config_file.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/config_file.c b/src/config_file.c index 9c4128d2b..e738064f2 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -720,7 +720,7 @@ static int config_parse(diskfile_backend *cfg_file) char *current_section = NULL; char *var_name; char *var_value; - cvar_t *var; + cvar_t *var, *existing; git_buf buf = GIT_BUF_INIT; /* Initialize the reading position */ @@ -779,8 +779,16 @@ static int config_parse(diskfile_backend *cfg_file) var->key = git_buf_detach(&buf); var->value = var_value; - /* FIXME: Actually support multivars, don't just overwrite */ - error = git_hashtable_insert(cfg_file->values, var->key, var); + /* Add or append the new config option */ + existing = git_hashtable_lookup(cfg_file->values, var->key); + if (existing == NULL) { + error = git_hashtable_insert(cfg_file->values, var->key, var); + } else { + while (existing->next != NULL) { + existing = existing->next; + } + existing->next = var; + } break; } |