From 2b7539061d8d437ef1507a8cf68d9b565d07c66e Mon Sep 17 00:00:00 2001 From: keis Date: Sat, 15 Jan 2011 22:14:42 +0100 Subject: new function append_escaped appends a string after escaping it --- src/util.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/util.c') diff --git a/src/util.c b/src/util.c index ead07b5..345bf2f 100644 --- a/src/util.c +++ b/src/util.c @@ -108,7 +108,6 @@ for_each_line_in_file(const gchar *path, void (*callback)(const gchar *l, void * return FALSE; } - enum exp_type get_exp_type(const gchar *s) { /* variables */ @@ -181,3 +180,33 @@ gchar* argv_idx(const GArray *a, const guint idx) { return g_array_index(a, gchar*, idx); } + +GString * +append_escaped (GString *dest, const gchar *src) { + g_assert(dest); + g_assert(src); + + // Hint that we are going to append another string. + int oldlen = dest->len; + g_string_set_size (dest, dest->len + strlen(src) * 2); + g_string_truncate (dest, oldlen); + + // Append src char by char with baddies escaped + for (const gchar *p = src; *p; p++) { + switch (*p) { + case '\\': + g_string_append (dest, "\\\\"); + break; + case '\'': + g_string_append (dest, "\\'"); + break; + case '\n': + g_string_append (dest, "\\n"); + break; + default: + g_string_append_c (dest, *p); + break; + } + } + return dest; +} -- cgit v1.2.3