diff options
author | Marcus Boerger <helly@php.net> | 2006-05-09 23:53:40 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2006-05-09 23:53:40 +0000 |
commit | 0de69fe97dc86d25ecb572cb9d80dad4418612ef (patch) | |
tree | 2b596b3839d7820a98d5025f3bc4ed4fe8378018 | |
parent | 637a40423cd7632b2800814c2ba3ad9b95bbd2f4 (diff) | |
download | php-git-0de69fe97dc86d25ecb572cb9d80dad4418612ef.tar.gz |
- MFH pcre_get_compiled_regex_cache() support
-rw-r--r-- | ext/pcre/php_pcre.c | 41 | ||||
-rw-r--r-- | ext/pcre/php_pcre.h | 3 |
2 files changed, 29 insertions, 15 deletions
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 8de4bc7797..91d70975fb 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -180,18 +180,9 @@ static int pcre_clean_cache(void *data, void *arg TSRMLS_DC) } /* }}} */ -/* {{{ pcre_get_compiled_regex - */ -PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *preg_options TSRMLS_DC) -{ - int compile_options; - return pcre_get_compiled_regex_ex(regex, extra, preg_options, &compile_options TSRMLS_CC); -} -/* }}} */ - -/* {{{ pcre_get_compiled_regex_ex +/* {{{ pcre_get_compiled_regex_cache */ -PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *preg_options, int *compile_options TSRMLS_DC) +PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_len, pcre_extra **extra, int *preg_options, int *compile_options TSRMLS_DC) { pcre *re = NULL; int coptions = 0; @@ -203,7 +194,6 @@ PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *pr char end_delimiter; char *p, *pp; char *pattern; - int regex_len; int do_study = 0; int poptions = 0; unsigned const char *tables = NULL; @@ -230,7 +220,7 @@ PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *pr *extra = pce->extra; *preg_options = pce->preg_options; *compile_options = pce->compile_options; - return pce->re; + return pce; #if HAVE_SETLOCALE } } @@ -393,9 +383,30 @@ PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *pr new_entry.tables = tables; #endif zend_hash_update(&PCRE_G(pcre_cache), regex, regex_len+1, (void *)&new_entry, - sizeof(pcre_cache_entry), NULL); + sizeof(pcre_cache_entry), (void**)&pce); - return re; + return pce; +} +/* }}} */ + +/* {{{ pcre_get_compiled_regex + */ +PHPAPI pcre* pcre_get_compiled_regex(char *regex, pcre_extra **extra, int *preg_options TSRMLS_DC) +{ + int compile_options; + pcre_cache_entry * pce = pcre_get_compiled_regex_cache(regex, strlen(regex), extra, preg_options, &compile_options TSRMLS_CC); + + return pce ? pce->re : NULL; +} +/* }}} */ + +/* {{{ pcre_get_compiled_regex_ex + */ +PHPAPI pcre* pcre_get_compiled_regex_ex(char *regex, pcre_extra **extra, int *preg_options, int *compile_options TSRMLS_DC) +{ + pcre_cache_entry * pce = pcre_get_compiled_regex_cache(regex, strlen(regex), extra, preg_options, compile_options TSRMLS_CC); + + return pce ? pce->re : NULL; } /* }}} */ diff --git a/ext/pcre/php_pcre.h b/ext/pcre/php_pcre.h index d6068cfb74..6a9c94b68c 100644 --- a/ext/pcre/php_pcre.h +++ b/ext/pcre/php_pcre.h @@ -57,8 +57,11 @@ typedef struct { unsigned const char *tables; #endif int compile_options; + int refcount; } pcre_cache_entry; +PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_len, pcre_extra **extra, int *preg_options, int *compile_options TSRMLS_DC); + ZEND_BEGIN_MODULE_GLOBALS(pcre) HashTable pcre_cache; long backtrack_limit; |