| 603 | } |
| 604 | |
| 605 | int get_tree_entry(struct repository *r, |
| 606 | const struct object_id *tree_oid, |
| 607 | const char *name, |
| 608 | struct object_id *oid, |
| 609 | unsigned short *mode) |
| 610 | { |
| 611 | int retval; |
| 612 | void *tree; |
| 613 | size_t size; |
| 614 | struct object_id root; |
| 615 | |
| 616 | tree = odb_read_object_peeled(r->objects, tree_oid, OBJ_TREE, &size, &root); |
| 617 | if (!tree) |
| 618 | return -1; |
| 619 | |
| 620 | if (name[0] == '\0') { |
| 621 | oidcpy(oid, &root); |
| 622 | free(tree); |
| 623 | return 0; |
| 624 | } |
| 625 | |
| 626 | if (!size) { |
| 627 | retval = -1; |
| 628 | } else { |
| 629 | struct tree_desc t; |
| 630 | init_tree_desc(&t, tree_oid, tree, size); |
| 631 | retval = find_tree_entry(r, &t, name, oid, mode); |
| 632 | } |
| 633 | free(tree); |
| 634 | return retval; |
| 635 | } |
| 636 | |
| 637 | /* |
| 638 | * This is Linux's built-in max for the number of symlinks to follow. |
no test coverage detected