static int print_dir_item(struct extent_buffer *eb, struct btrfs_item *item, struct btrfs_dir_item *di) { u32 total; u32 cur = 0; u32 len; u32 name_len; u32 data_len; char namebuf[BTRFS_NAME_LEN]; struct btrfs_disk_key location; total = btrfs_item_size(eb, item); while(cur < total) { btrfs_dir_item_key(eb, di, &location); printf("\t\tlocation "); btrfs_print_key(&location); printf(" type %u\n", btrfs_dir_type(eb, di)); name_len = btrfs_dir_name_len(eb, di); data_len = btrfs_dir_data_len(eb, di); len = (name_len <= sizeof(namebuf))? name_len: sizeof(namebuf); read_extent_buffer(eb, namebuf, (unsigned long)(di + 1), len); printf("\t\tnamelen %u datalen %u name: %.*s\n", name_len, data_len, len, namebuf); if (data_len) { len = (data_len <= sizeof(namebuf))? data_len: sizeof(namebuf); read_extent_buffer(eb, namebuf, (unsigned long)(di + 1) + name_len, len); printf("\t\tdata %.*s\n", len, namebuf); } len = sizeof(*di) + name_len + data_len; di = (struct btrfs_dir_item *)((char *)di + len); cur += len; } return 0; }
static void print_dir_item(struct extent_buffer *eb, u32 size, struct btrfs_dir_item *di) { u32 cur = 0; u32 len; u32 name_len; u32 data_len; char namebuf[BTRFS_NAME_LEN]; struct btrfs_disk_key location; while (cur < size) { btrfs_dir_item_key(eb, di, &location); printf("\t\tlocation "); btrfs_print_key(&location); printf(" type "); print_dir_item_type(eb, di); printf("\n"); name_len = btrfs_dir_name_len(eb, di); data_len = btrfs_dir_data_len(eb, di); len = (name_len <= sizeof(namebuf))? name_len: sizeof(namebuf); read_extent_buffer(eb, namebuf, (unsigned long)(di + 1), len); printf("\t\ttransid %llu data_len %u name_len %u\n", btrfs_dir_transid(eb, di), data_len, name_len); printf("\t\tname: %.*s\n", len, namebuf); if (data_len) { len = (data_len <= sizeof(namebuf))? data_len: sizeof(namebuf); read_extent_buffer(eb, namebuf, (unsigned long)(di + 1) + name_len, len); printf("\t\tdata %.*s\n", len, namebuf); } len = sizeof(*di) + name_len + data_len; di = (struct btrfs_dir_item *)((char *)di + len); cur += len; } }