mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-08 09:02:55 +00:00
Change blob API to return temp refs to the content
If the user wants permanent references, he can duplicate the temporary one manually. Signed-off-by: Vicent Marti <tanoku@gmail.com>
This commit is contained in:
parent
69a09b7c69
commit
30b171a185
35
src/blob.c
35
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);
|
||||
assert(blob);
|
||||
|
||||
if (blob->content.data != NULL) {
|
||||
if (blob->content.data != NULL)
|
||||
return blob->content.data;
|
||||
|
||||
if (len + 1 < blob->content.len)
|
||||
return GIT_ENOMEM;
|
||||
|
||||
memcpy(buffer, blob->content.data, blob->content.len);
|
||||
((char *)buffer)[blob->content.len] = 0;
|
||||
|
||||
} else {
|
||||
if (blob->object.in_memory)
|
||||
return NULL;
|
||||
|
||||
if (len + 1 < blob->object.source.raw.len)
|
||||
return GIT_ENOMEM;
|
||||
if (!blob->object.source.open && git_object__source_open((git_object *)blob) < 0)
|
||||
return NULL;
|
||||
|
||||
if ((error = git_object__source_open((git_object *)blob)) < 0)
|
||||
return error;
|
||||
|
||||
memcpy(buffer, blob->object.source.raw.data, blob->object.source.raw.len);
|
||||
((char *)buffer)[blob->object.source.raw.len] = 0;
|
||||
|
||||
git_object__source_close((git_object *)blob);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
@ -63,18 +63,17 @@ GIT_EXTERN(int) git_blob_set_rawcontent_fromfile(git_blob *blob, const char *fil
|
||||
GIT_EXTERN(int) git_blob_set_rawcontent(git_blob *blob, const void *buffer, size_t len);
|
||||
|
||||
/**
|
||||
* Read the raw content of a blob.
|
||||
* Get a read-only buffer with the raw content of a blob.
|
||||
*
|
||||
* A copy of the raw content is stored on the buffer passed
|
||||
* to the function. If the buffer is not long enough,
|
||||
* the method will fail.
|
||||
* A pointer to the raw content of a blob is returned;
|
||||
* this pointer is owned internally by the object and shall
|
||||
* not be free'd. The pointer may be invalidated at a later
|
||||
* time (e.g. when changing the contents of the blob).
|
||||
*
|
||||
* @param blob pointer to the blob
|
||||
* @param buffer buffer to fill with contents
|
||||
* @param len size of the buffer
|
||||
* @return 0 on success; error code otherwise
|
||||
* @return the pointer; NULL if the blob has no contents
|
||||
*/
|
||||
GIT_EXTERN(int) git_blob_rawcontent(git_blob *blob, void *buffer, size_t len);
|
||||
GIT_EXTERN(const char *) git_blob_rawcontent(git_blob *blob);
|
||||
|
||||
/**
|
||||
* Get the size in bytes of the contents of a blob
|
||||
|
Loading…
Reference in New Issue
Block a user