Browse Source

[Minor] Core: Add function to strip characters in gstring

tags/1.9.0
Vsevolod Stakhov 5 years ago
parent
commit
9cd6c30cd0
2 changed files with 56 additions and 0 deletions
  1. 49
    0
      src/libutil/str_util.c
  2. 7
    0
      src/libutil/str_util.h

+ 49
- 0
src/libutil/str_util.c View 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;
}

+ 7
- 0
src/libutil/str_util.h View 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_ */

Loading…
Cancel
Save