diff options
Diffstat (limited to 'src/blob.c')
-rw-r--r-- | src/blob.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/src/blob.c b/src/blob.c index 818f838d2..c301ae15d 100644 --- a/src/blob.c +++ b/src/blob.c @@ -30,35 +30,20 @@ #include "common.h" #include "blob.h" -int git_blob_rawcontent(git_blob *blob, void *buffer, size_t len) +const char *git_blob_rawcontent(git_blob *blob) { - int error; - - assert(blob && buffer); - - if (blob->content.data != NULL) { - - if (len + 1 < blob->content.len) - return GIT_ENOMEM; - - memcpy(buffer, blob->content.data, blob->content.len); - ((char *)buffer)[blob->content.len] = 0; + assert(blob); - } else { - - if (len + 1 < blob->object.source.raw.len) - return GIT_ENOMEM; - - if ((error = git_object__source_open((git_object *)blob)) < 0) - return error; + if (blob->content.data != NULL) + return blob->content.data; - memcpy(buffer, blob->object.source.raw.data, blob->object.source.raw.len); - ((char *)buffer)[blob->object.source.raw.len] = 0; + if (blob->object.in_memory) + return NULL; - git_object__source_close((git_object *)blob); - } + if (!blob->object.source.open && git_object__source_open((git_object *)blob) < 0) + return NULL; - return GIT_SUCCESS; + return blob->object.source.raw.data; } int git_blob_rawsize(git_blob *blob) @@ -99,6 +84,8 @@ int git_blob_set_rawcontent(git_blob *blob, const void *buffer, size_t len) blob->object.modified = 1; + git_object__source_close((git_object *)blob); + if (blob->content.data != NULL) gitfo_free_buf(&blob->content); |