From: Willy Tarreau Date: Wed, 30 Mar 2022 10:12:44 +0000 (+0200) Subject: MINOR: services: alphabetically sort service names X-Git-Tag: v2.6-dev5~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3f0b2e85f33cb4ca931608959250f68ff81942a8;p=thirdparty%2Fhaproxy.git MINOR: services: alphabetically sort service names Note that we cannot reuse dump_act_rules() because the output format may be adjusted depending on the call place (this is also used from haproxy -vv). The principle is the same however. --- diff --git a/src/stream.c b/src/stream.c index ab08eca648..8acce8075c 100644 --- a/src/stream.c +++ b/src/stream.c @@ -3077,20 +3077,30 @@ struct action_kw *service_find(const char *kw) */ void list_services(FILE *out) { + const struct action_kw *akwp, *akwn; struct action_kw_list *kw_list; int found = 0; int i; if (out) fprintf(out, "Available services :"); - list_for_each_entry(kw_list, &service_keywords, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - found = 1; - if (out) - fprintf(out, " %s", kw_list->kw[i].kw); - else - printf("%s\n", kw_list->kw[i].kw); + + for (akwn = akwp = NULL;; akwp = akwn) { + list_for_each_entry(kw_list, &service_keywords, list) { + for (i = 0; kw_list->kw[i].kw != NULL; i++) { + if (strordered(akwp ? akwp->kw : NULL, + kw_list->kw[i].kw, + akwn != akwp ? akwn->kw : NULL)) + akwn = &kw_list->kw[i]; + found = 1; + } } + if (akwn == akwp) + break; + if (out) + fprintf(out, " %s", akwn->kw); + else + printf("%s\n", akwn->kw); } if (!found && out) fprintf(out, " none\n");