summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@elego.de>2011-03-29 13:50:37 +0200
committerCarlos Martín Nieto <cmn@elego.de>2011-03-29 13:50:37 +0200
commit3d23b74af75bc35b3676c1a7fc1f5a0299c9f4ee (patch)
tree22a88766750d6c8454383018718045a78c24fcc3
parent238df5590cfb9f1cfc340938188b2425f9510f48 (diff)
downloadlibgit2-3d23b74af75bc35b3676c1a7fc1f5a0299c9f4ee.tar.gz
Free the config var hash contents in git_config_free
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
-rw-r--r--src/config.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c
index 22ba5f56d..5c500c47f 100644
--- a/src/config.c
+++ b/src/config.c
@@ -35,6 +35,15 @@
***********************/
static int config_parse(git_config *cfg_file);
static int parse_variable(git_config *cfg, const char *section_name, const char *line);
+void git_config_free(git_config *cfg);
+
+static void cvar_free(git_cvar *var)
+{
+ if(var->type == GIT_VAR_STR)
+ free(var->value.string);
+
+ free(var);
+}
uint32_t config_table_hash(const void *key, int hash_id)
{
@@ -101,10 +110,18 @@ int git_config_open(git_config **cfg_out, const char *path)
void git_config_free(git_config *cfg)
{
+ git_cvar *var;
+ const void *_unused;
+
if (cfg == NULL)
return;
free(cfg->file_path);
+
+ GIT_HASHTABLE_FOREACH(cfg->vars, _unused, var,
+ cvar_free(var);
+ );
+
git_hashtable_free(cfg->vars);
gitfo_free_buf(&cfg->reader.buffer);