X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_http_message.c;h=6ecf6e737831eb818d75beda189f431271ea6c57;hb=33be4451ab1e395c433395e8bc6014453d36827a;hp=4109202226caae9abb31ac5340c5e69800899ea3;hpb=55ecd561795b73a44c9aa6495af0602d114eac24;p=m6w6%2Fext-http diff --git a/php_http_message.c b/php_http_message.c index 4109202..6ecf6e7 100644 --- a/php_http_message.c +++ b/php_http_message.c @@ -604,9 +604,8 @@ static void php_http_message_object_prophandler_set_headers(php_http_message_obj if (Z_TYPE_P(value) != IS_ARRAY && Z_TYPE_P(value) != IS_OBJECT) { convert_to_array_ex(value); - } else { - headers = HASH_OF(value); } + headers = HASH_OF(value); zend_hash_clean(&obj->message->hdrs); array_copy(headers, &obj->message->hdrs); @@ -688,7 +687,7 @@ void php_http_message_object_reverse(zval *zmsg, zval *return_value) /* add ref, because we previously have not been a parent message */ Z_ADDREF_P(zmsg); - RETVAL_OBJ(&objects[last]->zo); + RETVAL_OBJECT(&objects[last]->zo, 1); efree(objects); } else { @@ -798,7 +797,7 @@ php_http_message_object_t *php_http_message_object_new_ex(zend_class_entry *ce, { php_http_message_object_t *o; - o = ecalloc(1, sizeof(php_http_message_object_t) + (ce->default_properties_count - 1) * sizeof(zval)); + o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce)); zend_object_std_init(&o->zo, ce); object_properties_init(&o->zo, ce); @@ -1107,15 +1106,18 @@ static PHP_METHOD(HttpMessage, getHeader) if ((header = php_http_message_header(obj->message, header_str, header_len))) { if (!header_ce) { - RETURN_ZVAL(header, 1, 1); + RETURN_ZVAL_FAST(header); } else if (instanceof_function(header_ce, php_http_header_class_entry)) { + php_http_object_method_t cb; zval argv[2]; ZVAL_STRINGL(&argv[0], header_str, header_len); ZVAL_COPY(&argv[1], header); object_init_ex(return_value, header_ce); - php_http_method_call(return_value, ZEND_STRL("__construct"), 2, argv, NULL); + php_http_object_method_init(&cb, return_value, ZEND_STRL("__construct")); + php_http_object_method_call(&cb, return_value, NULL, 2, argv); + php_http_object_method_dtor(&cb); zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]);