From 210bbf027268137a23e8f10181225ffb5bb97cdc Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 6 Feb 2019 14:17:43 +0000 Subject: [PATCH] [Minor] Add function to strip characters --- src/libutil/str_util.c | 52 ++++++++++++++++++++++++++++++++++++++++++ src/libutil/str_util.h | 8 +++++++ 2 files changed, 60 insertions(+) diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index 2e09e48f3..7078415d3 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -2826,4 +2826,56 @@ rspamd_gstring_strip (GString *s, const gchar *strip_chars) } return total; +} + +const gchar* rspamd_string_len_strip (const gchar *in, + gsize *len, + const gchar *strip_chars) +{ + const gchar *p, *sc; + gsize strip_len = 0, old_len = *len; + + p = in + old_len - 1; + + /* Trail */ + while (p >= in) { + gboolean seen = FALSE; + + sc = strip_chars; + + while (*sc != '\0') { + if (*p == *sc) { + strip_len ++; + seen = TRUE; + break; + } + + sc ++; + } + + if (!seen) { + break; + } + + p --; + } + + if (strip_len > 0) { + *len -= strip_len; + } + + /* Head */ + old_len = *len; + + if (old_len > 0) { + strip_len = rspamd_memspn (in, strip_chars, old_len); + + if (strip_len > 0) { + *len -= strip_len; + + return in + strip_len; + } + } + + return in; } \ No newline at end of file diff --git a/src/libutil/str_util.h b/src/libutil/str_util.h index 5e3d7a201..72e0ab56f 100644 --- a/src/libutil/str_util.h +++ b/src/libutil/str_util.h @@ -454,6 +454,14 @@ gchar * rspamd_str_make_utf_valid (const gchar *src, gsize slen, gsize *dstlen); */ gsize rspamd_gstring_strip (GString *s, const gchar *strip_chars); +/** + * Strips characters in `strip_chars` from start and end of the sized string + * @param s + * @param strip_chars + */ +const gchar* rspamd_string_len_strip (const gchar *in, + gsize *len, const gchar *strip_chars); + #define IS_ZERO_WIDTH_SPACE(uc) ((uc) == 0x200B || \ (uc) == 0x200C || \ (uc) == 0x200D || \ -- 2.39.5