Mercurial > hg > nginx-ranges
comparison src/os/unix/ngx_files.c @ 635:e67b227c8dbb default tip
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:07:55 +0400 |
parents | bb20316269e4 |
children |
comparison
equal
deleted
inserted
replaced
578:f3a9e57d2e17 | 635:e67b227c8dbb |
---|---|
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; |
243 ngx_int_t | 243 ngx_int_t |
244 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) | 244 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) |
245 { | 245 { |
246 struct timeval tv[2]; | 246 struct timeval tv[2]; |
247 | 247 |
248 tv[0].tv_sec = s; | 248 tv[0].tv_sec = ngx_time(); |
249 tv[0].tv_usec = 0; | 249 tv[0].tv_usec = 0; |
250 tv[1].tv_sec = s; | 250 tv[1].tv_sec = s; |
251 tv[1].tv_usec = 0; | 251 tv[1].tv_usec = 0; |
252 | 252 |
253 if (utimes((char *) name, tv) != -1) { | 253 if (utimes((char *) name, tv) != -1) { |
254 return NGX_OK; | 254 return NGX_OK; |
255 } | 255 } |
256 | 256 |
257 return NGX_ERROR; | 257 return NGX_ERROR; |
258 } | |
259 | |
260 | |
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 } | |
258 } | 310 } |
259 | 311 |
260 | 312 |
261 ngx_int_t | 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) |