diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/common/writer/serialize_fstree.c | 3 | ||||
-rw-r--r-- | lib/sqfs/dir_writer.c | 5 | ||||
-rw-r--r-- | lib/sqfs/inode.c | 6 |
3 files changed, 8 insertions, 6 deletions
diff --git a/lib/common/writer/serialize_fstree.c b/lib/common/writer/serialize_fstree.c index b15f30d..9776874 100644 --- a/lib/common/writer/serialize_fstree.c +++ b/lib/common/writer/serialize_fstree.c @@ -144,6 +144,9 @@ static int serialize_tree_node(const char *filename, sqfs_writer_t *wr, sqfs_inode_set_xattr_index(inode, n->xattr_idx); + if (n->xattr_idx == 0xFFFFFFFF && !S_ISDIR(n->mode)) + sqfs_inode_make_basic(inode); + ret = sqfs_id_table_id_to_index(wr->idtbl, n->uid, &inode->base.uid_idx); if (ret) diff --git a/lib/sqfs/dir_writer.c b/lib/sqfs/dir_writer.c index a02faa7..ce63a1e 100644 --- a/lib/sqfs/dir_writer.c +++ b/lib/sqfs/dir_writer.c @@ -21,6 +21,8 @@ #include <stdlib.h> #include <string.h> +#define DIR_INDEX_THRESHOLD (256) + typedef struct dir_entry_t { struct dir_entry_t *next; sqfs_u64 inode_ref; @@ -385,6 +387,9 @@ sqfs_inode_generic_t inode->base.type = SQFS_INODE_DIR; } + if (writer->ent_count >= DIR_INDEX_THRESHOLD) + inode->base.type = SQFS_INODE_EXT_DIR; + if (inode->base.type == SQFS_INODE_DIR) { inode->data.dir.start_block = start_block; inode->data.dir.nlink = writer->ent_count + hlinks + 2; diff --git a/lib/sqfs/inode.c b/lib/sqfs/inode.c index 0fb4809..ce51cf5 100644 --- a/lib/sqfs/inode.c +++ b/lib/sqfs/inode.c @@ -110,12 +110,6 @@ int sqfs_inode_set_xattr_index(sqfs_inode_generic_t *inode, sqfs_u32 index) return SQFS_ERROR_CORRUPTED; } - if (index == 0xFFFFFFFF) { - err = sqfs_inode_make_basic(inode); - if (err) - return err; - } - return 0; } |