case 'o': break;
case 's': rc |= PCRE_DOTALL; break;
case 'x': rc |= PCRE_EXTENDED; break;
+ case 'D': *flags |= PCRS_DYNAMIC; break;
case 'U': rc |= PCRE_UNGREEDY; break;
case 'T': *flags |= PCRS_TRIVIAL; break;
default: break;
#ifdef PCRE_STUDY_JIT_COMPILE
- pcre_study_options = PCRE_STUDY_JIT_COMPILE;
+ if (!(flags & PCRS_DYNAMIC))
+ {
+ pcre_study_options = PCRE_STUDY_JIT_COMPILE;
+ }
#endif
/*
*/
assert(NULL == strchr(v->name, d));
- ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cgT", d, v->name, d, v->value, d);
+ ret = snprintf(buf, sizeof(buf), "s%c\\$%s%c%s%cDgT", d, v->name, d, v->value, d);
assert(ret >= 0);
if (ret >= sizeof(buf))
{
* properly.
*/
static const char warning[] = "... [too long, truncated]";
- const size_t trailer_size = sizeof(warning) + 3; /* 3 for d + "gT" */
+ const size_t trailer_size = sizeof(warning) + 4; /* 4 for d + "DgT" */
char *trailer_start = buf + sizeof(buf) - trailer_size;
- ret = snprintf(trailer_start, trailer_size, "%s%cgT", warning, d);
+ ret = snprintf(trailer_start, trailer_size, "%s%cDgT", warning, d);
assert(ret == trailer_size - 1);
assert(sizeof(buf) == strlen(buf) + 1);
truncation = 1;
#define PCRS_GLOBAL 1 /* Job should be applied globally, as with perl's g option */
#define PCRS_TRIVIAL 2 /* Backreferences in the substitute are ignored */
#define PCRS_SUCCESS 4 /* Job did previously match */
+#define PCRS_DYNAMIC 8 /* Job is dynamic (used to disable JIT compilation) */
/*