summaryrefslogtreecommitdiff
path: root/src/commit.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-05-28 02:02:02 +0200
committerAndreas Ericsson <ae@op5.se>2010-06-02 10:32:07 +0200
commitde141d4bb983dad861835e181e7ecd5692a58aba (patch)
tree40e1af83bd6b13b718c52673d2ad68edf54b6d6f /src/commit.c
parentc2550609e37e0778814d328c47eb84a7ede6931f (diff)
downloadlibgit2-de141d4bb983dad861835e181e7ecd5692a58aba.tar.gz
Improved error handling on auxilirary functions.
Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
Diffstat (limited to 'src/commit.c')
-rw-r--r--src/commit.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/commit.c b/src/commit.c
index 46c7d0de2..ca5281334 100644
--- a/src/commit.c
+++ b/src/commit.c
@@ -75,27 +75,27 @@ error_cleanup:
int git_commit_parse_existing(git_commit *commit)
{
+ int error = 0;
git_obj commit_obj;
if (commit->parsed)
return 0;
- if (git_odb_read(&commit_obj, commit->object.pool->db, &commit->object.id) < 0)
- return GIT_ENOTFOUND;
+ error = git_odb_read(&commit_obj, commit->object.pool->db, &commit->object.id);
+ if (error < 0)
+ return error;
if (commit_obj.type != GIT_OBJ_COMMIT)
- goto error_cleanup;
-
- if (git_commit__parse_buffer(commit, commit_obj.data, commit_obj.len) < 0)
- goto error_cleanup;
-
- git_obj_close(&commit_obj);
+ {
+ error = GIT_EOBJTYPE;
+ goto cleanup;
+ }
- return 0;
+ error = git_commit__parse_buffer(commit, commit_obj.data, commit_obj.len);
-error_cleanup:
+cleanup:
git_obj_close(&commit_obj);
- return -1;
+ return error;
}
git_commit *git_commit_lookup(git_revpool *pool, const git_oid *id)
@@ -205,7 +205,8 @@ int git_commit__parse_buffer(git_commit *commit, void *data, size_t len)
if (commit->uninteresting)
parent->uninteresting = 1;
- git_commit_list_push_back(&commit->parents, parent);
+ if (git_commit_list_push_back(&commit->parents, parent))
+ return GIT_ENOMEM;
}
if (git_commit__parse_time(&commit->commit_time, buffer, buffer_end) < 0)