diff src/lib/strescape.c @ 9232:2dcf2f313329 HEAD

Added str_tabescape*() to write escaped strings to Dovecot's IPC protocols.
author Timo Sirainen <tss@iki.fi>
date Tue, 05 May 2009 20:25:13 -0400
parents b9faf4db2a9f
children 464116e1d0ae
line wrap: on
line diff
--- a/src/lib/strescape.c	Tue May 05 18:47:54 2009 -0400
+++ b/src/lib/strescape.c	Tue May 05 20:25:13 2009 -0400
@@ -71,3 +71,42 @@
 	*dest = '\0';
 	return start;
 }
+
+void str_tabescape_write(string_t *dest, const char *src)
+{
+	for (; *src != '\0'; src++) {
+		switch (*src) {
+		case '\001':
+			str_append_c(dest, '\001');
+			str_append_c(dest, '1');
+			break;
+		case '\t':
+			str_append_c(dest, '\001');
+			str_append_c(dest, 't');
+			break;
+		case '\n':
+			str_append_c(dest, '\001');
+			str_append_c(dest, 'n');
+			break;
+		default:
+			str_append_c(dest, *src);
+			break;
+		}
+	}
+}
+
+const char *str_tabescape(const char *str)
+{
+	string_t *tmp;
+	const char *p;
+
+	for (p = str; *p != '\0'; p++) {
+		if (*p <= '\n') {
+			tmp = t_str_new(128);
+			str_append_n(tmp, str, p-str);
+			str_tabescape_write(tmp, p);
+			return str_c(tmp);
+		}
+	}
+	return str;
+}