static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, struct ext2_dx_root_info * rootnode, struct ext2_dx_entry *ent, char *buf, int level) { struct ext2_dx_countlimit limit; struct ext2_dx_entry e; struct ext2_dx_tail *tail; int hash, i; int remainder; limit = *((struct ext2_dx_countlimit *) ent); limit.count = ext2fs_le16_to_cpu(limit.count); limit.limit = ext2fs_le16_to_cpu(limit.limit); fprintf(pager, "Number of entries (count): %d\n", limit.count); fprintf(pager, "Number of entries (limit): %d\n", limit.limit); remainder = fs->blocksize - (limit.limit * sizeof(struct ext2_dx_entry)); if (ent == (struct ext2_dx_entry *)(rootnode + 1)) remainder -= sizeof(struct ext2_dx_root_info) + 24; else remainder -= 8; if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super, EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) && remainder == sizeof(struct ext2_dx_tail)) { tail = (struct ext2_dx_tail *)(ent + limit.limit); fprintf(pager, "Checksum: 0x%08x\n", ext2fs_le32_to_cpu(tail->dt_checksum)); } for (i=0; i < limit.count; i++) { hash = i ? ext2fs_le32_to_cpu(ent[i].hash) : 0; fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %u\n", i, hash, (hash & 1) ? " (**)" : "", ext2fs_le32_to_cpu(ent[i].block)); } fprintf(pager, "\n"); for (i=0; i < limit.count; i++) { e.hash = ext2fs_le32_to_cpu(ent[i].hash); e.block = ext2fs_le32_to_cpu(ent[i].block); fprintf(pager, "Entry #%d: Hash 0x%08x, block %u\n", i, i ? e.hash : 0, e.block); if (level) htree_dump_int_block(fs, ino, inode, rootnode, e.block, buf, level-1); else htree_dump_leaf_node(fs, ino, inode, rootnode, e.block, buf); } fprintf(pager, "---------------------\n"); }
static void htree_dump_int_node(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, struct ext2_dx_root_info * rootnode, struct ext2_dx_entry *ent, char *buf, int level) { struct ext2_dx_countlimit limit; struct ext2_dx_entry e; int hash, i; limit = *((struct ext2_dx_countlimit *) ent); limit.count = ext2fs_le16_to_cpu(limit.count); limit.limit = ext2fs_le16_to_cpu(limit.limit); fprintf(pager, "Number of entries (count): %d\n", limit.count); fprintf(pager, "Number of entries (limit): %d\n", limit.limit); for (i=0; i < limit.count; i++) { hash = i ? ext2fs_le32_to_cpu(ent[i].hash) : 0; fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %u\n", i, hash, (hash & 1) ? " (**)" : "", ext2fs_le32_to_cpu(ent[i].block)); } fprintf(pager, "\n"); for (i=0; i < limit.count; i++) { e.hash = ext2fs_le32_to_cpu(ent[i].hash); e.block = ext2fs_le32_to_cpu(ent[i].block); fprintf(pager, "Entry #%d: Hash 0x%08x, block %u\n", i, i ? e.hash : 0, e.block); if (level) htree_dump_int_block(fs, ino, inode, rootnode, e.block, buf, level-1); else htree_dump_leaf_node(fs, ino, inode, rootnode, e.block, buf); } fprintf(pager, "---------------------\n"); }