- die("cannot read %s",
- sha1_to_hex(item->item.any->sha1));
- write_header(item->item.any->sha1, TYPEFLAG_AUTO, basedir,
- prefix, item->name,
- item->mode, eltbuf, eltsize);
- if (item->directory) {
- this_prefix.name = item->name;
- traverse_tree(item->item.tree, &this_prefix);
- } else if (!item->symlink) {
+ die("cannot read %s", sha1_to_hex(sha1));
+ write_header(sha1, TYPEFLAG_AUTO, basedir,
+ prefix, name, mode, eltbuf, eltsize);
+ if (S_ISDIR(mode)) {
+ struct tree_desc subtree;
+ subtree.buf = eltbuf;
+ subtree.size = eltsize;
+ this_prefix.name = name;
+ traverse_tree(&subtree, &this_prefix);
+ } else if (!S_ISLNK(mode)) {