]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sample: add rtrim converter
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 1 Apr 2020 15:24:47 +0000 (17:24 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Apr 2020 07:39:37 +0000 (09:39 +0200)
This converter strips specified characters from the end of a string.

doc/configuration.txt
src/sample.c

index c8e9cbc465715ec413652dab530e110ab64be05d..b52ea17f561ca61d064759d58cc2c76a9288bf1d 100644 (file)
@@ -14442,6 +14442,10 @@ capture-res(<id>)
             "http-response capture", "capture.req.hdr" and
             "capture.res.hdr" (sample fetches).
 
+rtrim(<chars>)
+  Skips any characters from <chars> from the end of the string representation
+  of the input sample.
+
 sdbm([<avalanche>])
   Hashes a binary input sample into an unsigned 32-bit quantity using the SDBM
   hash function. Optionally, it is possible to apply a full avalanche hash
index fbbdab1af1b58a4b2c121c8760f8304f39597248..c26882d1a51b13f76ce85854bc046c81c2d70d7b 100644 (file)
@@ -3015,6 +3015,26 @@ static int sample_conv_ltrim(const struct arg *arg_p, struct sample *smp, void *
        return 1;
 }
 
+/**/
+static int sample_conv_rtrim(const struct arg *arg_p, struct sample *smp, void *private)
+{
+       char *delimiters, *p;
+       size_t dlen, l;
+
+       delimiters =  arg_p[0].data.str.area;
+       dlen = arg_p[0].data.str.data;
+
+       l = smp->data.u.str.data;
+       p = smp->data.u.str.area + l - 1;
+       while (l && memchr(delimiters, *p, dlen) != NULL) {
+               p--;
+               l--;
+       }
+
+       smp->data.u.str.data = l;
+       return 1;
+}
+
 /************************************************************************/
 /*       All supported sample fetch functions must be declared here     */
 /************************************************************************/
@@ -3486,6 +3506,7 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "htonl",    sample_conv_htonl,              0, NULL, SMP_T_SINT, SMP_T_BIN  },
        { "cut_crlf", sample_conv_cut_crlf,           0, NULL, SMP_T_STR,  SMP_T_STR  },
        { "ltrim",    sample_conv_ltrim,    ARG1(1,STR), NULL, SMP_T_STR,  SMP_T_STR  },
+       { "rtrim",    sample_conv_rtrim,    ARG1(1,STR), NULL, SMP_T_STR,  SMP_T_STR  },
        { NULL, NULL, 0, 0, 0 },
 }};