From a0e9956f931e28eeb430bd2459668fd96a69c676 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 5 Dec 2021 10:17:03 +0100 Subject: 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 --- lib/fstree/fstree_from_dir.c | 6 ++---- lib/fstree/internal.h | 2 ++ lib/fstree/mknode.c | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'lib') 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 */ #include "config.h" -#include "fstree.h" +#include "internal.h" #include #include @@ -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 #include #include -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); -- cgit v1.2.3