diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-12-05 10:17:03 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-03-30 22:31:30 +0200 |
commit | a0e9956f931e28eeb430bd2459668fd96a69c676 (patch) | |
tree | b17b9c6a6b282598affa2cf695ee18a2ebaa0a17 | |
parent | bb526954f24b2be5c574810a72395461cadd2d0c (diff) |
Fix: Directory insertion order on Windows
The fstree sorting code got removed recently, in favour of inserting
at the correct position. The Windows directory scanning code still
used it's own list insertion code instead of mknode (so it could
allocate and translate the directory entry name in-place), which
broke the sorting order.
This issue is fixed in this commit.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
-rw-r--r-- | lib/fstree/fstree_from_dir.c | 6 | ||||
-rw-r--r-- | lib/fstree/internal.h | 2 | ||||
-rw-r--r-- | lib/fstree/mknode.c | 6 |
3 files changed, 7 insertions, 7 deletions
diff --git a/lib/fstree/fstree_from_dir.c b/lib/fstree/fstree_from_dir.c index e0ea600..a11f383 100644 --- a/lib/fstree/fstree_from_dir.c +++ b/lib/fstree/fstree_from_dir.c @@ -5,7 +5,7 @@ * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ #include "config.h" -#include "fstree.h" +#include "internal.h" #include <dirent.h> #include <stdlib.h> @@ -98,9 +98,7 @@ static int add_node(fstree_t *fs, tree_node_t *root, n->mod_time = fs->defaults.st_mtime; } - n->parent = root; - n->next = root->data.dir.children; - root->data.dir.children = n; + fstree_insert_sorted(root, n); return 0; } diff --git a/lib/fstree/internal.h b/lib/fstree/internal.h index c594f64..d14fb4f 100644 --- a/lib/fstree/internal.h +++ b/lib/fstree/internal.h @@ -17,4 +17,6 @@ */ sqfs_u32 get_source_date_epoch(void); +void fstree_insert_sorted(tree_node_t *root, tree_node_t *n); + #endif /* FSTREE_INTERNAL_H */ diff --git a/lib/fstree/mknode.c b/lib/fstree/mknode.c index 75fa46a..7d6e315 100644 --- a/lib/fstree/mknode.c +++ b/lib/fstree/mknode.c @@ -6,13 +6,13 @@ */ #include "config.h" -#include "fstree.h" +#include "internal.h" #include <string.h> #include <stdlib.h> #include <errno.h> -static void insert_sorted(tree_node_t *root, tree_node_t *n) +void fstree_insert_sorted(tree_node_t *root, tree_node_t *n) { tree_node_t *it = root->data.dir.children, *prev = NULL; @@ -88,7 +88,7 @@ tree_node_t *fstree_mknode(tree_node_t *parent, const char *name, } if (parent != NULL) { - insert_sorted(parent, n); + fstree_insert_sorted(parent, n); if (parent->link_count == 0x0FFFF) { free(n); |