aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c
index cc51048..8f6c349 100644
--- a/src/util.c
+++ b/src/util.c
@@ -148,3 +148,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;
+}