--- tools/rpmsort.c.orig 2023-10-11 11:38:36.639686209 +0000 +++ tools/rpmsort.c 2023-10-11 12:01:36.112837741 +0000 @@ -119,6 +119,11 @@ exit: return vercmpflag; } +static int package_version_compare_reverse(const void *p, const void *q) +{ + return -package_version_compare(p, q); +} + static void add_input(const char *filename, char ***package_names, size_t *n_package_names) { @@ -169,7 +174,13 @@ static void add_input(const char *filena *n_package_names = n_names; } -static struct poptOption optionsTable[] = { POPT_AUTOHELP POPT_TABLEEND }; +static int reverse = 0; + +static struct poptOption optionsTable[] = { + { "reverse", 'r', POPT_ARG_VAL, &reverse, 1, + N_("reverse the result of comparisons"), NULL }, + POPT_AUTOHELP POPT_TABLEEND +}; int main(int argc, const char *argv[]) { @@ -181,7 +192,7 @@ int main(int argc, const char *argv[]) optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); poptSetOtherOptionHelp(optCon, ""); - if (poptGetNextOpt(optCon) == 0) { + if (poptGetNextOpt(optCon) != -1) { poptPrintUsage(optCon, stderr, 0); exit(EXIT_FAILURE); } @@ -201,7 +212,8 @@ int main(int argc, const char *argv[]) } qsort(package_names, n_package_names, sizeof(char *), - package_version_compare); + reverse ? package_version_compare_reverse + : package_version_compare); /* Send sorted list to stdout. */ for (int i = 0; i < n_package_names; i++) {