diff options
author | Fabian Groffen <grobian@gentoo.org> | 2019-12-14 16:58:51 +0100 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2019-12-14 16:58:51 +0100 |
commit | 7967115a80957a456b53748820019ba7f484f4c9 (patch) | |
tree | dd9d298dca3df1494bdced366a9af910b86afe60 /qkeyword.c | |
parent | qlop: fix signedness warning (diff) | |
download | portage-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.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -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); |