diff options
author | Russell Belfer <arrbee@arrbee.com> | 2011-12-29 21:31:30 -0800 |
---|---|---|
committer | Russell Belfer <arrbee@arrbee.com> | 2011-12-29 21:32:37 -0800 |
commit | c6d2a2c0946ff32c16578b68b39824f4fea8f782 (patch) | |
tree | f2ccc9c271e1d52793c8bea3e2f28ba03ce4db14 /src/attr_file.c | |
parent | 73b51450a3194ddaa2ac180a1fea25fdf66971bb (diff) | |
download | libgit2-c6d2a2c0946ff32c16578b68b39824f4fea8f782.tar.gz |
Fixed up memory leaks
Diffstat (limited to 'src/attr_file.c')
-rw-r--r-- | src/attr_file.c | 20 |
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); +} + |