From: Michael Tremer Date: Tue, 24 Dec 2024 14:40:52 +0000 (+0000) Subject: packager: Sort files before writing the archive X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0fc42dfea540d9b3ce0e8845e5c1c1761fce384f;p=people%2Fric9%2Fpakfire.git packager: Sort files before writing the archive Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index baca546b6..fd73ecba2 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -230,6 +230,18 @@ int pakfire_filelist_remove_all( return pakfire_filelist_walk(removees, __pakfire_filelist_remove_one, list, 0); } +static int __pakfire_filelist_sort(const void* p1, const void* p2, void* data) { + struct pakfire_file* file1 = *((struct pakfire_file**)p1); + struct pakfire_file* file2 = *((struct pakfire_file**)p2); + + return pakfire_file_cmp(file1, file2); +} + +PAKFIRE_EXPORT void pakfire_filelist_sort(struct pakfire_filelist* list) { + qsort_r(list->files, list->num_files, sizeof(*list->files), + __pakfire_filelist_sort, NULL); +} + static int pakfire_filelist_match_patterns(const char* path, const char** patterns, const int flags) { char buffer[PATH_MAX]; diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index 4f1d93301..a64179d65 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -39,6 +39,8 @@ struct pakfire_file* pakfire_filelist_get(struct pakfire_filelist* list, size_t int pakfire_filelist_add(struct pakfire_filelist* list, struct pakfire_file* file); +void pakfire_filelist_sort(struct pakfire_filelist* list); + #ifdef PAKFIRE_PRIVATE #include diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index df584b1f7..df81fb4b9 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -157,6 +157,7 @@ global: pakfire_filelist_is_empty; pakfire_filelist_length; pakfire_filelist_ref; + pakfire_filelist_sort; pakfire_filelist_unref; # key diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index e910000af..fe126d783 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -409,6 +409,9 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) { goto ERROR; } + // Sort the filelist + pakfire_filelist_sort(packager->filelist); + // Add filelist r = pakfire_package_set_filelist(packager->pkg, packager->filelist); if (r)