summaryrefslogtreecommitdiff
path: root/usr.bin/vi/ex/ex_subst.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/vi/ex/ex_subst.c')
-rw-r--r--usr.bin/vi/ex/ex_subst.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/usr.bin/vi/ex/ex_subst.c b/usr.bin/vi/ex/ex_subst.c
index c935d92c248..52fef271698 100644
--- a/usr.bin/vi/ex/ex_subst.c
+++ b/usr.bin/vi/ex/ex_subst.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_subst.c 10.32 (Berkeley) 6/30/96";
+static const char sccsid[] = "@(#)ex_subst.c 10.35 (Berkeley) 8/11/96";
#endif /* not lint */
#include <sys/types.h>
@@ -91,7 +91,7 @@ subagain: return (ex_subagain(sp, cmdp));
sp->c_suffix = sp->g_suffix = 0;
/*
- * Get the pattern string, toss escaped characters.
+ * Get the pattern string, toss escaping characters.
*
* !!!
* Historic vi accepted any of the following forms:
@@ -103,10 +103,10 @@ subagain: return (ex_subagain(sp, cmdp));
*
* QUOTING NOTE:
*
- * Only toss an escape character if it escapes a delimiter.
+ * Only toss an escaping character if it escapes a delimiter.
* This means that "s/A/\\\\f" replaces "A" with "\\f". It
* would be nice to be more regular, i.e. for each layer of
- * escaping a single escape character is removed, but that's
+ * escaping a single escaping character is removed, but that's
* not how the historic vi worked.
*/
for (ptrn = t = p;;) {
@@ -179,7 +179,7 @@ subagain: return (ex_subagain(sp, cmdp));
*
* QUOTING NOTE:
*
- * Only toss an escape character if it escapes a delimiter or
+ * Only toss an escaping character if it escapes a delimiter or
* if O_MAGIC is set and it escapes a tilde.
*
* !!!
@@ -1208,8 +1208,10 @@ re_tag_conv(sp, ptrnp, plenp, replacedp)
}
/* If the first or second character is a '^', it's magic. */
- if (p[0] == '^')
+ if (p[0] == '^') {
*t++ = *p++;
+ --len;
+ }
/*
* Escape every other magic character we can find, meanwhile stripping
@@ -1278,7 +1280,7 @@ re_cscope_conv(sp, ptrnp, plenp, replacedp)
memcpy(t, CSCOPE_RE_SPACE, sizeof(CSCOPE_RE_SPACE) - 1);
t += sizeof(CSCOPE_RE_SPACE) - 1;
} else {
- if (strchr("\\^.[]$*", *p))
+ if (strchr("\\^.[]$*+?()|{}", *p))
*t++ = '\\';
*t++ = *p;
}
@@ -1358,7 +1360,7 @@ re_sub(sp, ip, lbp, lbclenp, lblenp, match)
* \U convert to upper-case, until \E, \e, or end of replacement
*
* Otherwise, since this is the lowest level of replacement, discard
- * all escape characters. This (hopefully) follows historic practice.
+ * all escaping characters. This (hopefully) matches historic practice.
*/
#define OUTCH(ch, nltrans) { \
CHAR_T __ch = (ch); \