aboutsummaryrefslogtreecommitdiff
path: root/findutils/grep.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>1999-11-09 01:47:36 +0000
committerEric Andersen <andersen@codepoet.org>1999-11-09 01:47:36 +0000
commit50d6360771be509737bb55b2cc5bc5e25f2a4fea (patch)
tree81d4cfe9ec9b5281924f678c28f61542616a3db7 /findutils/grep.c
parentfbb39c83b69d6c4de943c0b7374000339635d13d (diff)
downloadbusybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.tar.gz
busybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.tar.bz2
busybox-w32-50d6360771be509737bb55b2cc5bc5e25f2a4fea.zip
Stuff
Diffstat (limited to 'findutils/grep.c')
-rw-r--r--findutils/grep.c79
1 files changed, 38 insertions, 41 deletions
diff --git a/findutils/grep.c b/findutils/grep.c
index 50a296178..8dcff0586 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -40,45 +40,46 @@ static const char grep_usage[] =
40#if defined BB_REGEXP 40#if defined BB_REGEXP
41"This version of grep matches full regexps.\n"; 41"This version of grep matches full regexps.\n";
42#else 42#else
43"This version of grep matches strings (not full regexps).\n"; 43"This version of grep matches strings (not regexps).\n";
44#endif 44#endif
45 45
46int tellName=TRUE;
47int ignoreCase=FALSE;
48int tellLine=FALSE;
49 46
50static do_grep(char* needle, char* haystack ) 47static void do_grep(FILE *fp, char* needle, char *fileName, int tellName, int ignoreCase, int tellLine)
51{ 48{
52 line = 0; 49 char *cp;
50 long line = 0;
51 char haystack[BUF_SIZE];
53 52
54 while (fgets (haystack, sizeof (haystack), fp)) { 53 while (fgets (haystack, sizeof (haystack), fp)) {
55 line++; 54 line++;
56 cp = &haystack[strlen (haystack) - 1]; 55 cp = &haystack[strlen (haystack) - 1];
57 56
58 if (*cp != '\n') 57 if (*cp != '\n')
59 fprintf (stderr, "%s: Line too long\n", name); 58 fprintf (stderr, "%s: Line too long\n", fileName);
60 59
61 if (find_match(haystack, needle, ignoreCase) == TRUE) { 60 if (find_match(haystack, needle, ignoreCase) == TRUE) {
62 if (tellName==TRUE) 61 if (tellName==TRUE)
63 printf ("%s: ", name); 62 printf ("%s:", fileName);
64 63
65 if (tellLine==TRUE) 64 if (tellLine==TRUE)
66 printf ("%ld: ", line); 65 printf ("%ld:", line);
67 66
68 fputs (haystack, stdout); 67 fputs (haystack, stdout);
69 }
70 } 68 }
69 }
71} 70}
72 71
73 72
74extern int grep_main (int argc, char **argv) 73extern int grep_main (int argc, char **argv)
75{ 74{
76 FILE *fp; 75 FILE *fp;
77 char *needle;
78 char *name;
79 char *cp; 76 char *cp;
80 long line; 77 char *needle;
81 char haystack[BUF_SIZE]; 78 char *fileName;
79 int tellName=FALSE;
80 int ignoreCase=FALSE;
81 int tellLine=FALSE;
82
82 83
83 ignoreCase = FALSE; 84 ignoreCase = FALSE;
84 tellLine = FALSE; 85 tellLine = FALSE;
@@ -100,7 +101,7 @@ extern int grep_main (int argc, char **argv)
100 break; 101 break;
101 102
102 case 'h': 103 case 'h':
103 tellName = FALSE; 104 tellName = TRUE;
104 break; 105 break;
105 106
106 case 'n': 107 case 'n':
@@ -115,28 +116,24 @@ extern int grep_main (int argc, char **argv)
115 needle = *argv++; 116 needle = *argv++;
116 argc--; 117 argc--;
117 118
119 if (argc==0) {
120 do_grep( stdin, needle, "stdin", FALSE, ignoreCase, tellLine);
121 } else {
122 while (argc-- > 0) {
123 fileName = *argv++;
118 124
119 while (argc-- > 0) { 125 fp = fopen (fileName, "r");
120 126 if (fp == NULL) {
121 if (argc==0) { 127 perror (fileName);
122 file = stdin; 128 continue;
123 } 129 }
124 else
125 file = fopen(*argv, "r");
126
127 130
128 name = *argv++; 131 do_grep( fp, needle, fileName, tellName, ignoreCase, tellLine);
129 132
130 fp = fopen (name, "r"); 133 if (ferror (fp))
131 if (fp == NULL) { 134 perror (fileName);
132 perror (name); 135 fclose (fp);
133 continue;
134 } 136 }
135
136 if (ferror (fp))
137 perror (name);
138
139 fclose (fp);
140 } 137 }
141 exit( TRUE); 138 exit( TRUE);
142} 139}