summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2002-11-14 18:54:42 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2002-11-14 18:54:42 +0000
commitdac0b6fc4f729f7cc3f1cae1ef116e9c258cdd45 (patch)
tree54fb0bab2be93806490c9dc732ef5ffb73d9d8eb
parentdb6efcf7e545e173229c2e8e29b027f46a9e4d2f (diff)
downloadphp-git-dac0b6fc4f729f7cc3f1cae1ef116e9c258cdd45.tar.gz
Moved some mbregex related portions from mbstring.c to php_mbregex.c
# No need to merge this change to PHP_4_3 branch
-rw-r--r--ext/mbstring/mbstring.c90
-rw-r--r--ext/mbstring/php_mbregex.c92
-rw-r--r--ext/mbstring/php_mbregex.h42
3 files changed, 141 insertions, 83 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index bbbf9b6df0..47084ccc91 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -78,10 +78,6 @@
#endif
/* }}} */
-#ifdef ZTS
-MUTEX_T mbregex_locale_mutex = NULL;
-#endif
-
/* {{{ php_mbstr_default_identify_list[] */
#if defined(HAVE_MBSTR_JA)
static const enum mbfl_no_encoding php_mbstr_default_identify_list[] = {
@@ -244,35 +240,7 @@ function_entry mbstring_functions[] = {
PHP_FALIAS(i18n_mime_header_decode, mb_decode_mimeheader, NULL)
PHP_FALIAS(i18n_ja_jp_hantozen, mb_convert_kana, NULL)
#if HAVE_MBREGEX
- PHP_FE(mb_regex_encoding, NULL)
- PHP_FE(mb_regex_set_options, NULL)
- PHP_FE(mb_ereg, (unsigned char *)third_argument_force_ref)
- PHP_FE(mb_eregi, (unsigned char *)third_argument_force_ref)
- PHP_FE(mb_ereg_replace, NULL)
- PHP_FE(mb_eregi_replace, NULL)
- PHP_FE(mb_split, NULL)
- PHP_FE(mb_ereg_match, NULL)
- PHP_FE(mb_ereg_search, NULL)
- PHP_FE(mb_ereg_search_pos, NULL)
- PHP_FE(mb_ereg_search_regs, NULL)
- PHP_FE(mb_ereg_search_init, NULL)
- PHP_FE(mb_ereg_search_getregs, NULL)
- PHP_FE(mb_ereg_search_getpos, NULL)
- PHP_FE(mb_ereg_search_setpos, NULL)
- PHP_FALIAS(mbregex_encoding, mb_regex_encoding, NULL)
- PHP_FALIAS(mbereg, mb_ereg, NULL)
- PHP_FALIAS(mberegi, mb_eregi, NULL)
- PHP_FALIAS(mbereg_replace, mb_ereg_replace, NULL)
- PHP_FALIAS(mberegi_replace, mb_eregi_replace, NULL)
- PHP_FALIAS(mbsplit, mb_split, NULL)
- PHP_FALIAS(mbereg_match, mb_ereg_match, NULL)
- PHP_FALIAS(mbereg_search, mb_ereg_search, NULL)
- PHP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, NULL)
- PHP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, NULL)
- PHP_FALIAS(mbereg_search_init, mb_ereg_search_init, NULL)
- PHP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, NULL)
- PHP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, NULL)
- PHP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, NULL)
+ PHP_MBREGEX_FUNCTION_ENTRIES
#endif
{ NULL, NULL, NULL }
};
@@ -502,16 +470,6 @@ php_mb_parse_encoding_array(zval *array, int **return_list, int *return_size, in
}
/* }}} */
-#if HAVE_MBREGEX
-/* {{{ static void php_mbregex_free_cache() */
-static void
-php_mbregex_free_cache(mb_regex_t *pre)
-{
- mbre_free_pattern(pre);
-}
-/* }}} */
-#endif
-
/* {{{ php.ini directive handler */
static PHP_INI_MH(OnUpdate_mbstring_language)
{
@@ -772,14 +730,7 @@ php_mb_init_globals(zend_mbstring_globals *pglobals TSRMLS_DC)
MBSTRG(encoding_translation) = 0;
pglobals->outconv = NULL;
#if HAVE_MBREGEX
- MBSTRG(default_mbctype) = MBCTYPE_EUC;
- MBSTRG(current_mbctype) = MBCTYPE_EUC;
- zend_hash_init(&(MBSTRG(ht_rc)), 0, NULL, (void (*)(void *)) php_mbregex_free_cache, 1);
- MBSTRG(search_str) = (zval**)0;
- MBSTRG(search_str_val) = (zval*)0;
- MBSTRG(search_re) = (mb_regex_t*)0;
- MBSTRG(search_pos) = 0;
- MBSTRG(search_regs) = (struct mbre_registers*)0;
+ php_mb_regex_globals_ctor(pglobals TSRMLS_CC);
#endif
}
/* }}} */
@@ -789,7 +740,7 @@ static void
mbstring_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC)
{
#if HAVE_MBREGEX
- zend_hash_destroy(&MBSTRG(ht_rc));
+ php_mb_regex_globals_dtor(pglobals TSRMLS_CC);
#endif
}
/* }}} */
@@ -823,9 +774,7 @@ PHP_MINIT_FUNCTION(mbstring)
REGISTER_LONG_CONSTANT("MB_CASE_TITLE", PHP_UNICODE_CASE_TITLE, CONST_CS | CONST_PERSISTENT);
#if HAVE_MBREGEX
-# ifdef ZTS
- mbregex_locale_mutex = tsrm_mutex_alloc();
-# endif
+ PHP_MINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
return SUCCESS;
}
@@ -855,11 +804,7 @@ PHP_MSHUTDOWN_FUNCTION(mbstring)
}
#if HAVE_MBREGEX
-# ifdef ZTS
- if (mbregex_locale_mutex != NULL) {
- tsrm_mutex_free(mbregex_locale_mutex);
- }
-# endif
+ PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
#ifdef ZTS
@@ -932,7 +877,7 @@ PHP_RINIT_FUNCTION(mbstring)
}
}
#if HAVE_MBREGEX
- MBSTRG(regex_default_options) = MBRE_OPTION_POSIXLINE;
+ PHP_RINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
return SUCCESS;
@@ -973,28 +918,7 @@ PHP_RSHUTDOWN_FUNCTION(mbstring)
}
#if HAVE_MBREGEX
- MBSTRG(current_mbctype) = MBSTRG(default_mbctype);
- if (MBSTRG(search_str)) {
- if (ZVAL_REFCOUNT(*MBSTRG(search_str)) > 1) {
- ZVAL_DELREF(*MBSTRG(search_str));
- } else {
- zval_dtor(*MBSTRG(search_str));
- FREE_ZVAL(*MBSTRG(search_str));
- }
- MBSTRG(search_str) = (zval **)0;
- MBSTRG(search_str_val) = (zval *)0;
- }
- MBSTRG(search_pos) = 0;
- if (MBSTRG(search_re)) {
- efree(MBSTRG(search_re));
- MBSTRG(search_re) = (mb_regex_t *)0;
- }
- if (MBSTRG(search_regs)) {
- mbre_free_registers(MBSTRG(search_regs));
- efree(MBSTRG(search_regs));
- MBSTRG(search_regs) = (struct mbre_registers*)0;
- }
- zend_hash_clean(&MBSTRG(ht_rc));
+ PHP_RSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
return SUCCESS;
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index 8d4dd20ccb..2332a0ab0b 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -33,6 +33,10 @@
ZEND_EXTERN_MODULE_GLOBALS(mbstring)
+#ifdef ZTS
+static MUTEX_T mbregex_locale_mutex = NULL;
+#endif
+
/*
* string buffer
*/
@@ -80,6 +84,94 @@ _php_mb_regex_strbuf_ncat(struct strbuf *pd, const unsigned char *psrc, int len)
return len;
}
+/* {{{ static void php_mb_regex_free_cache() */
+static void php_mb_regex_free_cache(mb_regex_t *pre)
+{
+ mbre_free_pattern(pre);
+}
+/* }}} */
+
+/* {{{ php_mb_regex_globals_ctor */
+void php_mb_regex_globals_ctor(zend_mbstring_globals *pglobals TSRMLS_DC)
+{
+ MBSTRG(default_mbctype) = MBCTYPE_EUC;
+ MBSTRG(current_mbctype) = MBCTYPE_EUC;
+ zend_hash_init(&(MBSTRG(ht_rc)), 0, NULL, (void (*)(void *)) php_mb_regex_free_cache, 1);
+ MBSTRG(search_str) = (zval**)0;
+ MBSTRG(search_str_val) = (zval*)0;
+ MBSTRG(search_re) = (mb_regex_t*)0;
+ MBSTRG(search_pos) = 0;
+ MBSTRG(search_regs) = (struct mbre_registers*)0;
+}
+/* }}} */
+
+/* {{{ php_mb_regex_globals_dtor */
+void php_mb_regex_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC)
+{
+ zend_hash_destroy(&MBSTRG(ht_rc));
+}
+/* }}} */
+
+/* {{{ PHP_MINIT_FUNCTION(mb_regex) */
+PHP_MINIT_FUNCTION(mb_regex)
+{
+# ifdef ZTS
+ mbregex_locale_mutex = tsrm_mutex_alloc();
+# endif
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_MSHUTDOWN_FUNCTION(mb_regex) */
+PHP_MSHUTDOWN_FUNCTION(mb_regex)
+{
+#ifdef ZTS
+ if (mbregex_locale_mutex != NULL) {
+ tsrm_mutex_free(mbregex_locale_mutex);
+ }
+#endif
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_RINIT_FUNCTION(mb_regex) */
+PHP_RINIT_FUNCTION(mb_regex)
+{
+ MBSTRG(regex_default_options) = MBRE_OPTION_POSIXLINE;
+
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_RSHUTDOWN_FUNCTION(mb_regex) */
+PHP_RSHUTDOWN_FUNCTION(mb_regex)
+{
+ MBSTRG(current_mbctype) = MBSTRG(default_mbctype);
+ if (MBSTRG(search_str)) {
+ if (ZVAL_REFCOUNT(*MBSTRG(search_str)) > 1) {
+ ZVAL_DELREF(*MBSTRG(search_str));
+ } else {
+ zval_dtor(*MBSTRG(search_str));
+ FREE_ZVAL(*MBSTRG(search_str));
+ }
+ MBSTRG(search_str) = (zval **)0;
+ MBSTRG(search_str_val) = (zval *)0;
+ }
+ MBSTRG(search_pos) = 0;
+ if (MBSTRG(search_re)) {
+ efree(MBSTRG(search_re));
+ MBSTRG(search_re) = (mb_regex_t *)0;
+ }
+ if (MBSTRG(search_regs)) {
+ mbre_free_registers(MBSTRG(search_regs));
+ efree(MBSTRG(search_regs));
+ MBSTRG(search_regs) = (struct mbre_registers*)0;
+ }
+ zend_hash_clean(&MBSTRG(ht_rc));
+
+ return SUCCESS;
+}
+/* }}} */
/*
* encoding name resolver
diff --git a/ext/mbstring/php_mbregex.h b/ext/mbstring/php_mbregex.h
index e0620a2a83..da7030ed63 100644
--- a/ext/mbstring/php_mbregex.h
+++ b/ext/mbstring/php_mbregex.h
@@ -40,12 +40,54 @@
int regex_default_options;
/* }}} */
+/* {{{ PHP_MBREGEX_FUNCTION_ENTRIES */
+#define PHP_MBREGEX_FUNCTION_ENTRIES \
+ PHP_FE(mb_regex_encoding, NULL) \
+ PHP_FE(mb_regex_set_options, NULL) \
+ PHP_FE(mb_ereg, (unsigned char *)third_argument_force_ref) \
+ PHP_FE(mb_eregi, (unsigned char *)third_argument_force_ref) \
+ PHP_FE(mb_ereg_replace, NULL) \
+ PHP_FE(mb_eregi_replace, NULL) \
+ PHP_FE(mb_split, NULL) \
+ PHP_FE(mb_ereg_match, NULL) \
+ PHP_FE(mb_ereg_search, NULL) \
+ PHP_FE(mb_ereg_search_pos, NULL) \
+ PHP_FE(mb_ereg_search_regs, NULL) \
+ PHP_FE(mb_ereg_search_init, NULL) \
+ PHP_FE(mb_ereg_search_getregs, NULL) \
+ PHP_FE(mb_ereg_search_getpos, NULL) \
+ PHP_FE(mb_ereg_search_setpos, NULL) \
+ PHP_FALIAS(mbregex_encoding, mb_regex_encoding, NULL) \
+ PHP_FALIAS(mbereg, mb_ereg, NULL) \
+ PHP_FALIAS(mberegi, mb_eregi, NULL) \
+ PHP_FALIAS(mbereg_replace, mb_ereg_replace, NULL) \
+ PHP_FALIAS(mberegi_replace, mb_eregi_replace, NULL) \
+ PHP_FALIAS(mbsplit, mb_split, NULL) \
+ PHP_FALIAS(mbereg_match, mb_ereg_match, NULL) \
+ PHP_FALIAS(mbereg_search, mb_ereg_search, NULL) \
+ PHP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, NULL) \
+ PHP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, NULL) \
+ PHP_FALIAS(mbereg_search_init, mb_ereg_search_init, NULL) \
+ PHP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, NULL) \
+ PHP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, NULL) \
+ PHP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, NULL)
+/* }}} */
+
+typedef struct _zend_mbstring_globals * zend_mbstring_globals_ptr;
+
#define PHP_MBREGEX_MAXCACHE 50
int php_mb_regex_name2mbctype(const char *pname);
int php_mb_regex_set_options(int options TSRMLS_DC);
int php_mb_regex_set_options_by_string(const char *optstr, int len TSRMLS_DC);
+PHP_MINIT_FUNCTION(mb_regex);
+PHP_MSHUTDOWN_FUNCTION(mb_regex);
+PHP_RINIT_FUNCTION(mb_regex);
+PHP_RSHUTDOWN_FUNCTION(mb_regex);
+void php_mb_regex_globals_ctor(zend_mbstring_globals_ptr pglobals TSRMLS_DC);
+void php_mb_regex_globals_dtor(zend_mbstring_globals_ptr pglobals TSRMLS_DC);
+
PHP_FUNCTION(mb_regex_encoding);
PHP_FUNCTION(mb_ereg);
PHP_FUNCTION(mb_eregi);