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++) {