Branch
Hash :
d1289570
Author :
Thomas de Grivel
Date :
2025-12-24T20:01:57
git blob
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
/* kc3
* Copyright from 2022 to 2025 kmx.io <contact@kmx.io>
*
* Permission is hereby granted to use this software granted the above
* copyright notice and this permission paragraph are included in all
* copies and substantial portions of this software.
*
* THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
* PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
* AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
* THIS SOFTWARE.
*/
#include "../libkc3/kc3.h"
#include <string.h>
#include <git2.h>
#include "blob.h"
s_str * kc3_git_blob_to_str (git_repository **repo, const s_str *hash,
s_str *dest)
{
git_blob *blob = NULL;
git_oid oid = {0};
const u8 *raw;
u64 size;
s_str tmp = {0};
assert(repo);
assert(*repo);
assert(hash);
assert(dest);
if (git_oid_fromstr(&oid, hash->ptr.pchar)) {
err_puts("kc3_git_blob_to_str: invalid hash");
return NULL;
}
if (git_blob_lookup(&blob, *repo, &oid)) {
err_puts("kc3_git_blob_to_str: blob not found in repo");
return NULL;
}
size = git_blob_rawsize(blob);
if (! size)
return str_init_empty(dest);
raw = git_blob_rawcontent(blob);
if (! raw) {
err_puts("kc3_git_blob_to_str: git_blob_rawcontent");
return NULL;
}
if (! str_init_alloc(&tmp, size))
return NULL;
memcpy(tmp.free.p, raw, size);
*dest = tmp;
return dest;
}