]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Core: Add function to strip characters in gstring
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 17 Jan 2019 14:57:24 +0000 (14:57 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 17 Jan 2019 14:57:24 +0000 (14:57 +0000)
src/libutil/str_util.c
src/libutil/str_util.h

index 2016808cf89fee55813932a5cfe0cab49422e3dc..e7296290484f960310458226ea370ceb7aa7922f 100644 (file)
@@ -2751,4 +2751,53 @@ rspamd_str_make_utf_valid (const gchar *src, gsize slen, gsize *dstlen)
        g_string_free (dst, FALSE);
 
        return dchar;
+}
+
+gsize
+rspamd_gstring_strip (GString *s, const gchar *strip_chars)
+{
+       const gchar *p, *sc;
+       gsize strip_len = 0, total = 0;
+
+       p = s->str + s->len - 1;
+
+       while (p >= s->str) {
+               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) {
+               s->len -= strip_len;
+               s->str[s->len] = '\0';
+               total += strip_len;
+       }
+
+       if (s->len > 0) {
+               strip_len = rspamd_memspn (s->str, strip_chars, s->len);
+
+               if (strip_len > 0) {
+                       memmove (s->str, s->str + strip_len, s->len - strip_len);
+                       s->len -= strip_len;
+                       total += strip_len;
+               }
+       }
+
+       return total;
 }
\ No newline at end of file
index 05966538869d95a961a81cfc38b656525f32a220..a2669d1a0d69e08c88ccb7c6aefcd6556850dfc4 100644 (file)
@@ -447,6 +447,13 @@ rspamd_str_regexp_escape (const gchar *pattern, gsize slen,
  */
 gchar * rspamd_str_make_utf_valid (const gchar *src, gsize slen, gsize *dstlen);
 
+/**
+ * Strips characters in `strip_chars` from start and end of the GString
+ * @param s
+ * @param strip_chars
+ */
+gsize rspamd_gstring_strip (GString *s, const gchar *strip_chars);
+
 #define IS_ZERO_WIDTH_SPACE(uc) ((uc) == 0x200b || (uc) == 0x200c)
 
 #endif /* SRC_LIBUTIL_STR_UTIL_H_ */