grep: Fix -x, simplify addpattern - sbase - suckless unix tools
 (HTM) git clone git://git.suckless.org/sbase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1c444555b8c9530a15ea84cd94e4b8de4d8e6019
 (DIR) parent 314a2d20cba0a92f7b0494056c27895169675ca0
 (HTM) Author: Santtu Lakkala <inz@inz.fi>
       Date:   Thu,  6 Nov 2025 15:24:08 +0200
       
       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.
       
       Diffstat:
         M grep.c                              |      31 ++++++++++---------------------
       
       1 file changed, 10 insertions(+), 21 deletions(-)
       ---
 (DIR) diff --git a/grep.c b/grep.c
       @@ -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));