X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=aa63cab0b47fc8b98c325a6371a313606912954d;hp=c9505f6cb0f5a348bbc094eec378e09ad24f85b2;hb=6e9ea0a647db55213dd230145c35a419d7abde4d;hpb=2b37ee95b452cff42c17bf3d12d0ee1ebd08ba84 diff --git a/http_message_object.c b/http_message_object.c index c9505f6..aa63cab 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -16,27 +16,23 @@ #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) +/* SPL doesn't install its headers */ +extern PHPAPI zend_class_entry *spl_ce_Countable; +# endif #endif -#ifdef HAVE_SPL -# include "ext/spl/spl_array.h" -#endif - -ZEND_EXTERN_MODULE_GLOBALS(http); #define HTTP_BEGIN_ARGS(method, ret_ref, req_args) HTTP_BEGIN_ARGS_EX(HttpMessage, method, ret_ref, req_args) #define HTTP_EMPTY_ARGS(method, ret_ref) HTTP_EMPTY_ARGS_EX(HttpMessage, method, ret_ref) @@ -158,10 +154,6 @@ PHP_MINIT_FUNCTION(http_message_object) # else zend_class_implements(http_message_object_ce TSRMLS_CC, 1, zend_ce_serializable); # endif -#else -# ifdef HAVE_SPL - zend_class_implements(http_message_object_ce TSRMLS_CC, 1, spl_ce_Countable); -# endif #endif HTTP_LONG_CONSTANT("HTTP_MSG_NONE", HTTP_MSG_NONE); @@ -364,6 +356,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 @@ -374,7 +367,9 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va return; } #endif - + + cpy = zval_copy(Z_TYPE_P(value), value); + #ifdef WONKY switch (h) #else @@ -383,28 +378,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: @@ -423,32 +418,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; @@ -458,6 +453,7 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va #endif break; } + zval_free(&cpy); } static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC) @@ -475,7 +471,7 @@ static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC) char *m_prop_name; \ int m_prop_len; \ zend_mangle_property_name(&m_prop_name, &m_prop_len, "*", 1, name, lenof(name), 0); \ - add_assoc_ ##ptype## _ex(&array, m_prop_name, sizeof(name)+4, val); \ + add_assoc_ ##ptype## _ex(&array, m_prop_name, sizeof(name)+3, val); \ efree(m_prop_name); \ } #define ASSOC_STRING(array, name, val) ASSOC_STRINGL(array, name, val, strlen(val)) @@ -484,7 +480,7 @@ static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC) char *m_prop_name; \ int m_prop_len; \ zend_mangle_property_name(&m_prop_name, &m_prop_len, "*", 1, name, lenof(name), 0); \ - add_assoc_stringl_ex(&array, m_prop_name, sizeof(name)+4, val, len, 1); \ + add_assoc_stringl_ex(&array, m_prop_name, sizeof(name)+3, val, len, 1); \ efree(m_prop_name); \ } @@ -550,7 +546,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); } @@ -586,7 +582,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)); } }