mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-08 01:20:53 +00:00
tree-cache: extract the allocation
This commit is contained in:
parent
a6ed1fcbe1
commit
d091a9dbde
@ -74,7 +74,6 @@ static int read_tree_internal(git_tree_cache **out,
|
||||
git_tree_cache *tree = NULL;
|
||||
const char *name_start, *buffer;
|
||||
int count;
|
||||
size_t name_len;
|
||||
|
||||
buffer = name_start = *buffer_in;
|
||||
|
||||
@ -84,17 +83,8 @@ static int read_tree_internal(git_tree_cache **out,
|
||||
if (++buffer >= buffer_end)
|
||||
goto corrupted;
|
||||
|
||||
name_len = strlen(name_start);
|
||||
tree = git__malloc(sizeof(git_tree_cache) + name_len + 1);
|
||||
GITERR_CHECK_ALLOC(tree);
|
||||
|
||||
memset(tree, 0x0, sizeof(git_tree_cache));
|
||||
tree->parent = parent;
|
||||
|
||||
/* NUL-terminated tree name */
|
||||
tree->namelen = name_len;
|
||||
memcpy(tree->name, name_start, name_len);
|
||||
tree->name[name_len] = '\0';
|
||||
if (git_tree_cache_new(&tree, name_start, parent) < 0)
|
||||
return -1;
|
||||
|
||||
/* Blank-terminated ASCII decimal number of entries in this tree */
|
||||
if (git__strtol32(&count, buffer, &buffer, 10) < 0)
|
||||
@ -164,6 +154,26 @@ int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_tree_cache_new(git_tree_cache **out, const char *name, git_tree_cache *parent)
|
||||
{
|
||||
size_t name_len;
|
||||
git_tree_cache *tree;
|
||||
|
||||
name_len = strlen(name);
|
||||
tree = git__malloc(sizeof(git_tree_cache) + name_len + 1);
|
||||
GITERR_CHECK_ALLOC(tree);
|
||||
|
||||
memset(tree, 0x0, sizeof(git_tree_cache));
|
||||
tree->parent = parent;
|
||||
/* NUL-terminated tree name */
|
||||
tree->namelen = name_len;
|
||||
memcpy(tree->name, name, name_len);
|
||||
tree->name[name_len] = '\0';
|
||||
|
||||
*out = tree;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void git_tree_cache_free(git_tree_cache *tree)
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -25,6 +25,7 @@ typedef struct {
|
||||
int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer_size);
|
||||
void git_tree_cache_invalidate_path(git_tree_cache *tree, const char *path);
|
||||
const git_tree_cache *git_tree_cache_get(const git_tree_cache *tree, const char *path);
|
||||
int git_tree_cache_new(git_tree_cache **out, const char *name, git_tree_cache *parent);
|
||||
void git_tree_cache_free(git_tree_cache *tree);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user