Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F172491801
D10105.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D10105.diff
View Options
Index: head/usr.bin/grep/util.c
===================================================================
--- head/usr.bin/grep/util.c
+++ head/usr.bin/grep/util.c
@@ -55,6 +55,9 @@
static int linesqueued;
static int procline(struct str *l, int);
+static int lasta;
+static bool ctxover;
+
bool
file_matching(const char *fname)
{
@@ -212,8 +215,10 @@
strcpy(ln.file, fn);
ln.line_no = 0;
ln.len = 0;
+ ctxover = false;
linesqueued = 0;
tail = 0;
+ lasta = 0;
ln.off = -1;
for (c = 0; c == 0 || !(lflag || qflag); ) {
@@ -235,10 +240,24 @@
free(f);
return (0);
}
- /* Process the file line-by-line */
+
+ /* Process the file line-by-line, enqueue non-matching lines */
if ((t = procline(&ln, f->binary)) == 0 && Bflag > 0) {
- enqueue(&ln);
- linesqueued++;
+ /* Except don't enqueue lines that appear in -A ctx */
+ if (ln.line_no == 0 || lasta != ln.line_no) {
+ /* queue is maxed to Bflag number of lines */
+ enqueue(&ln);
+ linesqueued++;
+ ctxover = false;
+ } else {
+ /*
+ * Indicate to procline() that we have ctx
+ * overlap and make sure queue is empty.
+ */
+ if (!ctxover)
+ clearqueue();
+ ctxover = true;
+ }
}
c += t;
if (mflag && mcount <= 0)
@@ -396,17 +415,19 @@
/* Dealing with the context */
if ((tail || c) && !cflag && !qflag && !lflag && !Lflag) {
if (c) {
- if (!first && !prev && !tail && Aflag)
+ if (!first && !prev && !tail && (Bflag || Aflag) &&
+ !ctxover)
printf("--\n");
tail = Aflag;
if (Bflag > 0) {
- if (!first && !prev)
- printf("--\n");
printqueue();
+ ctxover = false;
}
linesqueued = 0;
printline(l, ':', matches, m);
} else {
+ /* Print -A lines following matches */
+ lasta = l->line_no;
printline(l, '-', matches, m);
tail--;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Sep 19, 8:18 PM (13 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39247421
Default Alt Text
D10105.diff (1 KB)
Attached To
Mode
D10105: bsdgrep(1): Remove output separators between overlapping segments in context (-A/B/C) output
Attached
Detach File
Event Timeline
Log In to Comment