/[pcre]/code/branches/pcre16/pcretest.c
ViewVC logotype

Diff of /code/branches/pcre16/pcretest.c

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

revision 146 by ph10, Thu Apr 5 09:17:28 2007 UTC revision 200 by ph10, Wed Aug 1 09:10:40 2007 UTC
# Line 36  POSSIBILITY OF SUCH DAMAGE. Line 36  POSSIBILITY OF SUCH DAMAGE.
36  */  */
37    
38    
39    #ifdef HAVE_CONFIG_H
40    #include <config.h>
41    #endif
42    
43  #include <ctype.h>  #include <ctype.h>
44  #include <stdio.h>  #include <stdio.h>
45  #include <string.h>  #include <string.h>
# Line 663  return count; Line 667  return count;
667  *************************************************/  *************************************************/
668    
669  /* This is used both at compile and run-time to check for <xxx> escapes, where  /* This is used both at compile and run-time to check for <xxx> escapes, where
670  xxx is LF, CR, CRLF, or ANY. Print a message and return 0 if there is no match.  xxx is LF, CR, CRLF, ANYCRLF, or ANY. Print a message and return 0 if there is
671    no match.
672    
673  Arguments:  Arguments:
674    p           points after the leading '<'    p           points after the leading '<'
# Line 678  check_newline(uschar *p, FILE *f) Line 683  check_newline(uschar *p, FILE *f)
683  if (strncmp((char *)p, "cr>", 3) == 0) return PCRE_NEWLINE_CR;  if (strncmp((char *)p, "cr>", 3) == 0) return PCRE_NEWLINE_CR;
684  if (strncmp((char *)p, "lf>", 3) == 0) return PCRE_NEWLINE_LF;  if (strncmp((char *)p, "lf>", 3) == 0) return PCRE_NEWLINE_LF;
685  if (strncmp((char *)p, "crlf>", 5) == 0) return PCRE_NEWLINE_CRLF;  if (strncmp((char *)p, "crlf>", 5) == 0) return PCRE_NEWLINE_CRLF;
686    if (strncmp((char *)p, "anycrlf>", 8) == 0) return PCRE_NEWLINE_ANYCRLF;
687  if (strncmp((char *)p, "any>", 4) == 0) return PCRE_NEWLINE_ANY;  if (strncmp((char *)p, "any>", 4) == 0) return PCRE_NEWLINE_ANY;
688  fprintf(f, "Unknown newline type at: <%s\n", p);  fprintf(f, "Unknown newline type at: <%s\n", p);
689  return 0;  return 0;
# Line 850  while (argc > 1 && argv[op][0] == '-') Line 856  while (argc > 1 && argv[op][0] == '-')
856      (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);      (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);
857      printf("  Newline sequence is %s\n", (rc == '\r')? "CR" :      printf("  Newline sequence is %s\n", (rc == '\r')? "CR" :
858        (rc == '\n')? "LF" : (rc == ('\r'<<8 | '\n'))? "CRLF" :        (rc == '\n')? "LF" : (rc == ('\r'<<8 | '\n'))? "CRLF" :
859          (rc == -2)? "ANYCRLF" :
860        (rc == -1)? "ANY" : "???");        (rc == -1)? "ANY" : "???");
861      (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);      (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);
862      printf("  Internal link size = %d\n", rc);      printf("  Internal link size = %d\n", rc);
# Line 887  offsets = (int *)malloc(size_offsets_max Line 894  offsets = (int *)malloc(size_offsets_max
894  if (offsets == NULL)  if (offsets == NULL)
895    {    {
896    printf("** Failed to get %d bytes of memory for offsets vector\n",    printf("** Failed to get %d bytes of memory for offsets vector\n",
897      size_offsets_max * sizeof(int));      (int)(size_offsets_max * sizeof(int)));
898    yield = 1;    yield = 1;
899    goto EXIT;    goto EXIT;
900    }    }
# Line 1349  while (!done) Line 1356  while (!done)
1356  #if !defined NOINFOCHECK  #if !defined NOINFOCHECK
1357        int old_first_char, old_options, old_count;        int old_first_char, old_options, old_count;
1358  #endif  #endif
1359        int count, backrefmax, first_char, need_char;        int count, backrefmax, first_char, need_char, okpartial, jchanged;
1360        int nameentrysize, namecount;        int nameentrysize, namecount;
1361        const uschar *nametable;        const uschar *nametable;
1362    
# Line 1362  while (!done) Line 1369  while (!done)
1369        new_info(re, NULL, PCRE_INFO_NAMEENTRYSIZE, &nameentrysize);        new_info(re, NULL, PCRE_INFO_NAMEENTRYSIZE, &nameentrysize);
1370        new_info(re, NULL, PCRE_INFO_NAMECOUNT, &namecount);        new_info(re, NULL, PCRE_INFO_NAMECOUNT, &namecount);
1371        new_info(re, NULL, PCRE_INFO_NAMETABLE, (void *)&nametable);        new_info(re, NULL, PCRE_INFO_NAMETABLE, (void *)&nametable);
1372          new_info(re, NULL, PCRE_INFO_OKPARTIAL, &okpartial);
1373          new_info(re, NULL, PCRE_INFO_JCHANGED, &jchanged);
1374    
1375  #if !defined NOINFOCHECK  #if !defined NOINFOCHECK
1376        old_count = pcre_info(re, &old_options, &old_first_char);        old_count = pcre_info(re, &old_options, &old_first_char);
# Line 1403  while (!done) Line 1412  while (!done)
1412            }            }
1413          }          }
1414    
1415        /* The NOPARTIAL bit is a private bit in the options, so we have        if (!okpartial) fprintf(outfile, "Partial matching not supported\n");
       to fish it out via out back door */  
