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 ab08eca..8acce80 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -3077,20 +3077,30 @@
  */
 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");