- desc->buffer = (char *) buf + len;
- desc->size = size - len;
-}
-
-static const char *get_mode(const char *str, unsigned int *modep)
-{
- unsigned char c;
- unsigned int mode = 0;
-
- while ((c = *str++) != ' ') {
- if (c < '0' || c > '7')
- return NULL;
- mode = (mode << 3) + (c - '0');
- }
- *modep = mode;
- return str;
-}
-
-const unsigned char *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned int *modep)
-{
- const void *tree = desc->buffer;
- unsigned long size = desc->size;
- int len = strlen(tree)+1;
- const unsigned char *sha1 = (unsigned char *) tree + len;
- const char *path;
- unsigned int mode;
-
- path = get_mode(tree, &mode);
- if (!path || size < len + 20)
- die("corrupt tree file");
- *pathp = path;
- *modep = canon_mode(mode);
- return sha1;