summaryrefslogtreecommitdiff
path: root/main/output.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-11-02 14:11:56 +0300
committerDmitry Stogov <dmitry@zend.com>2017-11-02 14:11:56 +0300
commit87a72e7e625ae69c0d2637cd202f0d80672485c8 (patch)
tree6fec396bfb766e71bb9553b621a9dbd24d342ace /main/output.c
parente0517c42be8b3bed302c267806fcb9f77ad7a91e (diff)
downloadphp-git-87a72e7e625ae69c0d2637cd202f0d80672485c8.tar.gz
Use interned strins for output handler aliases and conflict checkers names.
Diffstat (limited to 'main/output.c')
-rw-r--r--main/output.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/main/output.c b/main/output.c
index 3eb6ddcfd7..a1c90858bb 100644
--- a/main/output.c
+++ b/main/output.c
@@ -609,11 +609,17 @@ PHPAPI int php_output_handler_conflict(const char *handler_new, size_t handler_n
* Register a conflict checking function on MINIT */
PHPAPI int php_output_handler_conflict_register(const char *name, size_t name_len, php_output_handler_conflict_check_t check_func)
{
+ int ret;
+ zend_string *str;
+
if (!EG(current_module)) {
zend_error(E_ERROR, "Cannot register an output handler conflict outside of MINIT");
return FAILURE;
}
- return zend_hash_str_update_ptr(&php_output_handler_conflicts, name, name_len, check_func) ? SUCCESS : FAILURE;
+ str = zend_string_init_interned(name, name_len, 1);
+ ret = zend_hash_update_ptr(&php_output_handler_conflicts, str, check_func) ? SUCCESS : FAILURE;
+ zend_string_release(str);
+ return ret;
}
/* }}} */
@@ -631,16 +637,21 @@ PHPAPI int php_output_handler_reverse_conflict_register(const char *name, size_t
if (NULL != (rev_ptr = zend_hash_str_find_ptr(&php_output_handler_reverse_conflicts, name, name_len))) {
return zend_hash_next_index_insert_ptr(rev_ptr, check_func) ? SUCCESS : FAILURE;
} else {
+ int ret;
+ zend_string *str;
+
zend_hash_init(&rev, 8, NULL, NULL, 1);
if (NULL == zend_hash_next_index_insert_ptr(&rev, check_func)) {
zend_hash_destroy(&rev);
return FAILURE;
}
- if (NULL == zend_hash_str_update_mem(&php_output_handler_reverse_conflicts, name, name_len+1, &rev, sizeof(HashTable))) {
+ str = zend_string_init_interned(name, name_len, 1);
+ ret = zend_hash_update_mem(&php_output_handler_reverse_conflicts, str, &rev, sizeof(HashTable)) ? SUCCESS : FAILURE;
+ zend_string_release(str);
+ if (ret != SUCCESS) {
zend_hash_destroy(&rev);
- return FAILURE;
}
- return SUCCESS;
+ return ret;
}
}
/* }}} */
@@ -657,11 +668,17 @@ PHPAPI php_output_handler_alias_ctor_t php_output_handler_alias(const char *name
* Registers an internal output handler as alias for a user handler */
PHPAPI int php_output_handler_alias_register(const char *name, size_t name_len, php_output_handler_alias_ctor_t func)
{
+ int ret;
+ zend_string *str;
+
if (!EG(current_module)) {
zend_error(E_ERROR, "Cannot register an output handler alias outside of MINIT");
return FAILURE;
}
- return zend_hash_str_update_ptr(&php_output_handler_aliases, name, name_len, func) ? SUCCESS : FAILURE;
+ str = zend_string_init_interned(name, name_len, 1);
+ ret = zend_hash_update_ptr(&php_output_handler_aliases, str, func) ? SUCCESS : FAILURE;
+ zend_string_release(str);
+ return ret;
}
/* }}} */