Mercurial > dovecot > core-2.2
diff src/lib/strescape.c @ 17112:9735c6fb7e39
liblib: Added str_unescape_next()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 15 Jan 2014 16:44:04 -0500 |
parents | 36ef72481934 |
children | add8c00fb3cc |
line wrap: on
line diff
--- a/src/lib/strescape.c Wed Jan 15 15:57:50 2014 -0500 +++ b/src/lib/strescape.c Wed Jan 15 16:44:04 2014 -0500 @@ -77,6 +77,30 @@ return start; } +int str_unescape_next(const char **str, const char **unescaped_r) +{ + const char *p; + char *escaped; + bool esc_found = FALSE; + + for (p = *str; *p != '\0'; p++) { + if (*p == '"') + break; + else if (*p == '\\') { + if (p[1] == '\0') + return -1; + esc_found = TRUE; + p++; + } + } + if (*p != '"') + return -1; + escaped = p_strdup_until(unsafe_data_stack_pool, *str, p); + *str = p+1; + *unescaped_r = !esc_found ? escaped : str_unescape(escaped); + return 0; +} + void str_append_tabescaped(string_t *dest, const char *src) { for (; *src != '\0'; src++) {