changeset 2125:b8744d1982d1 v7.2.407

updated for version 7.2.407 Problem: When using an expression in ":s" backslashes in the result are dropped. (Sergey Goldgaber, Christian Brabandt) Solution: Double backslashes.
author Bram Moolenaar <bram@zimbu.org>
date Tue, 23 Mar 2010 16:27:22 +0100
parents dc8a5699253b
children e038754d419a
files src/regexp.c src/version.c
diffstat 2 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -6963,6 +6963,8 @@ vim_regsub_both(source, dest, copy, magi
 	    eval_result = eval_to_string(source + 2, NULL, TRUE);
 	    if (eval_result != NULL)
 	    {
+		int had_backslash = FALSE;
+
 		for (s = eval_result; *s != NUL; mb_ptr_adv(s))
 		{
 		    /* Change NL to CR, so that it becomes a line break.
@@ -6970,7 +6972,20 @@ vim_regsub_both(source, dest, copy, magi
 		    if (*s == NL)
 			*s = CAR;
 		    else if (*s == '\\' && s[1] != NUL)
+		    {
 			++s;
+			had_backslash = TRUE;
+		    }
+		}
+		if (had_backslash && backslash)
+		{
+		    /* Backslashes will be consumed, need to double them. */
+		    s = vim_strsave_escaped(eval_result, (char_u *)"\\");
+		    if (s != NULL)
+		    {
+			vim_free(eval_result);
+			eval_result = s;
+		    }
 		}
 
 		dst += STRLEN(eval_result);
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    407,
+/**/
     406,
 /**/
     405,