comparison src/http/modules/ngx_http_chunked_filter.c @ 22:8b6db3bda591 NGINX_0_1_11

nginx 0.1.11 *) Feature: the worker_priority directive. *) Change: both tcp_nopush and tcp_nodelay directives affect the transferred response. *) Bugfix: nginx did not call initgroups(). Thanks to Andrew Sitnikov and Andrei Nigmatulin. *) Change: now the ngx_http_autoindex_module shows the file size in the bytes. *) Bugfix: the ngx_http_autoindex_module returned the 500 error if the broken symlink was in a directory. *) Bugfix: the files bigger than 4G could not be transferred using sendfile. *) Bugfix: if the backend was resolved to several backends and there was an error while the response waiting then process may got caught in an endless loop. *) Bugfix: the worker process may exit with the "unknown cycle" message when the /dev/poll method was used. *) Bugfix: "close() channel failed" errors. *) Bugfix: the autodetection of the "nobody" and "nogroup" groups. *) Bugfix: the send_lowat directive did not work on Linux. *) Bugfix: the segmentation fault occurred if there was no events section in configuration. *) Bugfix: nginx could not be built on OpenBSD. *) Bugfix: the double slashes in "://" in the URI were converted to ":/".
author Igor Sysoev <http://sysoev.ru>
date Thu, 02 Dec 2004 00:00:00 +0300
parents 46833bd150cb
children da8c190bdaba
comparison
equal deleted inserted replaced
21:4eeb9cfef970 22:8b6db3bda591
61 61
62 static ngx_int_t ngx_http_chunked_body_filter(ngx_http_request_t *r, 62 static ngx_int_t ngx_http_chunked_body_filter(ngx_http_request_t *r,
63 ngx_chain_t *in) 63 ngx_chain_t *in)
64 { 64 {
65 u_char *chunk; 65 u_char *chunk;
66 size_t size; 66 off_t size;
67 ngx_buf_t *b; 67 ngx_buf_t *b;
68 ngx_chain_t out, tail, *cl, *tl, **ll; 68 ngx_chain_t out, tail, *cl, *tl, **ll;
69 69
70 if (in == NULL || !r->chunked) { 70 if (in == NULL || !r->chunked) {
71 return ngx_http_next_body_filter(r, in); 71 return ngx_http_next_body_filter(r, in);
104 if (size) { 104 if (size) {
105 if (!(b = ngx_calloc_buf(r->pool))) { 105 if (!(b = ngx_calloc_buf(r->pool))) {
106 return NGX_ERROR; 106 return NGX_ERROR;
107 } 107 }
108 108
109 if (!(chunk = ngx_palloc(r->pool, sizeof("00000000" CRLF) - 1))) { 109 chunk = ngx_palloc(r->pool, sizeof("0000000000000000" CRLF) - 1);
110 if (chunk == NULL) {
110 return NGX_ERROR; 111 return NGX_ERROR;
111 } 112 }
112 113
113 b->temporary = 1; 114 b->temporary = 1;
114 b->pos = chunk; 115 b->pos = chunk;
115 b->last = ngx_sprintf(chunk, "%xz" CRLF, size); 116 b->last = ngx_sprintf(chunk, "%xO" CRLF, size);
116 117
117 out.buf = b; 118 out.buf = b;
118 } 119 }
119 120
120 if (cl->buf->last_buf) { 121 if (cl->buf->last_buf) {