From 3f0b2e85f33cb4ca931608959250f68ff81942a8 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 30 Mar 2022 12:12:44 +0200 Subject: [PATCH] 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. --- src/stream.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/stream.c b/src/stream.c index ab08eca64..8acce8075 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");