add stream support for http\Env\Response
[m6w6/ext-http] / php_http_message_body.c
index 40a168876873d03cd312715b0d8c93e7a4b9755c..45fe95e9ef9d9e44e8a158a0f1b03564e2a2c7d3 100644 (file)
@@ -286,6 +286,7 @@ PHP_HTTP_API STATUS php_http_message_body_add_form_file(php_http_message_body_t
 
        efree(safe_name);
        efree(path_dup);
+       efree(bname);
 
        return SUCCESS;
 }
@@ -617,11 +618,7 @@ zend_object_value php_http_message_body_object_new_ex(zend_class_entry *ce, php_
 
        o = ecalloc(1, sizeof(php_http_message_body_object_t));
        zend_object_std_init((zend_object *) o, php_http_message_body_class_entry TSRMLS_CC);
-#if PHP_VERSION_ID < 50339
-       zend_hash_copy(((zend_object *) o)->properties, &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*));
-#else
        object_properties_init((zend_object *) o, ce);
-#endif
 
        if (ptr) {
                *ptr = o;
@@ -653,8 +650,9 @@ void php_http_message_body_object_free(void *object TSRMLS_DC)
 {
        php_http_message_body_object_t *obj = object;
 
-       php_http_message_body_free(&obj->body);
-
+       if (!obj->shared) {
+               php_http_message_body_free(&obj->body);
+       }
        zend_object_std_dtor((zend_object *) obj TSRMLS_CC);
        efree(obj);
 }
@@ -671,7 +669,7 @@ PHP_METHOD(HttpMessageBody, __construct)
                                php_stream_from_zval(stream, &zstream);
 
                                if (stream) {
-                                       if (obj->body) {
+                                       if (obj->body && !obj->shared) {
                                                php_http_message_body_dtor(obj->body);
                                        }
                                        obj->body = php_http_message_body_init(obj->body, stream TSRMLS_CC);
@@ -755,6 +753,7 @@ PHP_METHOD(HttpMessageBody, getResource)
        if (SUCCESS == zend_parse_parameters_none()) {
                php_http_message_body_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
 
+               zend_list_addref(obj->body->stream_id);
                RETVAL_RESOURCE(obj->body->stream_id);
        }
 }