diff src/search.c @ 89894:36484db1d55b

Sync.to HEAD.
author Kenichi Handa <handa@m17n.org>
date Mon, 12 Apr 2004 23:46:36 +0000
parents 885b083d5599
children 4c90ffeb71c5
line wrap: on
line diff
--- a/src/search.c	Mon Apr 12 23:18:01 2004 +0000
+++ b/src/search.c	Mon Apr 12 23:46:36 2004 +0000
@@ -2323,13 +2323,21 @@
 		      substart = search_regs.start[sub];
 		      subend = search_regs.end[sub];
 		    }
-		  else if (c >= '1' && c <= '9' && c <= search_regs.num_regs + '0')
+		  else if (c >= '1' && c <= '9')
 		    {
-		      if (search_regs.start[c - '0'] >= 0)
+		      if (search_regs.start[c - '0'] >= 0
+			  && c <= search_regs.num_regs + '0')
 			{
 			  substart = search_regs.start[c - '0'];
 			  subend = search_regs.end[c - '0'];
 			}
+		      else
+			{
+			  /* If that subexp did not match,
+			     replace \\N with nothing.  */
+			  substart = 0;
+			  subend = 0;
+			}
 		    }
 		  else if (c == '\\')
 		    delbackslash = 1;
@@ -2507,8 +2515,16 @@
 	}
 
       if (really_changed)
-	newtext = make_string (substed, substed_len);
-
+	{
+	  if (buf_multibyte)
+	    {
+	      int nchars = multibyte_chars_in_text (substed, substed_len);
+
+	      newtext = make_multibyte_string (substed, nchars, substed_len);
+	    }
+	  else
+	    newtext = make_unibyte_string (substed, substed_len);
+	}
       xfree (substed);
     }
 
@@ -2900,3 +2916,6 @@
   defsubr (&Sset_match_data);
   defsubr (&Sregexp_quote);
 }
+
+/* arch-tag: a6059d79-0552-4f14-a2cb-d379a4e3c78f
+   (do not change this comment) */