[RFC PATCH] libdpkg: Sort files within the package. (2/2)
From
Sebastian Andrzej Siewior@1:229/2 to
All on Mon Jul 3 21:40:01 2023
[continued from previous message]
+ struct node_array files_other = {};
+ struct node_array files_compress = {};
+ struct node_array files_symlink = {};
- tree = treewalk_open(dir, TREEWALK_NONE, NULL);
+ tree = treewalk_open(dir, TREEWALK_NONE, &nsort);
for (node = treewalk_node(tree); node ; node = treewalk_next(tree)) {
const char *virtname = treenode_get_virtname(node);
char *nodename;
@@ -175,23 +325,37 @@ file_treewalk_feed(const char *dir, int fd_out)
/* We need to reorder the files so we can make sure that symlinks
* will not appear before their target. */
if (S_ISLNK(treenode_get_mode(node))) {
- fi = file_info_new(nodename);
- file_info_list_append(&symlist, &symlist_end, fi);
+ append_file_node(&files_symlink, nodename);
+ } else if (S_ISDIR(treenode_get_mode(node))) {
+ append_file_node(&files_dir, nodename);
+ } else if (file_is_ELF(treenode_get_pathname(node))) {
+ append_file_node(&files_ELF, nodename);
+ } else if (file_has_dot(nodename)) {
+ if (file_has_ext_comp(nodename)) {
+ append_file_node(&files_compress, nodename);
+ } else {
+ append_file_node(&files_dot, nodename);
+ }
} else {
- if (fd_write(fd_out, nodename, strlen(nodename) + 1) < 0)
- ohshite(_("failed to write filename to tar pipe (%s)"),
- _("data member"));
+ append_file_node(&files_other, nodename);
}
-
free(nodename);
}
treewalk_close(tree);
- for (fi = symlist; fi; fi = fi->next)
- if (fd_write(fd_out, fi->fn, strlen(fi->fn) + 1) < 0)
- ohshite(_("failed to write filename to tar pipe (%s)"), _("data member"));
+ files_sort(&files_dir, sort_nodes_simple);
+ files_sort(&files_ELF, sort_nodes_files_ext);
+ files_sort(&files_dot, sort_nodes_files_ext);
+ files_sort(&files_other, sort_nodes_simple);
+ files_sort(&files_compress, sort_nodes_simple);
+ files_sort(&files_symlink, sort_nodes_simple);
- file_info_list_free(symlist);
+ file_names_write_free(fd_out, &files_dir);
+ file_names_write_free(fd_out, &files_ELF);
+ file_names_write_free(fd_out, &files_dot);
+ file_names_write_free(fd_out, &files_other);
+ file_names_write_free(fd_out, &files_compress);
+ file_names_write_free(fd_out, &files_symlink);
}
static const char *const maintainerscripts[] = {
--
2.40.1
--- SoupGate-Win32 v1.05
* Origin: you cannot sedate... all the things you hate (1:229/2)