From 6783e448aac62aee4191a1a332234afc33cde9be Mon Sep 17 00:00:00 2001 From: djcb Date: Mon, 24 Jun 2013 22:41:34 +0300 Subject: [PATCH] * mu-str: add mu_str_remove_ctrl_in_place --- lib/mu-str.c | 28 ++++++++++++++++++++++++++++ lib/mu-str.h | 12 ++++++++++++ 2 files changed, 40 insertions(+) diff --git a/lib/mu-str.c b/lib/mu-str.c index 7ecf63db..3080c3d3 100644 --- a/lib/mu-str.c +++ b/lib/mu-str.c @@ -996,3 +996,31 @@ errexit: g_hash_table_destroy (hash); return NULL; } + + + +char * +mu_str_remove_ctrl_in_place (char *str) +{ + char *cur; + + g_return_val_if_fail (str, NULL); + + for (cur = str; *cur; ++cur) { + + GString *gstr; + + if (!iscntrl(*cur)) + continue; + + /* control char detected... */ + gstr = g_string_sized_new (strlen (str)); + for (cur = str; *cur; ++cur) + if (!iscntrl (*cur)) + g_string_append_c (gstr, *cur); + memcpy (str, gstr->str, gstr->len); /* fits */ + break; + } + + return str; +} diff --git a/lib/mu-str.h b/lib/mu-str.h index 23adb39e..3c74ac69 100644 --- a/lib/mu-str.h +++ b/lib/mu-str.h @@ -342,6 +342,18 @@ const gchar* mu_str_subject_normalize (const gchar* str); gchar* mu_str_quoted_from_strv (const gchar **params); + + +/** + * Remove control characters from a string + * + * @param str a string + * + * @return the str with control characters removed + */ +char* mu_str_remove_ctrl_in_place (char *str); + + /** @} */ G_END_DECLS