diff options
author | keis <keijser@gmail.com> | 2011-01-15 22:14:42 +0100 |
---|---|---|
committer | keis <keijser@gmail.com> | 2011-02-15 21:05:54 +0100 |
commit | 2b7539061d8d437ef1507a8cf68d9b565d07c66e (patch) | |
tree | 65008548ecc38f5de13d91667e30b85eade497f2 /src/util.c | |
parent | 95fb1bfa2a140611ee68ef42447327f6defd9b8d (diff) |
new function append_escaped
appends a string after escaping it
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -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; +} |