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 | |
parent | 95fb1bfa2a140611ee68ef42447327f6defd9b8d (diff) |
new function append_escaped
appends a string after escaping it
-rw-r--r-- | src/util.c | 31 | ||||
-rw-r--r-- | src/util.h | 4 |
2 files changed, 34 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; +} @@ -17,3 +17,7 @@ gboolean for_each_line_in_file(const gchar *path, void (*callback)(const gcha enum exp_type get_exp_type(const gchar*); gchar* find_existing_file(gchar*); gchar* argv_idx(const GArray*, const guint); +/** + * appends `src' to `dest' with backslash, single-quotes and newlines in + * `src' escaped */ +GString * append_escaped (GString *dest, const gchar *src); |