Mercurial > dovecot > core-2.2
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; +}