On Mon, Dec 02 2019, Jeremie Courreges-Anglas <[email protected]> wrote:
[...]
> I have had a similar diff for some time but didn't push for it because
> nitpicking: GNU grep doesn't prepend "./" to file names in this case.
> I have a diff to do this but let's keep the nitpicking for later.
Current:
--8<--
ritchie /usr/src/usr.bin/grep$ grep -R grep_tree
./grep.c: c = grep_tree(argv);
./grep.h:int grep_tree(char **argv);
./util.c:grep_tree(char **argv)
Binary file ./grep matches
./grep.c.orig: c = grep_tree(argv);
./util.c.orig:grep_tree(char **argv)
-->8--
With the diff below (matches GNU grep)
--8<--
ritchie /usr/src/usr.bin/grep$ obj/grep -R grep_tree
grep.c: c = grep_tree(argv);
grep.h:int grep_tree(char **argv);
util.c:grep_tree(char **argv)
Binary file grep matches
grep.c.orig: c = grep_tree(argv);
util.c.orig:grep_tree(char **argv)
-->88
Explicit "."
--8<--
ritchie /usr/src/usr.bin/grep$ obj/grep -R grep_tree .
./grep.c: c = grep_tree(argv);
./grep.h:int grep_tree(char **argv);
./util.c:grep_tree(char **argv)
Binary file ./grep matches
./grep.c.orig: c = grep_tree(argv);
./util.c.orig:grep_tree(char **argv)
-->8--
This diff moves the fake argv logic moves into grep_tree() where we can
opt for pretty-printing. ok?
Index: grep.c
===================================================================
RCS file: /cvs/src/usr.bin/grep/grep.c,v
retrieving revision 1.63
diff -u -p -r1.63 grep.c
--- grep.c 2 Dec 2019 21:50:11 -0000 1.63
+++ grep.c 2 Dec 2019 21:53:14 -0000
@@ -473,12 +473,6 @@ main(int argc, char *argv[])
++argv;
}
- if (Rflag && argc == 0) {
- /* default to . if no path given */
- static char *dot_argv[] = { ".", NULL };
- argv = dot_argv;
- argc = 1;
- }
if (Eflag)
cflags |= REG_EXTENDED;
if (Fflag)
@@ -516,7 +510,7 @@ main(int argc, char *argv[])
if ((argc == 0 || argc == 1) && !Rflag && !Hflag)
hflag = 1;
- if (argc == 0)
+ if (argc == 0 && !Rflag)
exit(!procfile(NULL));
if (Rflag)
Index: util.c
===================================================================
RCS file: /cvs/src/usr.bin/grep/util.c,v
retrieving revision 1.61
diff -u -p -r1.61 util.c
--- util.c 7 Oct 2019 17:47:32 -0000 1.61
+++ util.c 2 Dec 2019 21:53:15 -0000
@@ -61,6 +61,12 @@ grep_tree(char **argv)
FTS *fts;
FTSENT *p;
int c, fts_flags;
+ char *dot_argv[] = { ".", NULL };
+ char *path;
+
+ /* default to . if no path given */
+ if (argv[0] == NULL)
+ argv = dot_argv;
c = 0;
@@ -81,7 +87,11 @@ grep_tree(char **argv)
case FTS_DP:
break;
default:
- c += procfile(p->fts_path);
+ path = p->fts_path;
+ /* skip "./" if implied */
+ if (argv == dot_argv && p->fts_pathlen >= 2)
+ path += 2;
+ c += procfile(path);
break;
}
}
--
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE