diff options
Diffstat (limited to 'mkfs/meta.c')
-rw-r--r-- | mkfs/meta.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/mkfs/meta.c b/mkfs/meta.c index 4ef570d..8f344ef 100644 --- a/mkfs/meta.c +++ b/mkfs/meta.c @@ -187,7 +187,7 @@ static int write_inode(sqfs_info_t *info, meta_writer_t *im, meta_writer_t *dm, return -1; if ((di->start_block) > 0xFFFFFFFFUL || di->size > 0xFFFF || - (node->xattr != NULL && di->size != 0)) { + node->xattr != NULL) { type = SQFS_INODE_EXT_DIR; } else { type = SQFS_INODE_DIR; @@ -344,7 +344,7 @@ static int write_inode(sqfs_info_t *info, meta_writer_t *im, meta_writer_t *dm, .start_block = htole32(node->data.dir->start_block), .parent_inode = node->parent ? htole32(node->parent->inode_num) : htole32(1), - .inodex_count = htole32(diridx->num_nodes - 1), + .inodex_count = htole32(0), .offset = htole16(node->data.dir->block_offset), .xattr_idx = htole32(0xFFFFFFFF), }; @@ -357,6 +357,12 @@ static int write_inode(sqfs_info_t *info, meta_writer_t *im, meta_writer_t *dm, return -1; } + /* HACK: truncated index for empty directories */ + if (node->data.dir->size == 0) + break; + + ext.inodex_count = htole32(diridx->num_nodes - 1); + for (i = 0; i < diridx->num_nodes; ++i) { idx.start_block = htole32(diridx->idx_nodes[i].block); |