]> git.ipfire.org Git - pakfire.git/commitdiff
package: Sort dependencies on dump
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 29 Apr 2021 23:06:41 +0000 (23:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 29 Apr 2021 23:06:41 +0000 (23:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/package.c

index 7b9db5759ba9fad83bfb6bca5e904d5c0b425564..18ae59286f0385c43c4cdac6d56a9ad7075f3edd 100644 (file)
@@ -765,6 +765,13 @@ static void pakfire_package_dump_add_line_size(char** str, const char* key, unsi
        pakfire_package_dump_add_line(str, key, buffer);
 }
 
+static int pakfire_sort_dependencies(const void* p1, const void* p2) {
+       const char* dep1 = *(const char**)p1;
+       const char* dep2 = *(const char**)p2;
+
+       return strcmp(dep1, dep2);
+}
+
 PAKFIRE_EXPORT char* pakfire_package_dump(PakfirePackage pkg, int flags) {
        char* string = "";
 
@@ -872,13 +879,23 @@ PAKFIRE_EXPORT char* pakfire_package_dump(PakfirePackage pkg, int flags) {
                };
 
                for (const struct relation* relation = relations; relation->name; relation++) {
-                       char** list = relation->get(pkg);
-                       if (list) {
-                               for (char** dep = list; *dep; dep++) {
+                       char** deps = relation->get(pkg);
+                       if (deps) {
+                               size_t count = 0;
+
+                               // Count elements in the list
+                               for (char** dep = deps; *dep; dep++)
+                                       count++;
+
+                               // Sort the list
+                               qsort(deps, count, sizeof(*deps), pakfire_sort_dependencies);
+
+                               // Write it to the console
+                               for (char** dep = deps; *dep; dep++) {
                                        pakfire_package_dump_add_line(&string, relation->name, *dep);
                                        free(*dep);
                                }
-                               free(list);
+                               free(deps);
                        }
                }
        }