X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=f741e65754ea7bdeebe2976d9c9861ff985444c9;hp=310743981e8e523ef44def9087bb78d584e10f2e;hb=edc84b40eb2c5be04492fa98fec5833a030782eb;hpb=160400377eb70b98b216cd91aadf9243338d3fd5 diff --git a/http_message_object.c b/http_message_object.c index 3107439..f741e65 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -16,19 +16,16 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#include "php.h" + +#include "php_http.h" #ifdef ZEND_ENGINE_2 -#include "php_http.h" #include "php_http_api.h" -#include "php_http_std_defs.h" +#include "php_http_message_api.h" #include "php_http_message_object.h" #include "php_http_exception_object.h" -#include "phpstr/phpstr.h" -#include "missing.h" - #ifndef WONKY # include "zend_interfaces.h" # if defined(HAVE_SPL) @@ -361,6 +358,7 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va { getObjectEx(http_message_object, obj, object); http_message *msg = obj->message; + zval *cpy = NULL; #ifdef WONKY ulong h = zend_get_hash_value(Z_STRVAL_P(member), Z_STRLEN_P(member) + 1); #else @@ -371,7 +369,12 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va return; } #endif - + + ALLOC_ZVAL(cpy); + *cpy = *value; + zval_copy_ctor(cpy); + INIT_PZVAL(cpy); + #ifdef WONKY switch (h) #else @@ -380,28 +383,28 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va { case HTTP_MSG_PROPHASH_TYPE: case HTTP_MSG_CHILD_PROPHASH_TYPE: - convert_to_long_ex(&value); - http_message_set_type(msg, Z_LVAL_P(value)); + convert_to_long(cpy); + http_message_set_type(msg, Z_LVAL_P(cpy)); break; case HTTP_MSG_PROPHASH_HTTP_VERSION: case HTTP_MSG_CHILD_PROPHASH_HTTP_VERSION: - convert_to_double_ex(&value); - msg->http.version = Z_DVAL_P(value); + convert_to_double(cpy); + msg->http.version = Z_DVAL_P(cpy); break; case HTTP_MSG_PROPHASH_BODY: case HTTP_MSG_CHILD_PROPHASH_BODY: - convert_to_string_ex(&value); + convert_to_string(cpy); phpstr_dtor(PHPSTR(msg)); - phpstr_from_string_ex(PHPSTR(msg), Z_STRVAL_P(value), Z_STRLEN_P(value)); + phpstr_from_string_ex(PHPSTR(msg), Z_STRVAL_P(cpy), Z_STRLEN_P(cpy)); break; case HTTP_MSG_PROPHASH_HEADERS: case HTTP_MSG_CHILD_PROPHASH_HEADERS: - convert_to_array_ex(&value); + convert_to_array(cpy); zend_hash_clean(&msg->hdrs); - zend_hash_copy(&msg->hdrs, Z_ARRVAL_P(value), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); + zend_hash_copy(&msg->hdrs, Z_ARRVAL_P(cpy), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); break; case HTTP_MSG_PROPHASH_PARENT_MESSAGE: @@ -420,32 +423,32 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va case HTTP_MSG_PROPHASH_REQUEST_METHOD: case HTTP_MSG_CHILD_PROPHASH_REQUEST_METHOD: if (HTTP_MSG_TYPE(REQUEST, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.request.method, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.request.method, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; case HTTP_MSG_PROPHASH_REQUEST_URI: case HTTP_MSG_CHILD_PROPHASH_REQUEST_URI: if (HTTP_MSG_TYPE(REQUEST, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.request.URI, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.request.URI, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; case HTTP_MSG_PROPHASH_RESPONSE_CODE: case HTTP_MSG_CHILD_PROPHASH_RESPONSE_CODE: if (HTTP_MSG_TYPE(RESPONSE, msg)) { - convert_to_long_ex(&value); - msg->http.info.response.code = Z_LVAL_P(value); + convert_to_long(cpy); + msg->http.info.response.code = Z_LVAL_P(cpy); } break; case HTTP_MSG_PROPHASH_RESPONSE_STATUS: case HTTP_MSG_CHILD_PROPHASH_RESPONSE_STATUS: if (HTTP_MSG_TYPE(RESPONSE, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.response.status, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.response.status, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; @@ -455,6 +458,7 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va #endif break; } + zval_ptr_dtor(&cpy); } static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC) @@ -547,7 +551,7 @@ PHP_METHOD(HttpMessage, __construct) http_message *msg = obj->message; http_message_dtor(msg); - if (obj->message = http_message_parse_ex(msg, message, length)) { + if ((obj->message = http_message_parse_ex(msg, message, length))) { if (obj->message->parent) { obj->parent = http_message_object_new_ex(Z_OBJCE_P(getThis()), obj->message->parent, NULL); } @@ -583,7 +587,7 @@ PHP_METHOD(HttpMessage, fromString) SET_EH_THROW_HTTP(); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &string, &length)) { - if (msg = http_message_parse(string, length)) { + if ((msg = http_message_parse(string, length))) { ZVAL_OBJVAL(return_value, http_message_object_new_ex(http_message_object_ce, msg, NULL)); } }