commit 210bbf0: [Minor] Add function to strip characters

Vsevolod Stakhov vsevolod at highsecure.ru
Thu Feb 7 15:14:08 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-02-06 14:17:43 +0000
URL: https://github.com/rspamd/rspamd/commit/210bbf027268137a23e8f10181225ffb5bb97cdc

[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 || \


More information about the Commits mailing list