Commit c49d328cf433da1bf25a97e3935069308daf7f8d

Philip Kelley 2012-08-27T09:59:13

Expose a malloc function to 3rd party ODB backends

diff --git a/include/git2/odb_backend.h b/include/git2/odb_backend.h
index b812fef..cb80697 100644
--- a/include/git2/odb_backend.h
+++ b/include/git2/odb_backend.h
@@ -26,6 +26,10 @@ struct git_odb_stream;
 struct git_odb_backend {
 	git_odb *odb;
 
+	/* read and read_prefix each return to libgit2 a buffer which
+	 * will be freed later. The buffer should be allocated using
+	 * the function git_odb_backend_malloc to ensure that it can
+	 * be safely freed later. */
 	int (* read)(
 			void **, size_t *, git_otype *,
 			struct git_odb_backend *,
@@ -102,6 +106,8 @@ GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **backend_out, const char *
 GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **backend_out, const char *objects_dir, int compression_level, int do_fsync);
 GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **backend_out, const char *index_file);
 
+GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len);
+
 GIT_END_DECL
 
 #endif
diff --git a/src/odb.c b/src/odb.c
index d590284..55d434a 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -708,6 +708,11 @@ int git_odb_open_rstream(git_odb_stream **stream, git_odb *db, const git_oid *oi
 	return error;
 }
 
+void * git_odb_backend_malloc(git_odb_backend *backend, size_t len)
+{
+	return git__malloc(len);
+}
+
 int git_odb__error_notfound(const char *message, const git_oid *oid)
 {
 	if (oid != NULL) {