From 5e0f90a930ceb3074ca0c0c92cf4f861e0b37079 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 30 Mar 2022 11:30:36 +0200 Subject: [PATCH] MINOR: sample: alphanumerically sort sample & conv keyword dumps 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 | 127 +++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 55 deletions(-) diff --git a/src/sample.c b/src/sample.c index e4d254b173..766e87ad9c 100644 --- a/src/sample.c +++ b/src/sample.c @@ -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"); } } -- 2.47.3