X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_message_body.c;h=4a3174a62a785c649d563ad7281874435d97e88f;hp=500448936c7d2a9c3078a18df3e0ce9ce887122b;hb=95c6c900d04096d332c422e3f597186b7184c5ab;hpb=b2773ab559878238bd024c4bbebe5825cc38ad85 diff --git a/php_http_message_body.c b/php_http_message_body.c index 5004489..4a3174a 100644 --- a/php_http_message_body.c +++ b/php_http_message_body.c @@ -45,14 +45,13 @@ php_http_message_body_t *php_http_message_body_init(php_http_message_body_t **bo body->refcount = 1; if (stream) { - php_stream_auto_cleanup(stream); body->res = stream->res; ++GC_REFCOUNT(body->res); } else { stream = php_stream_temp_create(TEMP_STREAM_DEFAULT, 0xffff); - php_stream_auto_cleanup(stream); body->res = stream->res; } + php_stream_auto_cleanup(stream); if (body_ptr) { *body_ptr = body; @@ -114,7 +113,7 @@ const char *php_http_message_body_boundary(php_http_message_body_t *body) if (!body->boundary) { union { double dbl; int num[2]; } data; - data.dbl = php_combined_lcg(TSRMLS_C); + data.dbl = php_combined_lcg(); spprintf(&body->boundary, 0, "%x.%x", data.num[0], data.num[1]); } return body->boundary; @@ -122,24 +121,28 @@ const char *php_http_message_body_boundary(php_http_message_body_t *body) char *php_http_message_body_etag(php_http_message_body_t *body) { - const php_stream_statbuf *ssb = php_http_message_body_stat(body); + php_http_etag_t *etag; + php_stream *s = php_http_message_body_stream(body); /* real file or temp buffer ? */ - if (ssb->sb.st_mtime) { - char *etag; + if (s->ops != &php_stream_temp_ops && s->ops != &php_stream_memory_ops) { + php_stream_stat(php_http_message_body_stream(body), &body->ssb); - spprintf(&etag, 0, "%lx-%lx-%lx", ssb->sb.st_ino, ssb->sb.st_mtime, ssb->sb.st_size); - return etag; - } else { - php_http_etag_t *etag = php_http_etag_init(PHP_HTTP_G->env.etag_mode); + if (body->ssb.sb.st_mtime) { + char *etag; - if (etag) { - php_http_message_body_to_callback(body, (php_http_pass_callback_t) php_http_etag_update, etag, 0, 0); - return php_http_etag_finish(etag); - } else { - return NULL; + spprintf(&etag, 0, "%lx-%lx-%lx", body->ssb.sb.st_ino, body->ssb.sb.st_mtime, body->ssb.sb.st_size); + return etag; } } + + /* content based */ + if ((etag = php_http_etag_init(PHP_HTTP_G->env.etag_mode))) { + php_http_message_body_to_callback(body, (php_http_pass_callback_t) php_http_etag_update, etag, 0, 0); + return php_http_etag_finish(etag); + } + + return NULL; } zend_string *php_http_message_body_to_string(php_http_message_body_t *body, off_t offset, size_t forlen) @@ -213,7 +216,7 @@ size_t php_http_message_body_append(php_http_message_body_t *body, const char *b written = php_stream_write(s, buf, len); if (written != len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to append %zu bytes to body; wrote %zu", len, written); + php_error_docref(NULL, E_WARNING, "Failed to append %zu bytes to body; wrote %zu", len, written); } return len; @@ -555,7 +558,7 @@ php_http_message_body_object_t *php_http_message_body_object_new_ex(zend_class_e { php_http_message_body_object_t *o; - o = ecalloc(1, sizeof(php_http_message_body_object_t) + (ce->default_properties_count - 1) * sizeof(zval)); + o = ecalloc(1, sizeof(*o) + zend_object_properties_size(ce)); zend_object_std_init(&o->zo, php_http_message_body_class_entry); object_properties_init(&o->zo, ce); @@ -585,7 +588,7 @@ void php_http_message_body_object_free(zend_object *object) php_http_message_body_object_t *obj = PHP_HTTP_OBJ(object, NULL); php_http_message_body_free(&obj->body); - zend_object_std_dtor(object TSRMLS_CC); + zend_object_std_dtor(object); } #define PHP_HTTP_MESSAGE_BODY_OBJECT_INIT(obj) \ @@ -814,7 +817,7 @@ PHP_METHOD(HttpMessageBody, stat) char *field_str = NULL; size_t field_len = 0; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &field_str, &field_len)) { + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &field_str, &field_len)) { php_http_message_body_object_t *obj = PHP_HTTP_OBJ(NULL, getThis()); const php_stream_statbuf *sb;