/[pcre]/code/trunk/pcretest.c
ViewVC logotype

Diff of /code/trunk/pcretest.c

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

revision 145 by ph10, Wed Apr 4 14:06:52 2007 UTC revision 149 by ph10, Mon Apr 16 15:28:08 2007 UTC
# Line 663  return count; Line 663  return count;
663  *************************************************/  *************************************************/
664    
665  /* 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
666  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
667    no match.
668    
669  Arguments:  Arguments:
670    p           points after the leading '<'    p           points after the leading '<'
# Line 678  check_newline(uschar *p, FILE *f) Line 679  check_newline(uschar *p, FILE *f)
679  if (strncmp((char *)p, "cr>", 3) == 0) return PCRE_NEWLINE_CR;  if (strncmp((char *)p, "cr>", 3) == 0) return PCRE_NEWLINE_CR;
680  if (strncmp((char *)p, "lf>", 3) == 0) return PCRE_NEWLINE_LF;  if (strncmp((char *)p, "lf>", 3) == 0) return PCRE_NEWLINE_LF;
681  if (strncmp((char *)p, "crlf>", 5) == 0) return PCRE_NEWLINE_CRLF;  if (strncmp((char *)p, "crlf>", 5) == 0) return PCRE_NEWLINE_CRLF;
682    if (strncmp((char *)p, "anycrlf>", 8) == 0) return PCRE_NEWLINE_ANYCRLF;
683  if (strncmp((char *)p, "any>", 4) == 0) return PCRE_NEWLINE_ANY;  if (strncmp((char *)p, "any>", 4) == 0) return PCRE_NEWLINE_ANY;
684  fprintf(f, "Unknown newline type at: <%s\n", p);  fprintf(f, "Unknown newline type at: <%s\n", p);
685  return 0;  return 0;
# Line 850  while (argc > 1 && argv[op][0] == '-') Line 852  while (argc > 1 && argv[op][0] == '-')
852      (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);      (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);
853      printf("  Newline sequence is %s\n", (rc == '\r')? "CR" :      printf("  Newline sequence is %s\n", (rc == '\r')? "CR" :
854        (rc == '\n')? "LF" : (rc == ('\r'<<8 | '\n'))? "CRLF" :        (rc == '\n')? "LF" : (rc == ('\r'<<8 | '\n'))? "CRLF" :
855          (rc == -2)? "ANYCRLF" :
856        (rc == -1)? "ANY" : "???");        (rc == -1)? "ANY" : "???");
857      (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);      (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);
858      printf("  Internal link size = %d\n", rc);      printf("  Internal link size = %d\n", rc);
# Line 1445  while (!done) Line 1448  while (!done)
1448          fprintf(outfile, "Forced newline sequence: CRLF\n");          fprintf(outfile, "Forced newline sequence: CRLF\n");
1449          break;          break;
1450    
1451            case PCRE_NEWLINE_ANYCRLF:
1452            fprintf(outfile, "Forced newline sequence: ANYCRLF\n");
1453            break;
1454    
1455          case PCRE_NEWLINE_ANY:          case PCRE_NEWLINE_ANY:
1456          fprintf(outfile, "Forced newline sequence: ANY\n");          fprintf(outfile, "Forced newline sequence: ANY\n");
1457          break;          break;
# Line 1594  while (!done) Line 1601  while (!done)
1601    for (;;)    for (;;)
1602      {      {
1603      uschar *q;      uschar *q;
1604      uschar *bptr = dbuffer;      uschar *bptr;
1605      int *use_offsets = offsets;      int *use_offsets = offsets;
1606      int use_size_offsets = size_offsets;      int use_size_offsets = size_offsets;
1607      int callout_data = 0;      int callout_data = 0;
# Line 1650  while (!done) Line 1657  while (!done)
1657      p = buffer;      p = buffer;
1658      while (isspace(*p)) p++;      while (isspace(*p)) p++;
1659    
1660      q = dbuffer;      bptr = q = dbuffer;
1661      while ((c = *p++) != 0)      while ((c = *p++) != 0)
1662        {        {
1663        int i = 0;        int i = 0;
# Line 2218  while (!done) Line 2225  while (!done)
2225        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
2226        string - that was checked before setting g_notempty.        string - that was checked before setting g_notempty.
2227    
2228        Complication arises in the case when the newline option is "any".        Complication arises in the case when the newline option is "any" or
2229        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
2230        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
2231        longer newline sequence, as does the code in pcre_exec(). Fudge the        prefer the longer newline sequence, as does the code in pcre_exec().
2232        offset value to achieve this.        Fudge the offset value to achieve this.
2233    
2234        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
2235        character, not one byte. */        character, not one byte. */
# Line 2232  while (!done) Line 2239  while (!done)
2239          if (g_notempty != 0)          if (g_notempty != 0)
2240            {            {
2241            int onechar = 1;            int onechar = 1;
2242              unsigned int obits = ((real_pcre *)re)->options;
2243            use_offsets[0] = start_offset;            use_offsets[0] = start_offset;
2244            if ((((real_pcre *)re)->options & PCRE_NEWLINE_BITS) ==            if ((obits & PCRE_NEWLINE_BITS) == 0)
2245                    PCRE_NEWLINE_ANY &&              {
2246                int d;
2247                (void)pcre_config(PCRE_CONFIG_NEWLINE, &d);
2248                obits = (d == '\r')? PCRE_NEWLINE_CR :
2249                        (d == '\n')? PCRE_NEWLINE_LF :
2250                        (d == ('\r'<<8 | '\n'))? PCRE_NEWLINE_CRLF :
2251                        (d == -2)? PCRE_NEWLINE_ANYCRLF :
2252                        (d == -1)? PCRE_NEWLINE_ANY : 0;
2253                }
2254              if (((obits & PCRE_NEWLINE_BITS) == PCRE_NEWLINE_ANY ||
2255                   (obits & PCRE_NEWLINE_BITS) == PCRE_NEWLINE_ANYCRLF)
2256                  &&
2257                start_offset < len - 1 &&                start_offset < len - 1 &&
2258                bptr[start_offset] == '\r' &&                bptr[start_offset] == '\r' &&
2259                bptr[start_offset+1] == '\n')                bptr[start_offset+1] == '\n')

Legend:
Removed from v.145  
changed lines
  Added in v.149

  ViewVC Help
Powered by ViewVC 1.1.5