summaryrefslogtreecommitdiff
path: root/src/blob.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blob.c')
-rw-r--r--src/blob.c35
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);