]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sample: alphanumerically sort sample & conv keyword dumps
authorWilly Tarreau <w@1wt.eu>
Wed, 30 Mar 2022 09:30:36 +0000 (11:30 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 30 Mar 2022 09:30:36 +0000 (11:30 +0200)
It's much more convenient to sort these keywords on output to detect
changes, and it's easy to do. The patch looks big but most of it is
only caused by an indent change in the loop, as "git diff -b" shows.

src/sample.c

index e4d254b173cf51f45ab84d6b97c351c1a6c5ff18..766e87ad9c3e2d5014fd68d13519ef52dba68635 100644 (file)
@@ -438,7 +438,7 @@ struct sample_fetch *find_sample_fetch(const char *kw, int len)
 void smp_dump_fetch_kw(void)
 {
        struct sample_fetch_kw_list *kwl;
-       struct sample_fetch *kw;
+       struct sample_fetch *kwp, *kw;
        uint64_t mask;
        int index;
        int arg;
@@ -460,38 +460,46 @@ void smp_dump_fetch_kw(void)
                printf(" %s\n", (bit < SMP_CKP_ENTRIES) ? fetch_ckp_names[bit] : "");
        }
 
-       list_for_each_entry(kwl, &sample_fetches.list, list) {
-               for (index = 0; kwl->kw[index].kw != NULL; index++) {
-                       kw = &kwl->kw[index];
-
-                       printf("[ ");
-                       for (bit = 0; bit < SMP_CKP_ENTRIES; bit++)
-                               printf("%s", (kw->val & (1 << bit)) ? "Y " : ". ");
-
-                       printf("] %s", kw->kw);
-                       if (kw->arg_mask) {
-                               mask = kw->arg_mask >> ARGM_BITS;
-                               printf("(");
-                               for (arg = 0;
-                                    arg < ARGM_NBARGS && ((mask >> (arg * ARGT_BITS)) & ARGT_MASK);
-                                    arg++) {
-                                       if (arg == (kw->arg_mask & ARGM_MASK)) {
-                                               /* now dumping extra args */
-                                               printf("[");
-                                       }
-                                       if (arg)
-                                               printf(",");
-                                       printf("%s", arg_type_names[(mask >> (arg * ARGT_BITS)) & ARGT_MASK]);
-                               }
-                               if (arg > (kw->arg_mask & ARGM_MASK)) {
-                                       /* extra args were dumped */
-                                       printf("]");
+       for (kw = kwp = NULL;; kwp = kw) {
+               list_for_each_entry(kwl, &sample_fetches.list, list) {
+                       for (index = 0; kwl->kw[index].kw != NULL; index++) {
+                               if (strordered(kwp ? kwp->kw : NULL,
+                                              kwl->kw[index].kw,
+                                              kw != kwp ? kw->kw : NULL))
+                                       kw = &kwl->kw[index];
+                       }
+               }
+
+               if (kw == kwp)
+                       break;
+
+               printf("[ ");
+               for (bit = 0; bit < SMP_CKP_ENTRIES; bit++)
+                       printf("%s", (kw->val & (1 << bit)) ? "Y " : ". ");
+
+               printf("] %s", kw->kw);
+               if (kw->arg_mask) {
+                       mask = kw->arg_mask >> ARGM_BITS;
+                       printf("(");
+                       for (arg = 0;
+                            arg < ARGM_NBARGS && ((mask >> (arg * ARGT_BITS)) & ARGT_MASK);
+                            arg++) {
+                               if (arg == (kw->arg_mask & ARGM_MASK)) {
+                                       /* now dumping extra args */
+                                       printf("[");
                                }
-                               printf(")");
+                               if (arg)
+                                       printf(",");
+                               printf("%s", arg_type_names[(mask >> (arg * ARGT_BITS)) & ARGT_MASK]);
+                       }
+                       if (arg > (kw->arg_mask & ARGM_MASK)) {
+                               /* extra args were dumped */
+                               printf("]");
                        }
-                       printf(": %s", smp_to_type[kw->out_type]);
-                       printf("\n");
+                       printf(")");
                }
+               printf(": %s", smp_to_type[kw->out_type]);
+               printf("\n");
        }
 }
 
@@ -499,38 +507,47 @@ void smp_dump_fetch_kw(void)
 void smp_dump_conv_kw(void)
 {
        struct sample_conv_kw_list *kwl;
-       struct sample_conv *kw;
+       struct sample_conv *kwp, *kw;
        uint64_t mask;
        int index;
        int arg;
 
-       list_for_each_entry(kwl, &sample_convs.list, list) {
-               for (index = 0; kwl->kw[index].kw != NULL; index++) {
-                       kw = &kwl->kw[index];
-                       printf("%s", kw->kw);
-                       if (kw->arg_mask) {
-                               mask = kw->arg_mask >> ARGM_BITS;
-                               printf("(");
-                               for (arg = 0;
-                                    arg < ARGM_NBARGS && ((mask >> (arg * ARGT_BITS)) & ARGT_MASK);
-                                    arg++) {
-                                       if (arg == (kw->arg_mask & ARGM_MASK)) {
-                                               /* now dumping extra args */
-                                               printf("[");
-                                       }
-                                       if (arg)
-                                               printf(",");
-                                       printf("%s", arg_type_names[(mask >> (arg * ARGT_BITS)) & ARGT_MASK]);
-                               }
-                               if (arg > (kw->arg_mask & ARGM_MASK)) {
-                                       /* extra args were dumped */
-                                       printf("]");
+       for (kw = kwp = NULL;; kwp = kw) {
+               list_for_each_entry(kwl, &sample_convs.list, list) {
+                       for (index = 0; kwl->kw[index].kw != NULL; index++) {
+                               if (strordered(kwp ? kwp->kw : NULL,
+                                              kwl->kw[index].kw,
+                                              kw != kwp ? kw->kw : NULL))
+                                       kw = &kwl->kw[index];
+                       }
+               }
+
+               if (kw == kwp)
+                       break;
+
+               printf("%s", kw->kw);
+               if (kw->arg_mask) {
+                       mask = kw->arg_mask >> ARGM_BITS;
+                       printf("(");
+                       for (arg = 0;
+                            arg < ARGM_NBARGS && ((mask >> (arg * ARGT_BITS)) & ARGT_MASK);
+                            arg++) {
+                               if (arg == (kw->arg_mask & ARGM_MASK)) {
+                                       /* now dumping extra args */
+                                       printf("[");
                                }
-                               printf(")");
+                               if (arg)
+                                       printf(",");
+                               printf("%s", arg_type_names[(mask >> (arg * ARGT_BITS)) & ARGT_MASK]);
+                       }
+                       if (arg > (kw->arg_mask & ARGM_MASK)) {
+                               /* extra args were dumped */
+                               printf("]");
                        }
-                       printf(": %s => %s", smp_to_type[kw->out_type], smp_to_type[kw->in_type]);
-                       printf("\n");
+                       printf(")");
                }
+               printf(": %s => %s", smp_to_type[kw->out_type], smp_to_type[kw->in_type]);
+               printf("\n");
        }
 }