X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_request_object.c;h=a3b132eeaaae4b4b60d50de558feb1777ad58101;hb=bae1d9bccd93257b15065f1b51579b2d0b5cc1e4;hp=7706fd7ef1cd45df6c46532d464d707c41973a9a;hpb=1041b48ef546c1a99f9a94210c19bcab364673cd;p=m6w6%2Fext-http diff --git a/http_request_object.c b/http_request_object.c index 7706fd7..a3b132e 100644 --- a/http_request_object.c +++ b/http_request_object.c @@ -39,7 +39,6 @@ ZEND_EXTERN_MODULE_GLOBALS(http); #define HTTP_REQUEST_ME(method, visibility) PHP_ME(HttpRequest, method, HTTP_ARGS(HttpRequest, method), visibility) #define HTTP_REQUEST_ALIAS(method, func) HTTP_STATIC_ME_ALIAS(method, func, HTTP_ARGS(HttpRequest, method)) -HTTP_EMPTY_ARGS(__destruct, 0); HTTP_BEGIN_ARGS(__construct, 0, 0) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(method, 0) @@ -217,7 +216,6 @@ static inline void _http_request_object_declare_default_properties(TSRMLS_D); zend_class_entry *http_request_object_ce; zend_function_entry http_request_object_fe[] = { HTTP_REQUEST_ME(__construct, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) - HTTP_REQUEST_ME(__destruct, ZEND_ACC_PUBLIC|ZEND_ACC_DTOR) HTTP_REQUEST_ME(setOptions, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getOptions, ZEND_ACC_PUBLIC) @@ -687,18 +685,6 @@ PHP_METHOD(HttpRequest, __construct) } /* }}} */ -/* {{{ proto void HttpRequest::__destruct() - * - * Destroys the HttpRequest object. - */ -PHP_METHOD(HttpRequest, __destruct) -{ - getObject(http_request_object, obj); - - NO_ARGS; -} -/* }}} */ - /* {{{ proto bool HttpRequest::setOptions([array options]) * * Set the request options to use. See http_get() for a full list of available options. @@ -1204,13 +1190,13 @@ PHP_METHOD(HttpRequest, setPostFields) zval *post, *post_data = NULL; getObject(http_request_object, obj); - if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!", &post_data)) { + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/!", &post_data)) { RETURN_FALSE; } MAKE_STD_ZVAL(post); array_init(post); - if (post_data && (Z_TYPE_P(post_data) == IS_ARRAY)) { + if (post_data && zend_hash_num_elements(Z_ARRVAL_P(post_data))) { array_copy(post_data, post); } SET_PROP(obj, postFields, post); @@ -1290,13 +1276,18 @@ PHP_METHOD(HttpRequest, addRawPostData) } if (data_len) { - zval *zdata = GET_PROP(obj, rawPostData); + zval *data, *zdata = GET_PROP(obj, rawPostData); - SEPARATE_ZVAL(&zdata); - Z_STRVAL_P(zdata) = erealloc(Z_STRVAL_P(zdata), (Z_STRLEN_P(zdata) += data_len) + 1); - Z_STRVAL_P(zdata)[Z_STRLEN_P(zdata)] = '\0'; - memcpy(Z_STRVAL_P(zdata) + Z_STRLEN_P(zdata) - data_len, raw_data, data_len); - SET_PROP(obj, rawPostData, zdata); + ALLOC_ZVAL(data); + *data = *zdata; + zval_copy_ctor(data); + INIT_PZVAL(data); + convert_to_string(data); + Z_STRVAL_P(data) = erealloc(Z_STRVAL_P(data), (Z_STRLEN_P(data) += data_len) + 1); + Z_STRVAL_P(data)[Z_STRLEN_P(data)] = '\0'; + memcpy(Z_STRVAL_P(data) + Z_STRLEN_P(data) - data_len, raw_data, data_len); + SET_PROP(obj, rawPostData, data); + zval_ptr_dtor(&data); } RETURN_TRUE; @@ -1368,6 +1359,7 @@ PHP_METHOD(HttpRequest, addPostFile) } add_next_index_zval(new_post, entry); SET_PROP(obj, postFiles, new_post); + zval_ptr_dtor(&new_post); RETURN_TRUE; } @@ -1386,23 +1378,16 @@ PHP_METHOD(HttpRequest, addPostFile) */ PHP_METHOD(HttpRequest, setPostFiles) { - zval *files, *post; + zval *files = NULL, *post; getObject(http_request_object, obj); - if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/", &files)) { + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!/", &files)) { RETURN_FALSE; } - post = GET_PROP(obj, postFiles); - if (Z_TYPE_P(post) == IS_NULL) { - MAKE_STD_ZVAL(post); - array_init(post); - } else { - SEPARATE_ZVAL(&post); - } - - zend_hash_clean(Z_ARRVAL_P(post)); - if (files && zend_hash_num_elements(Z_ARRVAL_P(files))) { + MAKE_STD_ZVAL(post); + array_init(post); + if (files && (Z_TYPE_P(files) == IS_ARRAY)) { array_copy(files, post); } SET_PROP(obj, postFiles, post);