/[pcre]/code/tags/pcre-7.1/pcregrep.c
ViewVC logotype

Diff of /code/tags/pcre-7.1/pcregrep.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 88 by nigel, Sat Feb 24 21:41:21 2007 UTC revision 89 by nigel, Sat Feb 24 21:41:27 2007 UTC
# Line 94  regular code. */ Line 94  regular code. */
94    
95  #ifdef JFRIEDL_DEBUG  #ifdef JFRIEDL_DEBUG
96  static int S_arg = -1;  static int S_arg = -1;
97    static unsigned int jfriedl_XR = 0; /* repeat regex attempt this many times */
98    static unsigned int jfriedl_XT = 0; /* replicate text this many times */
99    static const char *jfriedl_prefix = "";
100    static const char *jfriedl_postfix = "";
101  #endif  #endif
102    
103  static char *colour_string = (char *)"1;31";  static char *colour_string = (char *)"1;31";
# Line 565  while (ptr < endptr) Line 569  while (ptr < endptr)
569    while (t < endptr && *t++ != '\n') linelength++;    while (t < endptr && *t++ != '\n') linelength++;
570    length = multiline? endptr - ptr : linelength;    length = multiline? endptr - ptr : linelength;
571    
572    
573      /* Extra processing for Jeffrey Friedl's debugging. */
574    
575    #ifdef JFRIEDL_DEBUG
576      if (jfriedl_XT || jfriedl_XR)
577      {
578          #include <sys/time.h>
579          #include <time.h>
580          struct timeval start_time, end_time;
581          struct timezone dummy;
582    
583          if (jfriedl_XT)
584          {
585              unsigned long newlen = length * jfriedl_XT + strlen(jfriedl_prefix) + strlen(jfriedl_postfix);
586              const char *orig = ptr;
587              ptr = malloc(newlen + 1);
588              if (!ptr) {
589                      printf("out of memory");
590                      exit(2);
591              }
592              endptr = ptr;
593              strcpy(endptr, jfriedl_prefix); endptr += strlen(jfriedl_prefix);
594              for (i = 0; i < jfriedl_XT; i++) {
595                      strncpy(endptr, orig,  length);
596                      endptr += length;
597              }
598              strcpy(endptr, jfriedl_postfix); endptr += strlen(jfriedl_postfix);
599              length = newlen;
600          }
601    
602          if (gettimeofday(&start_time, &dummy) != 0)
603                  perror("bad gettimeofday");
604    
605    
606          for (i = 0; i < jfriedl_XR; i++)
607              match = (pcre_exec(pattern_list[0], hints_list[0], ptr, length, 0, 0, offsets, 99) >= 0);
608    
609          if (gettimeofday(&end_time, &dummy) != 0)
610                  perror("bad gettimeofday");
611    
612          double delta = ((end_time.tv_sec + (end_time.tv_usec / 1000000.0))
613                          -
614                          (start_time.tv_sec + (start_time.tv_usec / 1000000.0)));
615    
616          printf("%s TIMER[%.4f]\n", match ? "MATCH" : "FAIL", delta);
617          return 0;
618      }
619    #endif
620    
621    
622    /* Run through all the patterns until one matches. Note that we don't include    /* Run through all the patterns until one matches. Note that we don't include
623    the final newline in the subject string. */    the final newline in the subject string. */
624    
# Line 1294  for (i = 1; i < argc; i++) Line 1348  for (i = 1; i < argc; i++)
1348        }        }
1349      }      }
1350    
1351    
1352      /* Jeffrey Friedl's debugging harness uses these additional options which
1353      are not in the right form for putting in the option table because they use
1354      only one hyphen, yet are more than one character long. By putting them
1355      separately here, they will not get displayed as part of the help() output,
1356      but I don't think Jeffrey will care about that. */
1357    
1358    #ifdef JFRIEDL_DEBUG
1359      else if (strcmp(argv[i], "-pre") == 0) {
1360              jfriedl_prefix = argv[++i];
1361              continue;
1362      } else if (strcmp(argv[i], "-post") == 0) {
1363              jfriedl_postfix = argv[++i];
1364              continue;
1365      } else if (strcmp(argv[i], "-XT") == 0) {
1366              sscanf(argv[++i], "%d", &jfriedl_XT);
1367              continue;
1368      } else if (strcmp(argv[i], "-XR") == 0) {
1369              sscanf(argv[++i], "%d", &jfriedl_XR);
1370              continue;
1371      }
1372    #endif
1373    
1374    
1375    /* One-char options; many that have no data may be in a single argument; we    /* One-char options; many that have no data may be in a single argument; we
1376    continue till we hit the last one or one that needs data. */    continue till we hit the last one or one that needs data. */
1377    
# Line 1333  for (i = 1; i < argc; i++) Line 1411  for (i = 1; i < argc; i++)
1411    /* If the option type is OP_OP_STRING or OP_OP_NUMBER, it's an option that    /* If the option type is OP_OP_STRING or OP_OP_NUMBER, it's an option that
1412    either has a value or defaults to something. It cannot have data in a    either has a value or defaults to something. It cannot have data in a
1413    separate item. At the moment, the only such options are "colo(u)r" and    separate item. At the moment, the only such options are "colo(u)r" and
1414    Jeffrey Friedl's special debugging option. */    Jeffrey Friedl's special -S debugging option. */
1415    
1416    if (*option_data == 0 &&    if (*option_data == 0 &&
1417        (op->type == OP_OP_STRING || op->type == OP_OP_NUMBER))        (op->type == OP_OP_STRING || op->type == OP_OP_NUMBER))
# Line 1490  if (DEE_option != NULL) Line 1568  if (DEE_option != NULL)
1568      }      }
1569    }    }
1570    
1571  /* Check the value for Jeff Friedl's debugging option. */  /* Check the values for Jeffrey Friedl's debugging options. */
1572    
1573  #ifdef JFRIEDL_DEBUG  #ifdef JFRIEDL_DEBUG
1574  if (S_arg > 9)  if (S_arg > 9)
# Line 1498  if (S_arg > 9) Line 1576  if (S_arg > 9)
1576    fprintf(stderr, "pcregrep: bad value for -S option\n");    fprintf(stderr, "pcregrep: bad value for -S option\n");
1577    return 2;    return 2;
1578    }    }
1579    if (jfriedl_XT != 0 || jfriedl_XR != 0)
1580      {
1581      if (jfriedl_XT == 0) jfriedl_XT = 1;
1582      if (jfriedl_XR == 0) jfriedl_XR = 1;
1583      }
1584  #endif  #endif
1585    
1586  /* Get memory to store the pattern and hints lists. */  /* Get memory to store the pattern and hints lists. */

Legend:
Removed from v.88  
changed lines
  Added in v.89

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12