MINOR: sample: add cut_crlf converter
This converter cuts a string on the first \r or \n found.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 7c2d838..df4465c 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -14036,6 +14036,11 @@
not be used for security purposes as a 32-bit hash is trivial to break. See
also "djb2", "sdbm", "wt6", "crc32" and the "hash-type" directive.
+cut_crlf
+ Cuts the string representation of the input sample on the first carriage
+ return ('\r') or newline ('\n') character found. Only the string length is
+ updated.
+
da-csv-conv(<prop>[,<prop>*])
Asks the DeviceAtlas converter to identify the User Agent string passed on
input, and to emit a string made of the concatenation of the properties
diff --git a/src/sample.c b/src/sample.c
index c28b544..43d932d 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -2979,6 +2979,21 @@
return 1;
}
+/**/
+static int sample_conv_cut_crlf(const struct arg *arg_p, struct sample *smp, void *private)
+{
+ char *p;
+ size_t l;
+
+ p = smp->data.u.str.area;
+ for (l = 0; l < smp->data.u.str.data; l++) {
+ if (*(p+l) == '\r' || *(p+l) == '\n')
+ break;
+ }
+ smp->data.u.str.data = l;
+ return 1;
+}
+
/************************************************************************/
/* All supported sample fetch functions must be declared here */
/************************************************************************/
@@ -3447,7 +3462,8 @@
{ "mod", sample_conv_arith_mod, ARG1(1,STR), check_operator, SMP_T_SINT, SMP_T_SINT },
{ "neg", sample_conv_arith_neg, 0, NULL, SMP_T_SINT, SMP_T_SINT },
- { "htonl", sample_conv_htonl, 0, NULL, SMP_T_SINT, SMP_T_BIN },
+ { "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 },
{ NULL, NULL, 0, 0, 0 },
}};