summaryrefslogtreecommitdiff
path: root/src/attr_file.c
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2011-12-29 21:31:30 -0800
committerRussell Belfer <arrbee@arrbee.com>2011-12-29 21:32:37 -0800
commitc6d2a2c0946ff32c16578b68b39824f4fea8f782 (patch)
treef2ccc9c271e1d52793c8bea3e2f28ba03ce4db14 /src/attr_file.c
parent73b51450a3194ddaa2ac180a1fea25fdf66971bb (diff)
downloadlibgit2-c6d2a2c0946ff32c16578b68b39824f4fea8f782.tar.gz
Fixed up memory leaks
Diffstat (limited to 'src/attr_file.c')
-rw-r--r--src/attr_file.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/attr_file.c b/src/attr_file.c
index 0b1eb1f67..a1379054b 100644
--- a/src/attr_file.c
+++ b/src/attr_file.c
@@ -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 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)
{
@@ -72,7 +73,7 @@ int git_attr_file__from_buffer(
/* if the rule wasn't a pattern, on to the next */
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)
error = GIT_SUCCESS;
} else {
@@ -82,9 +83,8 @@ int git_attr_file__from_buffer(
cleanup:
if (error != GIT_SUCCESS) {
- git__free(rule);
+ git_attr_rule__free(rule);
git_attr_file__free(attrs);
- git__free(attrs);
} else {
*out = attrs;
}
@@ -122,14 +122,15 @@ void git_attr_file__free(git_attr_file *file)
if (!file)
return;
- git_vector_foreach(&file->rules, i, rule) {
+ git_vector_foreach(&file->rules, i, rule)
git_attr_rule__free(rule);
- }
git_vector_free(&file->rules);
git__free(file->path);
file->path = NULL;
+
+ git__free(file);
}
unsigned long git_attr_file__name_hash(const char *name)
@@ -505,7 +506,7 @@ int git_attr_assignment__parse(
return error;
}
-void git_attr_rule__free(git_attr_rule *rule)
+static void git_attr_rule__clear(git_attr_rule *rule)
{
unsigned int i;
git_attr_assignment *assign;
@@ -525,3 +526,10 @@ void git_attr_rule__free(git_attr_rule *rule)
git_vector_free(&rule->assigns);
}
+
+void git_attr_rule__free(git_attr_rule *rule)
+{
+ git_attr_rule__clear(rule);
+ git__free(rule);
+}
+