Mercurial > hg > nginx-vendor-1-0
comparison src/os/unix/ngx_files.c @ 582:c456a023113c NGINX_0_8_43
nginx 0.8.43
*) Feature: large geo ranges base loading speed-up.
*) Bugfix: an error_page redirection to "location /zero { return 204;
}" without changing status code kept the error body; the bug had
appeared in 0.8.42.
*) Bugfix: nginx might close IPv6 listen socket during
reconfiguration.
Thanks to Maxim Dounin.
*) Bugfix: the $uid_set variable may be used at any request processing
stage.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 30 Jun 2010 00:00:00 +0400 |
parents | e19e5f542878 |
children | bb20316269e4 |
comparison
equal
deleted
inserted
replaced
581:22b2345b75d9 | 582:c456a023113c |
---|---|
74 written = 0; | 74 written = 0; |
75 | 75 |
76 #if (NGX_HAVE_PWRITE) | 76 #if (NGX_HAVE_PWRITE) |
77 | 77 |
78 for ( ;; ) { | 78 for ( ;; ) { |
79 n = pwrite(file->fd, buf, size, offset); | 79 n = pwrite(file->fd, buf + written, size, offset); |
80 | 80 |
81 if (n == -1) { | 81 if (n == -1) { |
82 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, | 82 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, |
83 "pwrite() \"%s\" failed", file->name.data); | 83 "pwrite() \"%s\" failed", file->name.data); |
84 return NGX_ERROR; | 84 return NGX_ERROR; |
106 | 106 |
107 file->sys_offset = offset; | 107 file->sys_offset = offset; |
108 } | 108 } |
109 | 109 |
110 for ( ;; ) { | 110 for ( ;; ) { |
111 n = write(file->fd, buf, size); | 111 n = write(file->fd, buf + written, size); |
112 | 112 |
113 if (n == -1) { | 113 if (n == -1) { |
114 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, | 114 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, |
115 "write() \"%s\" failed", file->name.data); | 115 "write() \"%s\" failed", file->name.data); |
116 return NGX_ERROR; | 116 return NGX_ERROR; |
257 return NGX_ERROR; | 257 return NGX_ERROR; |
258 } | 258 } |
259 | 259 |
260 | 260 |
261 ngx_int_t | 261 ngx_int_t |
262 ngx_create_file_mapping(ngx_file_mapping_t *fm) | |
263 { | |
264 fm->fd = ngx_open_file(fm->name, NGX_FILE_RDWR, NGX_FILE_TRUNCATE, | |
265 NGX_FILE_DEFAULT_ACCESS); | |
266 if (fm->fd == NGX_INVALID_FILE) { | |
267 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
268 ngx_open_file_n " \"%s\" failed", fm->name); | |
269 return NGX_ERROR; | |
270 } | |
271 | |
272 if (ftruncate(fm->fd, fm->size) == -1) { | |
273 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
274 "ftruncate() \"%s\" failed", fm->name); | |
275 goto failed; | |
276 } | |
277 | |
278 fm->addr = mmap(NULL, fm->size, PROT_READ|PROT_WRITE, MAP_SHARED, | |
279 fm->fd, 0); | |
280 if (fm->addr != MAP_FAILED) { | |
281 return NGX_OK; | |
282 } | |
283 | |
284 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
285 "mmap(%uz) \"%s\" failed", fm->size, fm->name); | |
286 | |
287 failed: | |
288 | |
289 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) { | |
290 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
291 ngx_close_file_n " \"%s\" failed", fm->name); | |
292 } | |
293 | |
294 return NGX_ERROR; | |
295 } | |
296 | |
297 | |
298 void | |
299 ngx_close_file_mapping(ngx_file_mapping_t *fm) | |
300 { | |
301 if (munmap(fm->addr, fm->size) == -1) { | |
302 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
303 "munmap(%uz) \"%s\" failed", fm->size, fm->name); | |
304 } | |
305 | |
306 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) { | |
307 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
308 ngx_close_file_n " \"%s\" failed", fm->name); | |
309 } | |
310 } | |
311 | |
312 | |
313 ngx_int_t | |
262 ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir) | 314 ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir) |
263 { | 315 { |
264 dir->dir = opendir((const char *) name->data); | 316 dir->dir = opendir((const char *) name->data); |
265 | 317 |
266 if (dir->dir == NULL) { | 318 if (dir->dir == NULL) { |