From 0dbd779b58602d7eaded0bd02399daf62adc0fd4 Mon Sep 17 00:00:00 2001
From: Strake <devnull@localhost>
Date: Sun, 8 Jun 2003 10:15:17 -0500
Subject: grep: add -b flag

---
 toys/pending/grep.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/toys/pending/grep.c b/toys/pending/grep.c
index fad894f0..6f69bdee 100644
--- a/toys/pending/grep.c
+++ b/toys/pending/grep.c
@@ -5,13 +5,13 @@
  * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/
  * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/cmdbehav.html
 
-USE_GREP(NEWTOY(grep, "EFHahinosvwclqe*f*m#", TOYFLAG_BIN))
+USE_GREP(NEWTOY(grep, "EFHabhinosvwclqe*f*m#", TOYFLAG_BIN))
 
 config GREP
   bool "grep"
   default n
   help
-    usage: grep [-clq] [-EFHhinosvw] (-e RE | -f REfile | RE) [file...]
+    usage: grep [-clq] [-EFHbhinosvw] (-e RE | -f REfile | RE) [file...]
 
     modes:
       default: print lines from each file what match regular expression RE.
@@ -23,6 +23,7 @@ config GREP
       -E:   extended RE syntax
       -F:   fixed RE syntax, i.e. all characters literal
       -H:   print file name
+      -b:   print byte offset of match
       -h:   not print file name
       -i:   case insensitive
       -n:   print line numbers
@@ -73,6 +74,8 @@ static void do_grep (int fd, char *name) {
       default:
         if (!(toys.optflags & FLAG_h)) printf ("%s:", name);
         if ( (toys.optflags & FLAG_n)) printf ("%d:", n);
+        if ( (toys.optflags & FLAG_b)) printf ("%ld:", lseek (0, 0, SEEK_CUR) - strlen (y) +
+                                                       (toys.optflags & FLAG_o ? matches[2].rm_so : 0));
         if (!(toys.optflags & FLAG_o)) fputs (x, stdout);
         else {
           y += matches[2].rm_so;
-- 
cgit v1.2.3