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)