X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=tree-walk.c;h=70f899957e8ce511f0f5a470e8b6927d58d1b63e;hb=10e8d68820db9c7b6412d5a553a93fd200388f30;hp=3f83e98f3a443e4537f53abf32bcca1389c5d9d8;hpb=160a59f326d55970f8a038ef635c662b9c648c75;p=git.git diff --git a/tree-walk.c b/tree-walk.c index 3f83e98f3..70f899957 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -113,7 +113,6 @@ void traverse_trees(int n, struct tree_desc *t, const char *base, traverse_callb struct name_entry *entry = xmalloc(n*sizeof(*entry)); for (;;) { - struct name_entry entry[3]; unsigned long mask = 0; int i, last; @@ -179,7 +178,7 @@ static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char if (cmp < 0) break; if (entrylen == namelen) { - memcpy(result, sha1, 20); + hashcpy(result, sha1); return 0; } if (name[entrylen] != '/') @@ -187,7 +186,7 @@ static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char if (!S_ISDIR(*mode)) break; if (++entrylen == namelen) { - memcpy(result, sha1, 20); + hashcpy(result, sha1); return 0; } return get_tree_entry(sha1, name + entrylen, result, mode); @@ -200,10 +199,17 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch int retval; void *tree; struct tree_desc t; + unsigned char root[20]; - tree = read_object_with_reference(tree_sha1, tree_type, &t.size, NULL); + tree = read_object_with_reference(tree_sha1, tree_type, &t.size, root); if (!tree) return -1; + + if (name[0] == '\0') { + hashcpy(sha1, root); + return 0; + } + t.buf = tree; retval = find_tree_entry(&t, name, sha1, mode); free(tree);