[hackers] [sbase] grep: Fix -x, simplify addpattern || Santtu Lakkala
commit 1c444555b8c9530a15ea84cd94e4b8de4d8e6019
Author: Santtu Lakkala <inz_AT_inz.fi>
AuthorDate: Thu Nov 6 15:24:08 2025 +0200
Commit: Roberto E. Vargas Caballero <k0ga_AT_shike2.net>
CommitDate: Thu Nov 6 15:14:01 2025 +0100
grep: Fix -x, simplify addpattern
Use grouping for -x to make \| / | work correctly; as a bonus beginning
and end of line anchors hold their special meaning inside a group,
removing the need for special handling of them.
Further, as this makes -w and -x only differ in anchors used, use the
same code for both.
diff --git a/grep.c b/grep.c
index f541d44..397f649 100644
--- a/grep.c
+++ b/grep.c
_AT_@ -41,31 +41,20 @@ addpattern(const char *pattern)
{
struct pattern *pnode;
char *tmp;
- int bol, eol;
- size_t len, patlen;
+ size_t patlen;
patlen = strlen(pattern);
- bol = pattern[0] == '^';
- eol = patlen > 0 && pattern[patlen - 1] == '$';
- if (!Fflag && xflag) {
- tmp = enmalloc(Error, patlen + 3);
- snprintf(tmp, patlen + 3, "%s%s%s",
- bol ? "" : "^",
- pattern,
- eol ? "" : "$");
- } else if (!Fflag && wflag) {
- len = patlen + 5 + (Eflag ? 2 : 4);
- tmp = enmalloc(Error, len);
-
- snprintf(tmp, len, "%s\\<%s%.*s%s\\>%s",
- bol ? "^" : "",
- Eflag ? "(" : "\\(",
- (int)patlen - bol - eol, pattern + bol,
- Eflag ? ")" : "\\)",
- eol ? "$" : "");
- } else {
+ if (Fflag || (!xflag && !wflag)) {
tmp = enstrdup(Error, pattern);
+ } else {
+ tmp = enmalloc(Error, patlen + 9);
+ sprintf(tmp, "%s%s%s%s%s",
+ xflag ? "^" : "\\<",
+ Eflag ? "(" : "\\(",
+ pattern,
+ Eflag ? ")" : "\\)",
+ xflag ? "$" : "\\>");
}
pnode = enmalloc(Error, sizeof(*pnode));
Received on Thu Nov 06 2025 - 15:14:29 CET
This archive was generated by hypermail 2.3.0
: Thu Nov 06 2025 - 15:24:36 CET