summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2017-12-17 01:12:49 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2018-02-01 16:35:49 -0800
commit97f9a5f0bca920e2ce260b17fa7cea0a2c0991ca (patch)
tree9aeb6275e1e0c5e6e55b19fbabcd878b9100d402
parentc74e9271012454dd46d3b8004b145129bd50cc04 (diff)
downloadlibgit2-97f9a5f0bca920e2ce260b17fa7cea0a2c0991ca.tar.gz
odb: provide length and type with streaming read
The streaming read functionality should provide the length and the type of the object, like the normal read functionality does.
-rw-r--r--include/git2/odb.h9
-rw-r--r--include/git2/sys/odb_backend.h3
-rw-r--r--src/odb.c9
3 files changed, 17 insertions, 4 deletions
diff --git a/include/git2/odb.h b/include/git2/odb.h
index b7dc0c5f3..006a75b7a 100644
--- a/include/git2/odb.h
+++ b/include/git2/odb.h
@@ -357,11 +357,18 @@ GIT_EXTERN(void) git_odb_stream_free(git_odb_stream *stream);
* @see git_odb_stream
*
* @param out pointer where to store the stream
+ * @param len pointer where to store the length of the object
+ * @param type pointer where to store the type of the object
* @param db object database where the stream will read from
* @param oid oid of the object the stream will read from
* @return 0 if the stream was created; error code otherwise
*/
-GIT_EXTERN(int) git_odb_open_rstream(git_odb_stream **out, git_odb *db, const git_oid *oid);
+GIT_EXTERN(int) git_odb_open_rstream(
+ git_odb_stream **out,
+ size_t *len,
+ git_otype *type,
+ git_odb *db,
+ const git_oid *oid);
/**
* Open a stream for writing a pack file to the ODB.
diff --git a/include/git2/sys/odb_backend.h b/include/git2/sys/odb_backend.h
index 9bcc50ddd..792f103fe 100644
--- a/include/git2/sys/odb_backend.h
+++ b/include/git2/sys/odb_backend.h
@@ -56,7 +56,8 @@ struct git_odb_backend {
git_odb_stream **, git_odb_backend *, git_off_t, git_otype);
int (* readstream)(
- git_odb_stream **, git_odb_backend *, const git_oid *);
+ git_odb_stream **, size_t *, git_otype *,
+ git_odb_backend *, const git_oid *);
int (* exists)(
git_odb_backend *, const git_oid *);
diff --git a/src/odb.c b/src/odb.c
index c2b17fade..775cf90de 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -1396,7 +1396,12 @@ void git_odb_stream_free(git_odb_stream *stream)
stream->free(stream);
}
-int git_odb_open_rstream(git_odb_stream **stream, git_odb *db, const git_oid *oid)
+int git_odb_open_rstream(
+ git_odb_stream **stream,
+ size_t *len,
+ git_otype *type,
+ git_odb *db,
+ const git_oid *oid)
{
size_t i, reads = 0;
int error = GIT_ERROR;
@@ -1409,7 +1414,7 @@ int git_odb_open_rstream(git_odb_stream **stream, git_odb *db, const git_oid *oi
if (b->readstream != NULL) {
++reads;
- error = b->readstream(stream, b, oid);
+ error = b->readstream(stream, len, type, b, oid);
}
}