From: Christopher Faulet Date: Wed, 1 Apr 2020 15:24:47 +0000 (+0200) Subject: MINOR: sample: add rtrim converter X-Git-Tag: v2.2-dev7~140 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=568415a51f8a55052806f55223a2d84d2f78d8bd;p=thirdparty%2Fhaproxy.git MINOR: sample: add rtrim converter This converter strips specified characters from the end of a string. --- diff --git a/doc/configuration.txt b/doc/configuration.txt index c8e9cbc465..b52ea17f56 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -14442,6 +14442,10 @@ capture-res() "http-response capture", "capture.req.hdr" and "capture.res.hdr" (sample fetches). +rtrim() + Skips any characters from from the end of the string representation + of the input sample. + sdbm([]) 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 diff --git a/src/sample.c b/src/sample.c index fbbdab1af1..c26882d1a5 100644 --- a/src/sample.c +++ b/src/sample.c @@ -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 }, }};