Commit f0224772 by Edward Thomson

git_object_dup: introduce typesafe versions

parent 684b35c4
...@@ -259,6 +259,15 @@ GIT_EXTERN(int) git_blob_create_frombuffer( ...@@ -259,6 +259,15 @@ GIT_EXTERN(int) git_blob_create_frombuffer(
*/ */
GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob); GIT_EXTERN(int) git_blob_is_binary(const git_blob *blob);
/**
* Create an in-memory copy of a blob. The copy must be explicitly
* free'd or it will leak.
*
* @param out Pointer to store the copy of the object
* @param source Original object to copy
*/
GIT_EXTERN(int) git_blob_dup(git_blob **out, git_blob *source);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
#endif #endif
...@@ -461,6 +461,15 @@ GIT_EXTERN(int) git_commit_create_with_signature( ...@@ -461,6 +461,15 @@ GIT_EXTERN(int) git_commit_create_with_signature(
const char *signature, const char *signature,
const char *signature_field); const char *signature_field);
/**
* Create an in-memory copy of a commit. The copy must be explicitly
* free'd or it will leak.
*
* @param out Pointer to store the copy of the commit
* @param source Original commit to copy
*/
GIT_EXTERN(int) git_commit_dup(git_commit **out, git_commit *source);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
#endif #endif
...@@ -347,6 +347,15 @@ GIT_EXTERN(int) git_tag_peel( ...@@ -347,6 +347,15 @@ GIT_EXTERN(int) git_tag_peel(
git_object **tag_target_out, git_object **tag_target_out,
const git_tag *tag); const git_tag *tag);
/**
* Create an in-memory copy of a tag. The copy must be explicitly
* free'd or it will leak.
*
* @param out Pointer to store the copy of the tag
* @param source Original tag to copy
*/
GIT_EXTERN(int) git_tag_dup(git_tag **out, git_tag *source);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
#endif #endif
...@@ -409,6 +409,15 @@ GIT_EXTERN(int) git_tree_walk( ...@@ -409,6 +409,15 @@ GIT_EXTERN(int) git_tree_walk(
git_treewalk_cb callback, git_treewalk_cb callback,
void *payload); void *payload);
/**
* Create an in-memory copy of a tree. The copy must be explicitly
* free'd or it will leak.
*
* @param out Pointer to store the copy of the tree
* @param source Original tree to copy
*/
GIT_EXTERN(int) git_tree_dup(git_tree **out, git_tree *source);
/** @} */ /** @} */
GIT_END_DECL GIT_END_DECL
......
...@@ -615,7 +615,7 @@ int git_commit_nth_gen_ancestor( ...@@ -615,7 +615,7 @@ int git_commit_nth_gen_ancestor(
assert(ancestor && commit); assert(ancestor && commit);
if (git_object_dup((git_object **) &current, (git_object *) commit) < 0) if (git_commit_dup(&current, (git_commit *)commit) < 0)
return -1; return -1;
if (n == 0) { if (n == 0) {
......
...@@ -197,7 +197,7 @@ static int commit_name_dup(struct commit_name **out, struct commit_name *in) ...@@ -197,7 +197,7 @@ static int commit_name_dup(struct commit_name **out, struct commit_name *in)
name->tag = NULL; name->tag = NULL;
name->path = NULL; name->path = NULL;
if (in->tag && git_object_dup((git_object **) &name->tag, (git_object *) in->tag) < 0) if (in->tag && git_tag_dup(&name->tag, in->tag) < 0)
return -1; return -1;
name->path = git__strdup(in->path); name->path = git__strdup(in->path);
......
...@@ -820,7 +820,7 @@ int git_iterator_for_tree( ...@@ -820,7 +820,7 @@ int git_iterator_for_tree(
if (tree == NULL) if (tree == NULL)
return git_iterator_for_nothing(iter, options); return git_iterator_for_nothing(iter, options);
if ((error = git_object_dup((git_object **)&tree, (git_object *)tree)) < 0) if ((error = git_tree_dup(&tree, tree)) < 0)
return error; return error;
ti = git__calloc(1, sizeof(tree_iterator)); ti = git__calloc(1, sizeof(tree_iterator));
...@@ -1849,7 +1849,7 @@ int git_iterator_for_workdir_ext( ...@@ -1849,7 +1849,7 @@ int git_iterator_for_workdir_ext(
return error; return error;
} }
if (tree && (error = git_object_dup((git_object **)&wi->tree, (git_object *)tree)) < 0) if (tree && (error = git_tree_dup(&wi->tree, tree)) < 0)
return error; return error;
wi->index = index; wi->index = index;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "tag.h" #include "tag.h"
/** /**
* Blob * Commit
*/ */
int git_commit_lookup(git_commit **out, git_repository *repo, const git_oid *id) int git_commit_lookup(git_commit **out, git_repository *repo, const git_oid *id)
{ {
...@@ -42,6 +42,10 @@ git_repository *git_commit_owner(const git_commit *obj) ...@@ -42,6 +42,10 @@ git_repository *git_commit_owner(const git_commit *obj)
return git_object_owner((const git_object *)obj); return git_object_owner((const git_object *)obj);
} }
int git_commit_dup(git_commit **out, git_commit *obj)
{
return git_object_dup((git_object **)out, (git_object *)obj);
}
/** /**
* Tree * Tree
...@@ -71,6 +75,10 @@ git_repository *git_tree_owner(const git_tree *obj) ...@@ -71,6 +75,10 @@ git_repository *git_tree_owner(const git_tree *obj)
return git_object_owner((const git_object *)obj); return git_object_owner((const git_object *)obj);
} }
int git_tree_dup(git_tree **out, git_tree *obj)
{
return git_object_dup((git_object **)out, (git_object *)obj);
}
/** /**
* Tag * Tag
...@@ -100,6 +108,11 @@ git_repository *git_tag_owner(const git_tag *obj) ...@@ -100,6 +108,11 @@ git_repository *git_tag_owner(const git_tag *obj)
return git_object_owner((const git_object *)obj); return git_object_owner((const git_object *)obj);
} }
int git_tag_dup(git_tag **out, git_tag *obj)
{
return git_object_dup((git_object **)out, (git_object *)obj);
}
/** /**
* Blob * Blob
*/ */
...@@ -127,3 +140,8 @@ git_repository *git_blob_owner(const git_blob *obj) ...@@ -127,3 +140,8 @@ git_repository *git_blob_owner(const git_blob *obj)
{ {
return git_object_owner((const git_object *)obj); return git_object_owner((const git_object *)obj);
} }
int git_blob_dup(git_blob **out, git_blob *obj)
{
return git_object_dup((git_object **)out, (git_object *)obj);
}
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