Mercurial > hg > nginx
comparison src/core/ngx_file.c @ 1695:8c4532a48b0a
ngx_create_path_and_rename_file()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 07 Dec 2007 20:22:03 +0000 |
parents | e958b3cab51a |
children | e584e946e198 |
comparison
equal
deleted
inserted
replaced
1694:8c696afe46b3 | 1695:8c4532a48b0a |
---|---|
481 return NGX_OK; | 481 return NGX_OK; |
482 } | 482 } |
483 | 483 |
484 | 484 |
485 ngx_int_t | 485 ngx_int_t |
486 ngx_create_path_and_rename_file(ngx_str_t *src, ngx_str_t *to, | |
487 ngx_uint_t access, ngx_uint_t full_path, ngx_uint_t delete, ngx_log_t *log) | |
488 { | |
489 ngx_err_t err; | |
490 | |
491 #if !(NGX_WIN32) | |
492 | |
493 if (ngx_change_file_access(src->data, access) == NGX_FILE_ERROR) { | |
494 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, | |
495 ngx_change_file_access_n " \"%s\" failed", src->data); | |
496 err = 0; | |
497 goto failed; | |
498 } | |
499 | |
500 #endif | |
501 | |
502 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { | |
503 return NGX_OK; | |
504 } | |
505 | |
506 err = ngx_errno; | |
507 | |
508 if (err == NGX_ENOENT) { | |
509 | |
510 if (!full_path) { | |
511 goto failed; | |
512 } | |
513 | |
514 err = ngx_create_full_path(to->data, ngx_dir_access(access)); | |
515 | |
516 if (err) { | |
517 ngx_log_error(NGX_LOG_CRIT, log, err, | |
518 ngx_create_dir_n " \"%s\" failed", to->data); | |
519 err = 0; | |
520 goto failed; | |
521 } | |
522 | |
523 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { | |
524 return NGX_OK; | |
525 } | |
526 | |
527 err = ngx_errno; | |
528 goto failed; | |
529 } | |
530 | |
531 #if (NGX_WIN32) | |
532 | |
533 if (err == NGX_EEXIST) { | |
534 if (ngx_win32_rename_file(src, to, log) == NGX_OK) { | |
535 | |
536 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { | |
537 return NGX_OK; | |
538 } | |
539 | |
540 err = ngx_errno; | |
541 | |
542 } else { | |
543 err = 0; | |
544 } | |
545 } | |
546 | |
547 #endif | |
548 | |
549 failed: | |
550 | |
551 if (delete) { | |
552 if (ngx_delete_file(src->data) == NGX_FILE_ERROR) { | |
553 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, | |
554 ngx_delete_file_n " \"%s\" failed", src->data); | |
555 } | |
556 } | |
557 | |
558 if (err) { | |
559 ngx_log_error(NGX_LOG_CRIT, log, err, | |
560 ngx_rename_file_n " \"%s\" to \"%s\" failed", | |
561 src->data, to->data); | |
562 } | |
563 | |
564 return NGX_ERROR; | |
565 } | |
566 | |
567 | |
568 ngx_int_t | |
486 ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree) | 569 ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree) |
487 { | 570 { |
488 void *data, *prev; | 571 void *data, *prev; |
489 u_char *p, *name; | 572 u_char *p, *name; |
490 size_t len; | 573 size_t len; |