PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_state_push(php_http_message_parser_t *parser, unsigned argc, ...)
{
PHP_HTTP_API php_http_message_parser_state_t php_http_message_parser_state_push(php_http_message_parser_t *parser, unsigned argc, ...)
{
for (i = 0; i < argc; ++i) {
state = va_arg(va_args, php_http_message_parser_state_t);
zend_stack_push(&parser->stack, &state, sizeof(state));
for (i = 0; i < argc; ++i) {
state = va_arg(va_args, php_http_message_parser_state_t);
zend_stack_push(&parser->stack, &state, sizeof(state));
- php_stream_get_line(s, buf.data, buf.free, &len);
- buf.used += len;
- buf.free -= len;
+ php_stream_get_line(s, buf.data + buf.used, buf.free, &len);
+ php_http_buffer_account(&buf, len);
- len = php_stream_read(s, buf.data, buf.free);
- buf.used += len;
- buf.free -= len;
+ php_http_buffer_account(&buf, php_stream_read(s, buf.data + buf.used, buf.free));
- len = php_stream_read(s, buf.data, MIN(buf.free, parser->body_length));
- buf.used += len;
- buf.free -= len;
+ php_http_buffer_account(&buf, php_stream_read(s, buf.data + buf.used, MIN(buf.free, parser->body_length)));
break;
case PHP_HTTP_MESSAGE_PARSER_STATE_BODY_CHUNKED:
/* duh, this is very naive */
if (len) {
break;
case PHP_HTTP_MESSAGE_PARSER_STATE_BODY_CHUNKED:
/* duh, this is very naive */
if (len) {
- size_t read = php_stream_read(s, buf.data, MIN(len, buf.free));
+ size_t read = php_stream_read(s, buf.data + buf.used, MIN(len, buf.free));
len -= read;
} else {
php_stream_get_line(s, buf.data, buf.free, &len);
len -= read;
} else {
php_stream_get_line(s, buf.data, buf.free, &len);