diff options
Diffstat (limited to 'ext/standard/reg.c')
-rw-r--r-- | ext/standard/reg.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/ext/standard/reg.c b/ext/standard/reg.c index c8afdc80f9..adad999ee3 100644 --- a/ext/standard/reg.c +++ b/ext/standard/reg.c @@ -46,6 +46,7 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags) if(zend_hash_find(®(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == SUCCESS && rc->cflags == cflags) { +#ifdef HAVE_REGEX_T_RE_MAGIC /* * We use a saved magic number to see whether cache is corrupted, and if it * is, we flush it and compile the pattern from scratch. @@ -73,7 +74,20 @@ static int _php_regcomp(regex_t *preg, const char *pattern, int cflags) zend_hash_update(®(ht_rc), (char *) pattern, patlen+1, (void *) &rcp, sizeof(rcp), NULL); } - +#else + memcpy(preg, &rc->preg, sizeof(*preg)); + } else { + r = regcomp(preg, pattern, cflags); + if(!r) { + reg_cache rcp; + + rcp.cflags = cflags; + memcpy(&rcp.preg, preg, sizeof(*preg)); + zend_hash_update(®(ht_rc), (char *) pattern, patlen+1, + (void *) &rcp, sizeof(rcp), NULL); + } + } +#endif return r; } /* }}} */ |