1416    
1417        all_options = ((real_pcre *)re)->options;        all_options = ((real_pcre *)re)->options;
1418        if (do_flip)        if (do_flip) all_options = byteflip(all_options, sizeof(all_options));
         {  
         all_options = byteflip(all_options, sizeof(all_options));  
          }  
   
       if ((all_options & PCRE_NOPARTIAL) != 0)  
         fprintf(outfile, "Partial matching not supported\n");  
1419    
1420        if (get_options == 0) fprintf(outfile, "No options\n");        if (get_options == 0) fprintf(outfile, "No options\n");
1421          else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s%s%s%s\n",          else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
# Line 1431  while (!done) Line 1433  while (!done)
1433            ((get_options & PCRE_NO_UTF8_CHECK) != 0)? " no_utf8_check" : "",            ((get_options & PCRE_NO_UTF8_CHECK) != 0)? " no_utf8_check" : "",
1434            ((get_options & PCRE_DUPNAMES) != 0)? " dupnames" : "");            ((get_options & PCRE_DUPNAMES) != 0)? " dupnames" : "");
1435    
1436          if (jchanged) fprintf(outfile, "Duplicate name status changes\n");
1437    
1438        switch (get_options & PCRE_NEWLINE_BITS)        switch (get_options & PCRE_NEWLINE_BITS)
1439          {          {
1440          case PCRE_NEWLINE_CR:          case PCRE_NEWLINE_CR:
# Line 1445  while (!done) Line 1449  while (!done)
1449          fprintf(outfile, "Forced newline sequence: CRLF\n");          fprintf(outfile, "Forced newline sequence: CRLF\n");
1450          break;          break;
1451    
1452            case PCRE_NEWLINE_ANYCRLF:
1453            fprintf(outfile, "Forced newline sequence: ANYCRLF\n");
1454            break;
1455    
1456          case PCRE_NEWLINE_ANY:          case PCRE_NEWLINE_ANY:
1457          fprintf(outfile, "Forced newline sequence: ANY\n");          fprintf(outfile, "Forced newline sequence: ANY\n");
1458          break;          break;
# Line 1594  while (!done) Line 1602  while (!done)
1602    for (;;)    for (;;)
1603      {      {
1604      uschar *q;      uschar *q;
1605      uschar *bptr = dbuffer;      uschar *bptr;
1606      int *use_offsets = offsets;      int *use_offsets = offsets;
1607      int use_size_offsets = size_offsets;      int use_size_offsets = size_offsets;
1608      int callout_data = 0;      int callout_data = 0;
# Line 1650  while (!done) Line 1658  while (!done)
1658      p = buffer;      p = buffer;
1659      while (isspace(*p)) p++;      while (isspace(*p)) p++;
1660    
1661      q = dbuffer;      bptr = q = dbuffer;
1662      while ((c = *p++) != 0)      while ((c = *p++) != 0)
1663        {        {
1664        int i = 0;        int i = 0;
# Line 1845  while (!done) Line 1853  while (!done)
1853            if (offsets == NULL)            if (offsets == NULL)
1854              {              {
1855              printf("** Failed to get %d bytes of memory for offsets vector\n",              printf("** Failed to get %d bytes of memory for offsets vector\n",
1856                size_offsets_max * sizeof(int));                (int)(size_offsets_max * sizeof(int)));
1857              yield = 1;              yield = 1;
1858              goto EXIT;              goto EXIT;
1859              }              }
# Line 2218  while (!done) Line 2226  while (!done)
2226        to advance the start offset, and continue. We won't be at the end of the        to advance the start offset, and continue. We won't be at the end of the
2227        string - that was checked before setting g_notempty.        string - that was checked before setting g_notempty.
2228    
2229        Complication arises in the case when the newline option is "any".        Complication arises in the case when the newline option is "any" or
2230        If the previous match was at the end of a line terminated by CRLF, an        "anycrlf". If the previous match was at the end of a line terminated by
2231        advance of one character just passes the \r, whereas we should prefer the        CRLF, an advance of one character just passes the \r, whereas we should
2232        longer newline sequence, as does the code in pcre_exec(). Fudge the        prefer the longer newline sequence, as does the code in pcre_exec().
2233        offset value to achieve this.        Fudge the offset value to achieve this.
2234    
2235        Otherwise, in the case of UTF-8 matching, the advance must be one        Otherwise, in the case of UTF-8 matching, the advance must be one
2236        character, not one byte. */        character, not one byte. */
# Line 2241  while (!done) Line 2249  while (!done)
2249              obits = (d == '\r')? PCRE_NEWLINE_CR :              obits = (d == '\r')? PCRE_NEWLINE_CR :
2250                      (d == '\n')? PCRE_NEWLINE_LF :                      (d == '\n')? PCRE_NEWLINE_LF :
2251                      (d == ('\r'<<8 | '\n'))? PCRE_NEWLINE_CRLF :                      (d == ('\r'<<8 | '\n'))? PCRE_NEWLINE_CRLF :
2252                        (d == -2)? PCRE_NEWLINE_ANYCRLF :
2253                      (d == -1)? PCRE_NEWLINE_ANY : 0;                      (d == -1)? PCRE_NEWLINE_ANY : 0;
2254              }              }
2255            if ((obits & PCRE_NEWLINE_BITS) == PCRE_NEWLINE_ANY &&            if (((obits & PCRE_NEWLINE_BITS) == PCRE_NEWLINE_ANY ||
2256                   (obits & PCRE_NEWLINE_BITS) == PCRE_NEWLINE_ANYCRLF)
2257                  &&
2258                start_offset < len - 1 &&                start_offset < len - 1 &&
2259                bptr[start_offset] == '\r' &&                bptr[start_offset] == '\r' &&
2260                bptr[start_offset+1] == '\n')                bptr[start_offset+1] == '\n')

Legend:
Removed from v.146  
changed lines
  Added in v.200

  ViewVC Help
Powered by ViewVC 1.1.5