#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[] = {
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 }
};
}
/* }}} */
-#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)
{
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
}
/* }}} */
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
}
/* }}} */
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;
}
}
#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
}
}
#if HAVE_MBREGEX
- MBSTRG(regex_default_options) = MBRE_OPTION_POSIXLINE;
+ PHP_RINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
return SUCCESS;
}
#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;
ZEND_EXTERN_MODULE_GLOBALS(mbstring)
+#ifdef ZTS
+static MUTEX_T mbregex_locale_mutex = NULL;
+#endif
+
/*
* string buffer
*/
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
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);