[BACK]Return to grep.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / grep

Diff for /src/usr.bin/grep/grep.c between version 1.27 and 1.28

version 1.27, 2004/04/02 18:39:36 version 1.28, 2004/05/07 14:51:42
Line 176 
Line 176 
         if (pat[len - 1] == '\n')          if (pat[len - 1] == '\n')
                 --len;                  --len;
         /* pat may not be NUL-terminated */          /* pat may not be NUL-terminated */
         if (wflag) {          if (wflag && !Fflag) {
                 int bol = 0, eol = 0;                  int bol = 0, eol = 0;
                 if (pat[0] == '^')                  if (pat[0] == '^')
                         bol = 1;                          bol = 1;
Line 226 
Line 226 
         fclose(f);          fclose(f);
 }  }
   
 static void  
 free_patterns(void)  
 {  
         int i;  
   
         for (i = 0; i < patterns; i++) {  
                 if (fg_pattern[i].pattern)  
                         free(fg_pattern[i].pattern);  
                 else  
                         regfree(&r_pattern[i]);  
                 free(pattern[i]);  
         }  
   
         free(fg_pattern);  
         free(r_pattern);  
         free(pattern);  
 }  
   
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
Line 449 
Line 431 
   
         if (Eflag)          if (Eflag)
                 cflags |= REG_EXTENDED;                  cflags |= REG_EXTENDED;
         else if (Fflag)  
                 cflags |= REG_NOSPEC;  
         fg_pattern = grep_malloc(patterns * sizeof(*fg_pattern));          fg_pattern = grep_malloc(patterns * sizeof(*fg_pattern));
         r_pattern = grep_malloc(patterns * sizeof(*r_pattern));          r_pattern = grep_malloc(patterns * sizeof(*r_pattern));
         for (i = 0; i < patterns; ++i) {          for (i = 0; i < patterns; ++i) {
                 /* Check if cheating is allowed */                  /* Check if cheating is allowed (always is for fgrep). */
                 if (fastcomp(&fg_pattern[i], pattern[i])) {                  if (Fflag) {
                         /* Fall back to full regex library */                          fgrepcomp(&fg_pattern[i], pattern[i]);
                         if ((c = regcomp(&r_pattern[i], pattern[i], cflags))) {                  } else {
                                 regerror(c, &r_pattern[i], re_error,                          if (fastcomp(&fg_pattern[i], pattern[i])) {
                                     RE_ERROR_BUF);                                  /* Fall back to full regex library */
                                 errx(2, "%s", re_error);                                  c = regcomp(&r_pattern[i], pattern[i], cflags);
                                   if (c != 0) {
                                           regerror(c, &r_pattern[i], re_error,
                                               RE_ERROR_BUF);
                                           errx(2, "%s", re_error);
                                   }
                         }                          }
                 }                  }
         }          }
Line 479 
Line 464 
         else          else
                 for (c = 0; argc--; ++argv)                  for (c = 0; argc--; ++argv)
                         c += procfile(*argv);                          c += procfile(*argv);
   
         free_patterns();  
   
         exit(!c);          exit(!c);
 }  }

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.28