change array_list API
[m6w6/ext-http] / php_http_message_body.c
index 9d0f2263e856f7ca1d4dce2d162d223484cbe410..d094db62582e5e489d1e16f1c58f09d310b156d0 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;
 }
@@ -537,6 +538,9 @@ PHP_HTTP_BEGIN_ARGS(__construct, 0)
 PHP_HTTP_END_ARGS;
 
 PHP_HTTP_EMPTY_ARGS(__toString);
+PHP_HTTP_BEGIN_ARGS(unserialize, 1)
+       PHP_HTTP_ARG_VAL(serialized, 0)
+PHP_HTTP_END_ARGS;
 
 PHP_HTTP_BEGIN_ARGS(toStream, 1)
        PHP_HTTP_ARG_VAL(stream, 0)
@@ -578,6 +582,8 @@ static zend_function_entry php_http_message_body_method_entry[] = {
        PHP_HTTP_MESSAGE_BODY_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
        PHP_HTTP_MESSAGE_BODY_ME(__toString, ZEND_ACC_PUBLIC)
        PHP_MALIAS(HttpMessageBody, toString, __toString, args_for_HttpMessageBody___toString, ZEND_ACC_PUBLIC)
+       PHP_MALIAS(HttpMessageBody, serialize, __toString, args_for_HttpMessageBody___toString, ZEND_ACC_PUBLIC)
+       PHP_HTTP_MESSAGE_BODY_ME(unserialize, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_BODY_ME(toStream, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_BODY_ME(toCallback, ZEND_ACC_PUBLIC)
        PHP_HTTP_MESSAGE_BODY_ME(getResource, ZEND_ACC_PUBLIC)
@@ -596,7 +602,7 @@ PHP_MINIT_FUNCTION(http_message_body)
        php_http_message_body_class_entry->create_object = php_http_message_body_object_new;
        memcpy(&php_http_message_body_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
        php_http_message_body_object_handlers.clone_obj = php_http_message_body_object_clone;
-
+       zend_class_implements(php_http_message_body_class_entry TSRMLS_CC, 1, zend_ce_serializable);
        return SUCCESS;
 }
 
@@ -612,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;
@@ -694,6 +696,19 @@ PHP_METHOD(HttpMessageBody, __toString)
        RETURN_EMPTY_STRING();
 }
 
+PHP_METHOD(HttpMessageBody, unserialize)
+{
+       char *us_str;
+       int us_len;
+
+       if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &us_str, &us_len)) {
+               php_http_message_body_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
+               php_stream *s = php_stream_memory_open(0, us_str, us_len);
+
+               obj->body = php_http_message_body_init(NULL, s TSRMLS_CC);
+       }
+}
+
 PHP_METHOD(HttpMessageBody, toStream)
 {
        zval *zstream;
@@ -737,6 +752,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);
        }
 }