mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 20:42:23 +00:00
Merge pull request #3530 from libgit2/cmn/parse-mode
tree: use a specialised mode parse function
This commit is contained in:
commit
5d1f31c6e6
26
src/tree.c
26
src/tree.c
@ -416,6 +416,25 @@ static int tree_error(const char *str, const char *path)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int parse_mode(unsigned int *modep, const char *buffer, const char **buffer_out)
|
||||||
|
{
|
||||||
|
unsigned char c;
|
||||||
|
unsigned int mode = 0;
|
||||||
|
|
||||||
|
if (*buffer == ' ')
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
while ((c = *buffer++) != ' ') {
|
||||||
|
if (c < '0' || c > '7')
|
||||||
|
return -1;
|
||||||
|
mode = (mode << 3) + (c - '0');
|
||||||
|
}
|
||||||
|
*modep = mode;
|
||||||
|
*buffer_out = buffer;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int git_tree__parse(void *_tree, git_odb_object *odb_obj)
|
int git_tree__parse(void *_tree, git_odb_object *odb_obj)
|
||||||
{
|
{
|
||||||
git_tree *tree = _tree;
|
git_tree *tree = _tree;
|
||||||
@ -430,14 +449,11 @@ int git_tree__parse(void *_tree, git_odb_object *odb_obj)
|
|||||||
git_tree_entry *entry;
|
git_tree_entry *entry;
|
||||||
size_t filename_len;
|
size_t filename_len;
|
||||||
const char *nul;
|
const char *nul;
|
||||||
int attr;
|
unsigned int attr;
|
||||||
|
|
||||||
if (git__strtol32(&attr, buffer, &buffer, 8) < 0 || !buffer)
|
if (parse_mode(&attr, buffer, &buffer) < 0 || !buffer)
|
||||||
return tree_error("Failed to parse tree. Can't parse filemode", NULL);
|
return tree_error("Failed to parse tree. Can't parse filemode", NULL);
|
||||||
|
|
||||||
if (*buffer++ != ' ')
|
|
||||||
return tree_error("Failed to parse tree. Object is corrupted", NULL);
|
|
||||||
|
|
||||||
if ((nul = memchr(buffer, 0, buffer_end - buffer)) == NULL)
|
if ((nul = memchr(buffer, 0, buffer_end - buffer)) == NULL)
|
||||||
return tree_error("Failed to parse tree. Object is corrupted", NULL);
|
return tree_error("Failed to parse tree. Object is corrupted", NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user