diff options
-rw-r--r-- | lib/fstree/post_process.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/lib/fstree/post_process.c b/lib/fstree/post_process.c index c2b462b..0b970b2 100644 --- a/lib/fstree/post_process.c +++ b/lib/fstree/post_process.c @@ -47,7 +47,7 @@ static void hard_link_snap(tree_node_t *n) n->data.target_node = n->data.target_node->data.target_node; } -static int alloc_inode_num_dfs(fstree_t *fs, tree_node_t *root, size_t *counter) +static void alloc_inode_num_dfs(fstree_t *fs, tree_node_t *root) { bool has_subdirs = false; tree_node_t *it, *tgt; @@ -67,10 +67,8 @@ static int alloc_inode_num_dfs(fstree_t *fs, tree_node_t *root, size_t *counter) if (has_subdirs) { for (it = root->data.dir.children; it != NULL; it = it->next) { - if (S_ISDIR(it->mode)) { - if (alloc_inode_num_dfs(fs, it, counter)) - return -1; - } + if (S_ISDIR(it->mode)) + alloc_inode_num_dfs(fs, it); } } @@ -78,13 +76,10 @@ static int alloc_inode_num_dfs(fstree_t *fs, tree_node_t *root, size_t *counter) if (it->mode == FSTREE_MODE_HARD_LINK_RESOLVED) { hard_link_snap(it); } else { + it->inode_num = fs->unique_inode_count + 1; fs->unique_inode_count += 1; - - it->inode_num = *counter; - *counter += 1; } } - return 0; } static int resolve_hard_links_dfs(fstree_t *fs, tree_node_t *n) @@ -187,17 +182,14 @@ static void map_inodes_dfs(fstree_t *fs, tree_node_t *n) int fstree_post_process(fstree_t *fs) { - size_t inum = 1; - sort_recursive(fs->root); if (resolve_hard_links_dfs(fs, fs->root)) return -1; fs->unique_inode_count = 0; - if (alloc_inode_num_dfs(fs, fs->root, &inum)) - return -1; - fs->root->inode_num = inum; + alloc_inode_num_dfs(fs, fs->root); + fs->root->inode_num = fs->unique_inode_count + 1; fs->unique_inode_count += 1; fs->inodes = calloc(sizeof(fs->inodes[0]), fs->unique_inode_count); |