On Sat, Dec 25, 2021 at 04:44:11PM -0800, Greg Steuck wrote:

> The separator doesn't get printed when I use this script on OpenBSD. It
> does get printed on FreeBSD or if I used GNU grep. The issue appears to
> be an off-by-one of some sort because removing the empty line makes the
> separator disappear on both systems.
> 
> #!/bin/sh
> 
> grep -E -A6 '^(.w)?g' <<'EOF'
> $wg
> a
> b
> c
> d
> e
> f
> 
> g = \ ds ->
> h
> i
> j
> EOF
> 

Hi,

please include the expected output and the output seen in bug reports,
it makes the initial diagnosis much easier. I now had to run your
testcase on another system to see what you meant. 

BTW, on MacOS I do see the separator with your test, both with the
empty line and without it.

ANyway, here's an attempt at a fix. Without much coffee, so beware.

        -Otto

Test script I used:
grep -E -A6 X << 'EOF'
X
1
2
3
4
X
1
2
3
4
5
6
7
X
1
2
3
4
5
6
X
1
EOF

Output with diff on and OpenBSD and MAcOS:
X
1
2
3
4
X
1
2
3
4
5
6
--
X
1
2
3
4
5
6
--
X
1


Index: util.c
===================================================================
RCS file: /cvs/src/usr.bin/grep/util.c,v
retrieving revision 1.63
diff -u -p -r1.63 util.c
--- util.c      23 Jul 2020 20:19:27 -0000      1.63
+++ util.c      26 Dec 2021 08:20:10 -0000
@@ -258,8 +258,7 @@ print:
 
        if ((tail > 0 || c) && !cflag && !qflag) {
                if (c) {
-                       if (first > 0 && tail == 0 && (Bflag < linesqueued) &&
-                           (Aflag || Bflag))
+                       if (first > 0 && tail == 0 && (Aflag || (Bflag && Bflag 
< linesqueued)))
                                printf("--\n");
                        first = 1;
                        tail = Aflag;

Reply via email to