From a05c0716c256a95861c01d06b5319f3149fca33a Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 7 Jun 2008 05:19:31 +0000 Subject: grep: make "-f -" work (+ testsuite) diff: small code shrink function old new delta grep_main 722 714 -8 diffreg 1825 1793 -32 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-40) Total: -40 bytes --- editors/diff.c | 5 +++-- findutils/grep.c | 12 ++++++------ testsuite/grep.tests | 4 ++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/editors/diff.c b/editors/diff.c index eac4b08c5..4e51f6f76 100644 --- a/editors/diff.c +++ b/editors/diff.c @@ -1021,11 +1021,12 @@ static unsigned diffreg(char *file1, char *file2, int flags) rval = D_SAME; if (flags & D_EMPTY1) - f1 = xfopen(bb_dev_null, "r"); + /* can't be stdin, but xfopen_stdin() is smaller code */ + f1 = xfopen_stdin(bb_dev_null); else f1 = xfopen_stdin(file1); if (flags & D_EMPTY2) - f2 = xfopen(bb_dev_null, "r"); + f2 = xfopen_stdin(bb_dev_null); else f2 = xfopen_stdin(file2); diff --git a/findutils/grep.c b/findutils/grep.c index 6af1b46e1..fc7893860 100644 --- a/findutils/grep.c +++ b/findutils/grep.c @@ -126,7 +126,7 @@ struct globals { typedef struct grep_list_data_t { char *pattern; regex_t preg; -#define PATTERN_MEM_A 1 +#define ALLOCATED 1 #define COMPILED 2 int flg_mem_alocated_compiled; } grep_list_data_t; @@ -363,10 +363,10 @@ static void load_regexes_from_file(llist_t *fopt) fopt = cur->link; free(cur); - f = xfopen(ffile, "r"); + f = xfopen_stdin(ffile); while ((line = xmalloc_fgetline(f)) != NULL) { llist_add_to(&pattern_head, - new_grep_list_data(line, PATTERN_MEM_A)); + new_grep_list_data(line, ALLOCATED)); } } } @@ -486,7 +486,7 @@ int grep_main(int argc, char **argv) argc--; } - /* argv[(optind)..(argc-1)] should be names of file to grep through. If + /* argv[0..(argc-1)] should be names of file to grep through. If * there is more than one file to grep, we will print the filenames. */ if (argc > 1) print_filename = 1; @@ -535,9 +535,9 @@ int grep_main(int argc, char **argv) grep_list_data_t *gl = (grep_list_data_t *)pattern_head_ptr->data; pattern_head = pattern_head->link; - if ((gl->flg_mem_alocated_compiled & PATTERN_MEM_A)) + if (gl->flg_mem_alocated_compiled & ALLOCATED) free(gl->pattern); - if ((gl->flg_mem_alocated_compiled & COMPILED)) + if (gl->flg_mem_alocated_compiled & COMPILED) regfree(&(gl->preg)); free(gl); free(pattern_head_ptr); diff --git a/testsuite/grep.tests b/testsuite/grep.tests index 34c0fe4f7..b2de2af54 100755 --- a/testsuite/grep.tests +++ b/testsuite/grep.tests @@ -78,6 +78,10 @@ testing "grep handles multiple regexps" "grep -e one -e two input ; echo \$?" \ testing "grep -F handles multiple expessions" "grep -F -e one -e two input ; echo \$?" \ "one\ntwo\n0\n" "one\ntwo\n" "" +# -f file/- +testing "grep can read regexps from stdin" "grep -f - input ; echo \$?" \ + "two\nthree\n0\n" "tw\ntwo\nthree\n" "tw.\nthr\n" + optional FEATURE_GREP_EGREP_ALIAS testing "grep -E supports extended regexps" "grep -E fo+" "foo\n" "" \ "b\ar\nfoo\nbaz" -- cgit v1.2.3