diff options
author | Patrick Steinhardt <ps@pks.im> | 2017-10-13 13:12:10 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2018-06-22 09:50:07 +0200 |
commit | af5cd936faa688cde9b31d8858c32acac4d2adf5 (patch) | |
tree | 8d1c928637a7428229914cde81e344cb887bec87 | |
parent | ab265a351044e724b6c9049f404e9de64c732130 (diff) | |
download | libgit2-af5cd936faa688cde9b31d8858c32acac4d2adf5.tar.gz |
tag: implement function to parse raw data
Currently, parsing objects is strictly tied to having an ODB object
available. This makes it hard to parse an object when all that is
available is its raw object and size. Furthermore, hacking around that
limitation by directly creating an ODB structure either on stack or on
heap does not really work that well due to ODB objects being reference
counted and then automatically free'd when reaching a reference count of
zero.
Implement a function `git_tag__parse_raw` to parse a tag object from a
pair of `data` and `size`.
-rw-r--r-- | src/tag.c | 5 | ||||
-rw-r--r-- | src/tag.h | 1 |
2 files changed, 6 insertions, 0 deletions
@@ -159,6 +159,11 @@ static int tag_parse(git_tag *tag, const char *buffer, const char *buffer_end) return 0; } +int git_tag__parse_raw(void *_tag, const char *data, size_t size) +{ + return tag_parse(_tag, data, data + size); +} + int git_tag__parse(void *_tag, git_odb_object *odb_obj) { git_tag *tag = _tag; @@ -26,5 +26,6 @@ struct git_tag { void git_tag__free(void *tag); int git_tag__parse(void *tag, git_odb_object *obj); +int git_tag__parse_raw(void *tag, const char *data, size_t size); #endif |