aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2019-12-14 16:58:51 +0100
committerFabian Groffen <grobian@gentoo.org>2019-12-14 16:58:51 +0100
commit7967115a80957a456b53748820019ba7f484f4c9 (patch)
treedd9d298dca3df1494bdced366a9af910b86afe60 /qkeyword.c
parentqlop: fix signedness warning (diff)
downloadportage-utils-7967115a80957a456b53748820019ba7f484f4c9.tar.gz
portage-utils-7967115a80957a456b53748820019ba7f484f4c9.tar.bz2
portage-utils-7967115a80957a456b53748820019ba7f484f4c9.zip
qkeyword: sort keywords
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'qkeyword.c')
-rw-r--r--qkeyword.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/qkeyword.c b/qkeyword.c
index b329068e..4c6c759c 100644
--- a/qkeyword.c
+++ b/qkeyword.c
@@ -650,6 +650,29 @@ qkeyword_results_cb(tree_pkg_ctx *pkg_ctx, void *priv)
return EXIT_SUCCESS;
}
+static int
+keyword_sort(const void *l, const void *r)
+{
+ const char **ls = (const char **)l;
+ const char **rs = (const char **)r;
+ char *ld = strchr(*ls, '-');
+ char *rd = strchr(*rs, '-');
+
+ printf("%s vs %s\n", *ls, *rs);
+ if (ld == NULL && rd != NULL)
+ return -1;
+ else if (ld != NULL && rd == NULL)
+ return 1;
+ else if (ld == NULL)
+ return strcmp(*ls, *rs);
+ else {
+ int ret = strcmp(ld + 1, rd + 1);
+ if (ret == 0)
+ ret = strcmp(*ls, *rs);
+ return ret;
+ }
+}
+
static void
qkeyword_load_arches(const char *overlay)
{
@@ -690,6 +713,9 @@ qkeyword_load_arches(const char *overlay)
free(archlist);
list_set(archs, &archlist);
+ /* sort so the output makes more 'sense' */
+ qsort(archlist, archlist_count, sizeof(char **), keyword_sort);
+
fclose(fp);
done:
free(filename);