• [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)