aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/util.c
diff options
context:
space:
mode:
authorGravatar keis <keijser@gmail.com>2011-01-15 22:14:42 +0100
committerGravatar keis <keijser@gmail.com>2011-02-15 21:05:54 +0100
commit2b7539061d8d437ef1507a8cf68d9b565d07c66e (patch)
tree65008548ecc38f5de13d91667e30b85eade497f2 /src/util.c
parent95fb1bfa2a140611ee68ef42447327f6defd9b8d (diff)
new function append_escaped
appends a string after escaping it
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c31
1 files changed, 30 insertions, 1 deletions
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;
+}