changeset 19627:7c7e554860c6

config: Fixed '\' line continuation to work again. This had been broken for many years.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 24 Jan 2016 22:06:30 +0200
parents d9905cfd13fd
children 9642acb1940a
files src/config/config-parser-private.h src/config/config-parser.c src/config/old-set-parser.c
diffstat 3 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/config/config-parser-private.h	Sun Jan 24 20:07:58 2016 +0200
+++ b/src/config/config-parser-private.h	Sun Jan 24 22:06:30 2016 +0200
@@ -6,6 +6,7 @@
 
 enum config_line_type {
 	CONFIG_LINE_TYPE_SKIP,
+	CONFIG_LINE_TYPE_CONTINUE,
 	CONFIG_LINE_TYPE_ERROR,
 	CONFIG_LINE_TYPE_KEYVALUE,
 	CONFIG_LINE_TYPE_KEYFILE,
--- a/src/config/config-parser.c	Sun Jan 24 20:07:58 2016 +0200
+++ b/src/config/config-parser.c	Sun Jan 24 22:06:30 2016 +0200
@@ -601,7 +601,7 @@
 			len--;
 		str_append_n(full_line, line, len);
 		str_append_c(full_line, ' ');
-		return CONFIG_LINE_TYPE_SKIP;
+		return CONFIG_LINE_TYPE_CONTINUE;
 	}
 	if (str_len(full_line) > 0) {
 		str_append(full_line, line);
@@ -843,6 +843,8 @@
 	switch (type) {
 	case CONFIG_LINE_TYPE_SKIP:
 		break;
+	case CONFIG_LINE_TYPE_CONTINUE:
+		i_unreached();
 	case CONFIG_LINE_TYPE_ERROR:
 		ctx->error = p_strdup(ctx->pool, value);
 		break;
@@ -969,6 +971,8 @@
 		type = config_parse_line(&ctx, line, full_line,
 					 &key, &value);
 		str_truncate(ctx.str, ctx.pathlen);
+		if (type == CONFIG_LINE_TYPE_CONTINUE)
+			continue;
 
 		T_BEGIN {
 			handled = old_settings_handle(&ctx, type, key, value);
--- a/src/config/old-set-parser.c	Sun Jan 24 20:07:58 2016 +0200
+++ b/src/config/old-set-parser.c	Sun Jan 24 22:06:30 2016 +0200
@@ -579,6 +579,7 @@
 {
 	switch (type) {
 	case CONFIG_LINE_TYPE_SKIP:
+	case CONFIG_LINE_TYPE_CONTINUE:
 	case CONFIG_LINE_TYPE_ERROR:
 	case CONFIG_LINE_TYPE_INCLUDE:
 	case CONFIG_LINE_TYPE_INCLUDE_TRY: