Commit c6d2a2c0 by Russell Belfer

Fixed up memory leaks

parent 73b51450
...@@ -207,10 +207,8 @@ int git_attr_add_macro( ...@@ -207,10 +207,8 @@ int git_attr_add_macro(
if (error == GIT_SUCCESS) if (error == GIT_SUCCESS)
error = git_attr_cache__insert_macro(repo, macro); error = git_attr_cache__insert_macro(repo, macro);
if (error < GIT_SUCCESS) { if (error < GIT_SUCCESS)
git_attr_rule__free(macro); git_attr_rule__free(macro);
git__free(macro);
}
return error; return error;
} }
......
...@@ -8,6 +8,7 @@ const char *git_attr__false = "[internal]__FALSE__"; ...@@ -8,6 +8,7 @@ const char *git_attr__false = "[internal]__FALSE__";
static int git_attr_fnmatch__parse(git_attr_fnmatch *spec, const char **base); static int git_attr_fnmatch__parse(git_attr_fnmatch *spec, const char **base);
static int sort_by_hash_and_name(const void *a_raw, const void *b_raw); static int sort_by_hash_and_name(const void *a_raw, const void *b_raw);
static void git_attr_rule__clear(git_attr_rule *rule);
int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro) int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro)
{ {
...@@ -72,7 +73,7 @@ int git_attr_file__from_buffer( ...@@ -72,7 +73,7 @@ int git_attr_file__from_buffer(
/* if the rule wasn't a pattern, on to the next */ /* if the rule wasn't a pattern, on to the next */
if (error != GIT_SUCCESS) { if (error != GIT_SUCCESS) {
git_attr_rule__free(rule); /* free anything partially allocated */ git_attr_rule__clear(rule); /* reset rule contents */
if (error == GIT_ENOTFOUND) if (error == GIT_ENOTFOUND)
error = GIT_SUCCESS; error = GIT_SUCCESS;
} else { } else {
...@@ -82,9 +83,8 @@ int git_attr_file__from_buffer( ...@@ -82,9 +83,8 @@ int git_attr_file__from_buffer(
cleanup: cleanup:
if (error != GIT_SUCCESS) { if (error != GIT_SUCCESS) {
git__free(rule); git_attr_rule__free(rule);
git_attr_file__free(attrs); git_attr_file__free(attrs);
git__free(attrs);
} else { } else {
*out = attrs; *out = attrs;
} }
...@@ -122,14 +122,15 @@ void git_attr_file__free(git_attr_file *file) ...@@ -122,14 +122,15 @@ void git_attr_file__free(git_attr_file *file)
if (!file) if (!file)
return; return;
git_vector_foreach(&file->rules, i, rule) { git_vector_foreach(&file->rules, i, rule)
git_attr_rule__free(rule); git_attr_rule__free(rule);
}
git_vector_free(&file->rules); git_vector_free(&file->rules);
git__free(file->path); git__free(file->path);
file->path = NULL; file->path = NULL;
git__free(file);
} }
unsigned long git_attr_file__name_hash(const char *name) unsigned long git_attr_file__name_hash(const char *name)
...@@ -505,7 +506,7 @@ int git_attr_assignment__parse( ...@@ -505,7 +506,7 @@ int git_attr_assignment__parse(
return error; return error;
} }
void git_attr_rule__free(git_attr_rule *rule) static void git_attr_rule__clear(git_attr_rule *rule)
{ {
unsigned int i; unsigned int i;
git_attr_assignment *assign; git_attr_assignment *assign;
...@@ -525,3 +526,10 @@ void git_attr_rule__free(git_attr_rule *rule) ...@@ -525,3 +526,10 @@ void git_attr_rule__free(git_attr_rule *rule)
git_vector_free(&rule->assigns); git_vector_free(&rule->assigns);
} }
void git_attr_rule__free(git_attr_rule *rule)
{
git_attr_rule__clear(rule);
git__free(rule);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment