diff options
| author | Ben Straub <bs@github.com> | 2013-10-28 05:01:33 -0700 |
|---|---|---|
| committer | Ben Straub <bs@github.com> | 2013-10-28 05:01:33 -0700 |
| commit | ba02079f2d97411c3ac6f1a7c29874b0aec68b08 (patch) | |
| tree | e5997f4f1d6480ad5291d7ddaa4b4c124a7e0193 | |
| parent | 364d800b018325914ac01cb5f1b06beb1cab528f (diff) | |
| download | libgit2-ba02079f2d97411c3ac6f1a7c29874b0aec68b08.tar.gz | |
Avoid temporary object in lookup routine
| -rw-r--r-- | src/object.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/object.c b/src/object.c index 53666ffe4..3fc984b45 100644 --- a/src/object.c +++ b/src/object.c @@ -374,27 +374,26 @@ int git_object_lookup_bypath( int error = -1; git_tree *tree = NULL; git_tree_entry *entry = NULL; - git_object *tmpobj = NULL; assert(out && treeish && path); - if (((error = git_object_peel((git_object**)&tree, treeish, GIT_OBJ_TREE)) < 0) || - ((error = git_tree_entry_bypath(&entry, tree, path)) < 0) || - ((error = git_tree_entry_to_object(&tmpobj, git_object_owner(treeish), entry)) < 0)) + if ((error = git_object_peel((git_object**)&tree, treeish, GIT_OBJ_TREE) < 0) || + (error = git_tree_entry_bypath(&entry, tree, path)) < 0) { goto cleanup; } - if (type == GIT_OBJ_ANY || git_object_type(tmpobj) == type) { - *out = tmpobj; - } else { + if (type != GIT_OBJ_ANY && git_tree_entry_type(entry) != type) + { giterr_set(GITERR_OBJECT, "object at path '%s' is not of the asked-for type %d", path, type); error = GIT_EINVALIDSPEC; - git_object_free(tmpobj); + goto cleanup; } + error = git_tree_entry_to_object(out, git_object_owner(treeish), entry); + cleanup: git_tree_entry_free(entry); git_tree_free(tree); |
