Mercurial > hg > nginx
comparison src/os/unix/ngx_files.c @ 4220:4be8dd8dd547
Fixed unix ngx_write_chain_to_file() to return total bytes written.
Previously result of last iteration's writev() was returned. This was
unnoticed as return value was only used if chain contained only one or
two buffers.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 20 Oct 2011 12:40:26 +0000 |
parents | cf80c0b0109a |
children | 3203ddb78279 |
comparison
equal
deleted
inserted
replaced
4219:691133126226 | 4220:4be8dd8dd547 |
---|---|
151 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset, | 151 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset, |
152 ngx_pool_t *pool) | 152 ngx_pool_t *pool) |
153 { | 153 { |
154 u_char *prev; | 154 u_char *prev; |
155 size_t size; | 155 size_t size; |
156 ssize_t n; | 156 ssize_t total, n; |
157 ngx_array_t vec; | 157 ngx_array_t vec; |
158 struct iovec *iov, iovs[NGX_IOVS]; | 158 struct iovec *iov, iovs[NGX_IOVS]; |
159 | 159 |
160 /* use pwrite() if there is the only buf in a chain */ | 160 /* use pwrite() if there is the only buf in a chain */ |
161 | 161 |
162 if (cl->next == NULL) { | 162 if (cl->next == NULL) { |
163 return ngx_write_file(file, cl->buf->pos, | 163 return ngx_write_file(file, cl->buf->pos, |
164 (size_t) (cl->buf->last - cl->buf->pos), | 164 (size_t) (cl->buf->last - cl->buf->pos), |
165 offset); | 165 offset); |
166 } | 166 } |
167 | |
168 total = 0; | |
167 | 169 |
168 vec.elts = iovs; | 170 vec.elts = iovs; |
169 vec.size = sizeof(struct iovec); | 171 vec.size = sizeof(struct iovec); |
170 vec.nalloc = NGX_IOVS; | 172 vec.nalloc = NGX_IOVS; |
171 vec.pool = pool; | 173 vec.pool = pool; |
231 return NGX_ERROR; | 233 return NGX_ERROR; |
232 } | 234 } |
233 | 235 |
234 file->sys_offset += n; | 236 file->sys_offset += n; |
235 file->offset += n; | 237 file->offset += n; |
238 total += n; | |
236 | 239 |
237 } while (cl); | 240 } while (cl); |
238 | 241 |
239 return n; | 242 return total; |
240 } | 243 } |
241 | 244 |
242 | 245 |
243 ngx_int_t | 246 ngx_int_t |
244 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) | 247 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) |