diff options
author | jtc <jtc@FreeBSD.org> | 1993-10-04 21:58:53 +0000 |
---|---|---|
committer | jtc <jtc@FreeBSD.org> | 1993-10-04 21:58:53 +0000 |
commit | c2f64d013cfa9338f88b4a516342e6d618a71376 (patch) | |
tree | 86826d0ba464f1e9bfbc74eebc783dfd3b18ae77 | |
parent | e03159403ef933a60c01a89c78ebcdb388f66b36 (diff) | |
download | FreeBSD-src-c2f64d013cfa9338f88b4a516342e6d618a71376.zip FreeBSD-src-c2f64d013cfa9338f88b4a516342e6d618a71376.tar.gz |
Allow expressions like "expr 'ABC' : '^.*$' to work as is done in other
expr implementations.
-rw-r--r-- | bin/expr/expr.y | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/bin/expr/expr.y b/bin/expr/expr.y index e7a0a5a..57ad502 100644 --- a/bin/expr/expr.y +++ b/bin/expr/expr.y @@ -495,26 +495,20 @@ struct val *a, *b; char errbuf[256]; int eval; struct val *v; - char *newpat; /* coerce to both arguments to strings */ to_string(a); to_string(b); - /* patterns are anchored to the beginning of the line */ - newpat = malloc (strlen (b->u.s) + 2); - strcpy (newpat, "^"); - strcat (newpat, b->u.s); - /* compile regular expression */ - if ((eval = regcomp (&rp, newpat, 0)) != 0) { + if ((eval = regcomp (&rp, b->u.s, 0)) != 0) { regerror (eval, &rp, errbuf, sizeof(errbuf)); errx (2, "%s", errbuf); } - free (newpat); /* compare string against pattern */ - if (regexec(&rp, a->u.s, 2, rm, 0) == 0) { + /* remember that patterns are anchored to the beginning of the line */ + if (regexec(&rp, a->u.s, 2, rm, 0) == 0 && rm[0].rm_so == 0) { if (rm[1].rm_so >= 0) { *(a->u.s + rm[1].rm_eo) = '\0'; v = make_str (a->u.s + rm[1].rm_so); |