diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/common/writer.c | 5 | ||||
-rw-r--r-- | lib/fstree/Makemodule.am | 2 | ||||
-rw-r--r-- | lib/fstree/fstree.c | 1 | ||||
-rw-r--r-- | lib/fstree/gen_inode_numbers.c (renamed from lib/fstree/gen_inode_table.c) | 37 |
4 files changed, 9 insertions, 36 deletions
diff --git a/lib/common/writer.c b/lib/common/writer.c index 0b7f378..087ee3c 100644 --- a/lib/common/writer.c +++ b/lib/common/writer.c @@ -214,10 +214,9 @@ int sqfs_writer_finish(sqfs_writer_t *sqfs, const sqfs_writer_cfg_t *cfg) fputs("Writing inodes and directories...\n", stdout); tree_node_sort_recursive(sqfs->fs.root); - if (fstree_gen_inode_table(&sqfs->fs)) - return -1; + fstree_gen_inode_numbers(&sqfs->fs); - sqfs->super.inode_count = sqfs->fs.inode_tbl_size; + sqfs->super.inode_count = sqfs->fs.unique_inode_count; if (sqfs_serialize_fstree(cfg->filename, sqfs)) return -1; diff --git a/lib/fstree/Makemodule.am b/lib/fstree/Makemodule.am index 6638480..bb17d24 100644 --- a/lib/fstree/Makemodule.am +++ b/lib/fstree/Makemodule.am @@ -1,6 +1,6 @@ libfstree_a_SOURCES = lib/fstree/fstree.c lib/fstree/fstree_from_file.c libfstree_a_SOURCES += lib/fstree/fstree_sort.c -libfstree_a_SOURCES += lib/fstree/gen_inode_table.c lib/fstree/get_path.c +libfstree_a_SOURCES += lib/fstree/gen_inode_numbers.c lib/fstree/get_path.c libfstree_a_SOURCES += lib/fstree/mknode.c libfstree_a_SOURCES += lib/fstree/add_by_path.c libfstree_a_SOURCES += include/fstree.h diff --git a/lib/fstree/fstree.c b/lib/fstree/fstree.c index ad48508..90e14ce 100644 --- a/lib/fstree/fstree.c +++ b/lib/fstree/fstree.c @@ -128,6 +128,5 @@ int fstree_init(fstree_t *fs, char *defaults) void fstree_cleanup(fstree_t *fs) { free_recursive(fs->root); - free(fs->inode_table); memset(fs, 0, sizeof(*fs)); } diff --git a/lib/fstree/gen_inode_table.c b/lib/fstree/gen_inode_numbers.c index 006029f..35dbc7a 100644 --- a/lib/fstree/gen_inode_table.c +++ b/lib/fstree/gen_inode_numbers.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* - * gen_inode_table.c + * gen_inode_numbers.c * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ @@ -11,23 +11,6 @@ #include <stdlib.h> #include <stdio.h> -static size_t count_nodes(tree_node_t *root) -{ - tree_node_t *n = root->data.dir.children; - size_t count = 1; - - while (n != NULL) { - if (S_ISDIR(n->mode)) { - count += count_nodes(n); - } else { - ++count; - } - n = n->next; - } - - return count; -} - static void map_child_nodes(fstree_t *fs, tree_node_t *root, size_t *counter) { bool has_subdirs = false; @@ -48,27 +31,19 @@ static void map_child_nodes(fstree_t *fs, tree_node_t *root, size_t *counter) } for (it = root->data.dir.children; it != NULL; it = it->next) { + fs->unique_inode_count += 1; + it->inode_num = *counter; *counter += 1; - - fs->inode_table[it->inode_num - 1] = it; } } -int fstree_gen_inode_table(fstree_t *fs) +void fstree_gen_inode_numbers(fstree_t *fs) { size_t inum = 1; - fs->inode_tbl_size = count_nodes(fs->root); - fs->inode_table = calloc(1, sizeof(tree_node_t*) * fs->inode_tbl_size); - - if (fs->inode_table == NULL) { - perror("allocating inode table"); - return -1; - } - + fs->unique_inode_count = 0; map_child_nodes(fs, fs->root, &inum); fs->root->inode_num = inum; - fs->inode_table[inum - 1] = fs->root; - return 0; + fs->unique_inode_count += 1; } |