diff options
Diffstat (limited to 'main/streams/transports.c')
-rw-r--r-- | main/streams/transports.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/main/streams/transports.c b/main/streams/transports.c index eb1909f1ce..40d45dbd6f 100644 --- a/main/streams/transports.c +++ b/main/streams/transports.c @@ -31,7 +31,12 @@ PHPAPI HashTable *php_stream_xport_get_hash(void) PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory) { - return zend_hash_str_update_ptr(&xport_hash, protocol, strlen(protocol), factory) ? SUCCESS : FAILURE; + int ret; + zend_string *str = zend_string_init_interned(protocol, strlen(protocol), 1); + + ret = zend_hash_update_ptr(&xport_hash, str, factory) ? SUCCESS : FAILURE; + zend_string_release(str); + return ret; } PHPAPI int php_stream_xport_unregister(const char *protocol) @@ -107,8 +112,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in } if (protocol) { - char *tmp = estrndup(protocol, n); - if (NULL == (factory = zend_hash_str_find_ptr(&xport_hash, tmp, n))) { + if (NULL == (factory = zend_hash_str_find_ptr(&xport_hash, protocol, n))) { char wrapper_name[32]; if (n >= sizeof(wrapper_name)) @@ -118,10 +122,8 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in ERR_REPORT(error_string, "Unable to find the socket transport \"%s\" - did you forget to enable it when you configured PHP?", wrapper_name); - efree(tmp); return NULL; } - efree(tmp); } if (factory == NULL) { @@ -162,13 +164,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in int backlog = 32; if (PHP_STREAM_CONTEXT(stream) && (zbacklog = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "socket", "backlog")) != NULL) { - zval *ztmp = zbacklog; - - convert_to_long_ex(ztmp); - backlog = Z_LVAL_P(ztmp); - if (ztmp != zbacklog) { - zval_ptr_dtor(ztmp); - } + backlog = zval_get_long(zbacklog); } if (0 != php_stream_xport_listen(stream, backlog, &error_text)) { |