X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_response_object.c;h=68de2a43fde6a82cc9800fe3804e013a23761e25;hp=423b7b7054f8081c4c661146790093917e455faf;hb=07af5d267afdfdaa2b7e9c29174364bf313634ef;hpb=a673ef718611fe1a7c8a4c61b2f4c97fc06efc2d diff --git a/http_response_object.c b/http_response_object.c index 423b7b7..68de2a4 100644 --- a/http_response_object.c +++ b/http_response_object.c @@ -42,6 +42,7 @@ ZEND_EXTERN_MODULE_GLOBALS(http); #define GET_STATIC_PROP(n) *GET_STATIC_PROP_EX(http_response_object_ce, n) #define UPD_STATIC_PROP(t, n, v) UPD_STATIC_PROP_EX(http_response_object_ce, t, n, v) #define SET_STATIC_PROP(n, v) SET_STATIC_PROP_EX(http_response_object_ce, n, v) +#define UPD_STATIC_STRL(n, v, l) UPD_STATIC_STRL_EX(http_response_object_ce, n, v, l) #define HTTP_BEGIN_ARGS(method, req_args) HTTP_BEGIN_ARGS_EX(HttpResponse, method, 0, req_args) #define HTTP_EMPTY_ARGS(method, ret_ref) HTTP_EMPTY_ARGS_EX(HttpResponse, method, ret_ref) @@ -200,7 +201,7 @@ zend_function_entry http_response_object_fe[] = { HTTP_RESPONSE_ALIAS(getRequestHeaders, http_get_request_headers) HTTP_RESPONSE_ALIAS(getRequestBody, http_get_request_body) - {NULL, NULL, NULL} + EMPTY_FUNCTION_ENTRY }; void _http_response_object_init(INIT_FUNC_ARGS) @@ -388,8 +389,8 @@ PHP_METHOD(HttpResponse, setCacheControl) http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Cache-Control '%s' doesn't match public, private or no-cache", ccontrol); RETURN_FALSE; } else { - spprintf(&cctl, 0, "%s, must-revalidate, max_age=%ld", ccontrol, max_age); - RETVAL_SUCCESS(UPD_STATIC_PROP(string, cacheControl, cctl)); + size_t cctl_len = spprintf(&cctl, 0, "%s, must-revalidate, max_age=%ld", ccontrol, max_age); + RETVAL_SUCCESS(UPD_STATIC_STRL(cacheControl, cctl, cctl_len)); efree(cctl); } } @@ -428,7 +429,7 @@ PHP_METHOD(HttpResponse, setContentType) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(string, contentType, ctype)); + RETURN_SUCCESS(UPD_STATIC_STRL(contentType, ctype, ctype_len)); } /* }}} */ @@ -503,14 +504,15 @@ PHP_METHOD(HttpResponse, setContentDisposition) { char *file, *cd; int file_len; + size_t cd_len; zend_bool send_inline = 0; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &file, &file_len, &send_inline)) { RETURN_FALSE; } - spprintf(&cd, 0, "%s; filename=\"%s\"", send_inline ? "inline" : "attachment", file); - RETVAL_SUCCESS(UPD_STATIC_PROP(string, contentDisposition, cd)); + cd_len = spprintf(&cd, 0, "%s; filename=\"%s\"", send_inline ? "inline" : "attachment", file); + RETVAL_SUCCESS(UPD_STATIC_STRL(contentDisposition, cd, cd_len)); efree(cd); } /* }}} */ @@ -543,7 +545,7 @@ PHP_METHOD(HttpResponse, setETag) RETURN_FALSE; } - RETURN_SUCCESS(UPD_STATIC_PROP(string, eTag, etag)); + RETURN_SUCCESS(UPD_STATIC_STRL(eTag, etag, etag_len)); } /* }}} */ @@ -707,9 +709,8 @@ PHP_METHOD(HttpResponse, setStream) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) { RETURN_FALSE; } - zend_list_addref(Z_LVAL_P(the_stream)); - php_stream_from_zval(the_real_stream, &the_stream); + php_stream_from_zval(the_real_stream, &the_stream); if (php_stream_stat(the_real_stream, &ssb)) { RETURN_FALSE; } @@ -718,7 +719,8 @@ PHP_METHOD(HttpResponse, setStream) (SUCCESS != UPD_STATIC_PROP(long, mode, SEND_RSRC))) { RETURN_FALSE; } - + zend_list_addref(Z_LVAL_P(the_stream)); + if (!(Z_LVAL_P(GET_STATIC_PROP(lastModified)) > 0)) { UPD_STATIC_PROP(long, lastModified, http_last_modified(the_real_stream, SEND_RSRC)); } @@ -764,7 +766,7 @@ PHP_METHOD(HttpResponse, setFile) RETURN_FALSE; } - if ( (SUCCESS != UPD_STATIC_PROP(string, file, the_file)) || + if ( (SUCCESS != UPD_STATIC_STRL(file, the_file, file_len)) || (SUCCESS != UPD_STATIC_PROP(long, mode, -1))) { RETURN_FALSE; }