/[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 567 by ph10, Sat Nov 6 17:10:00 2010 UTC revision 598 by ph10, Sat May 7 15:37:31 2011 UTC
# Line 79  input mode under Windows. */ Line 79  input mode under Windows. */
79  #define fileno _fileno  #define fileno _fileno
80  #endif  #endif
81    
82    /* A user sent this fix for Borland Builder 5 under Windows. */
83    
84    #ifdef __BORLANDC__
85    #define _setmode(handle, mode) setmode(handle, mode)
86    #endif
87    
88    /* Not Windows */
89    
90  #else  #else
91  #include <sys/time.h>          /* These two includes are needed */  #include <sys/time.h>          /* These two includes are needed */
92  #include <sys/resource.h>      /* for setrlimit(). */  #include <sys/resource.h>      /* for setrlimit(). */
# Line 189  static uschar *buffer = NULL; Line 197  static uschar *buffer = NULL;
197  static uschar *dbuffer = NULL;  static uschar *dbuffer = NULL;
198  static uschar *pbuffer = NULL;  static uschar *pbuffer = NULL;
199    
200    /* Textual explanations for runtime error codes */
201    
202    static const char *errtexts[] = {
203      NULL,  /* 0 is no error */
204      NULL,  /* NOMATCH is handled specially */
205      "NULL argument passed",
206      "bad option value",
207      "magic number missing",
208      "unknown opcode - pattern overwritten?",
209      "no more memory",
210      NULL,  /* never returned by pcre_exec() or pcre_dfa_exec() */
211      "match limit exceeded",
212      "callout error code",
213      NULL,  /* BADUTF8 is handled specially */
214      "bad UTF-8 offset",
215      NULL,  /* PARTIAL is handled specially */
216      "not used - internal error",
217      "internal error - pattern overwritten?",
218      "bad count value",
219      "item unsupported for DFA matching",
220      "backreference condition or recursion test not supported for DFA matching",
221      "match limit not supported for DFA matching",
222      "workspace size exceeded in DFA matching",
223      "too much recursion for DFA matching",
224      "recursion limit exceeded",
225      "not used - internal error",
226      "invalid combination of newline options",
227      "bad offset value",
228      NULL  /* SHORTUTF8 is handled specially */
229    };
230    
231    
232  /*************************************************  /*************************************************
233  *         Alternate character tables             *  *         Alternate character tables             *
# Line 1588  while (!done) Line 1627  while (!done)
1627        case 'U': options |= PCRE_UNGREEDY; break;        case 'U': options |= PCRE_UNGREEDY; break;
1628        case 'W': options |= PCRE_UCP; break;        case 'W': options |= PCRE_UCP; break;
1629        case 'X': options |= PCRE_EXTRA; break;        case 'X': options |= PCRE_EXTRA; break;
1630          case 'Y': options |= PCRE_NO_START_OPTIMISE; break;
1631        case 'Z': debug_lengths = 0; break;        case 'Z': debug_lengths = 0; break;
1632        case '8': options |= PCRE_UTF8; use_utf8 = 1; break;        case '8': options |= PCRE_UTF8; use_utf8 = 1; break;
1633        case '?': options |= PCRE_NO_UTF8_CHECK; break;        case '?': options |= PCRE_NO_UTF8_CHECK; break;
# Line 1924  while (!done) Line 1964  while (!done)
1964        if (do_flip) all_options = byteflip(all_options, sizeof(all_options));        if (do_flip) all_options = byteflip(all_options, sizeof(all_options));
1965    
1966        if (get_options == 0) fprintf(outfile, "No options\n");        if (get_options == 0) fprintf(outfile, "No options\n");
1967          else fprintf(outfile, "Options:%s%s%s%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%s%s%s%s\n",
1968            ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",            ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
1969            ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",            ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",
1970            ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",            ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",
# Line 1940  while (!done) Line 1980  while (!done)
1980            ((get_options & PCRE_UTF8) != 0)? " utf8" : "",            ((get_options & PCRE_UTF8) != 0)? " utf8" : "",
1981            ((get_options & PCRE_UCP) != 0)? " ucp" : "",            ((get_options & PCRE_UCP) != 0)? " ucp" : "",
1982            ((get_options & PCRE_NO_UTF8_CHECK) != 0)? " no_utf8_check" : "",            ((get_options & PCRE_NO_UTF8_CHECK) != 0)? " no_utf8_check" : "",
1983              ((get_options & PCRE_NO_START_OPTIMIZE) != 0)? " no_start_optimize" : "",
1984            ((get_options & PCRE_DUPNAMES) != 0)? " dupnames" : "");            ((get_options & PCRE_DUPNAMES) != 0)? " dupnames" : "");
1985    
1986        if (jchanged) fprintf(outfile, "Duplicate name status changes\n");        if (jchanged) fprintf(outfile, "Duplicate name status changes\n");
# Line 2132  while (!done) Line 2173  while (!done)
2173      int getlist = 0;      int getlist = 0;
2174      int gmatched = 0;      int gmatched = 0;
2175      int start_offset = 0;      int start_offset = 0;
2176      int start_offset_sign = 1;      int start_offset_sign = 1;
2177      int g_notempty = 0;      int g_notempty = 0;
2178      int use_dfa = 0;      int use_dfa = 0;
2179    
# Line 2265  while (!done) Line 2306  while (!done)
2306          continue;          continue;
2307    
2308          case '>':          case '>':
2309          if (*p == '-')          if (*p == '-')
2310            {            {
2311            start_offset_sign = -1;            start_offset_sign = -1;
2312            p++;            p++;
2313            }            }
2314          while(isdigit(*p)) start_offset = start_offset * 10 + *p++ - '0';          while(isdigit(*p)) start_offset = start_offset * 10 + *p++ - '0';
2315          start_offset *= start_offset_sign;          start_offset *= start_offset_sign;
2316          continue;          continue;
2317    
2318          case 'A':  /* Option setting */          case 'A':  /* Option setting */
# Line 2799  while (!done) Line 2840  while (!done)
2840        string - that was checked before setting g_notempty.        string - that was checked before setting g_notempty.
2841    
2842        Complication arises in the case when the newline convention is "any",        Complication arises in the case when the newline convention is "any",
2843        "crlf", or "anycrlf". If the previous match was at the end of a line        "crlf", or "anycrlf". If the previous match was at the end of a line
2844        terminated by CRLF, an advance of one character just passes the \r,        terminated by CRLF, an advance of one character just passes the \r,
2845        whereas we should prefer the longer newline sequence, as does the code in        whereas we should prefer the longer newline sequence, as does the code in
2846        pcre_exec(). Fudge the offset value to achieve this. We check for a        pcre_exec(). Fudge the offset value to achieve this. We check for a
2847        newline setting in the pattern; if none was set, use pcre_config() to        newline setting in the pattern; if none was set, use pcre_config() to
2848        find the default.        find the default.
2849    
2850        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
# Line 2841  while (!done) Line 2882  while (!done)
2882              while (start_offset + onechar < len)              while (start_offset + onechar < len)
2883                {                {
2884                if ((bptr[start_offset+onechar] & 0xc0) != 0x80) break;                if ((bptr[start_offset+onechar] & 0xc0) != 0x80) break;
2885                onechar++;                onechar++;
2886                }                }
2887              }              }
2888            use_offsets[1] = start_offset + onechar;            use_offsets[1] = start_offset + onechar;
2889            }            }
2890          else          else
2891            {            {
2892            if (count == PCRE_ERROR_NOMATCH)            switch(count)
2893              {              {
2894                case PCRE_ERROR_NOMATCH:
2895              if (gmatched == 0)              if (gmatched == 0)
2896                {                {
2897                if (markptr == NULL) fprintf(outfile, "No match\n");                if (markptr == NULL) fprintf(outfile, "No match\n");
2898                  else fprintf(outfile, "No match, mark = %s\n", markptr);                  else fprintf(outfile, "No match, mark = %s\n", markptr);
2899                }                }
2900                break;
2901    
2902                case PCRE_ERROR_BADUTF8:
2903                case PCRE_ERROR_SHORTUTF8:
2904                fprintf(outfile, "Error %d (%s UTF-8 string)", count,
2905                  (count == PCRE_ERROR_BADUTF8)? "bad" : "short");
2906                if (use_size_offsets >= 2)
2907                  fprintf(outfile, " offset=%d reason=%d", use_offsets[0],
2908                    use_offsets[1]);
2909                fprintf(outfile, "\n");
2910                break;
2911    
2912                default:
2913                fprintf(outfile, "Error %d (%s)\n", count, errtexts[-count]);
2914                break;
2915              }              }
2916            else fprintf(outfile, "Error %d\n", count);  
2917            break;  /* Out of the /g loop */            break;  /* Out of the /g loop */
2918            }            }
2919          }          }

Legend:
Removed from v.567  
changed lines
  Added in v.598

  ViewVC Help
Powered by ViewVC 1.1.5