comparison src/core/ngx_file.c @ 362:54fad6c4b555 NGINX_0_6_25

nginx 0.6.25 *) Change: now the "server_name_in_redirect" directive is used instead of the "server_name" directive's special "*" parameter. *) Change: now wildcard and regex names can be used as main name in a "server_name" directive. *) Change: the "satisfy_any" directive was replaced by the "satisfy" directive. *) Workaround: old worker processes might hog CPU after reconfiguration if they was run under Linux OpenVZ. *) Feature: the "min_delete_depth" directive. *) Bugfix: the COPY and MOVE methods did not work with single files. *) Bugfix: the ngx_http_gzip_static_module did not allow the ngx_http_dav_module to work; bug appeared in 0.6.23. *) Bugfix: socket leak in HTTPS mode if deferred accept was used. Thanks to Ben Maurer. *) Bugfix: nginx could not be built without PCRE library; bug appeared in 0.6.23.
author Igor Sysoev <http://sysoev.ru>
date Tue, 08 Jan 2008 00:00:00 +0300
parents b743d290eb3b
children babd3d9efb62
comparison
equal deleted inserted replaced
361:160660bad929 362:54fad6c4b555
479 return NGX_OK; 479 return NGX_OK;
480 } 480 }
481 481
482 482
483 ngx_int_t 483 ngx_int_t
484 ngx_create_path_and_rename_file(ngx_str_t *src, ngx_str_t *to, 484 ngx_ext_rename_file(ngx_str_t *src, ngx_str_t *to, ngx_ext_rename_file_t *ext)
485 ngx_uint_t access, ngx_uint_t full_path, ngx_uint_t delete, ngx_log_t *log)
486 { 485 {
487 ngx_err_t err; 486 ngx_err_t err;
488 487
489 #if !(NGX_WIN32) 488 #if !(NGX_WIN32)
490 489
491 if (ngx_change_file_access(src->data, access) == NGX_FILE_ERROR) { 490 if (ngx_change_file_access(src->data, ext->access) == NGX_FILE_ERROR) {
492 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, 491 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
493 ngx_change_file_access_n " \"%s\" failed", src->data); 492 ngx_change_file_access_n " \"%s\" failed", src->data);
494 err = 0; 493 err = 0;
495 goto failed; 494 goto failed;
496 } 495 }
497 496
498 #endif 497 #endif
499 498
499 if (ext->time != -1) {
500 if (ngx_set_file_time(src->data, ext->fd, ext->time) != NGX_OK) {
501 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
502 ngx_set_file_time_n " \"%s\" failed", src->data);
503 err = 0;
504 goto failed;
505 }
506 }
507
500 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { 508 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) {
501 return NGX_OK; 509 return NGX_OK;
502 } 510 }
503 511
504 err = ngx_errno; 512 err = ngx_errno;
505 513
506 if (err == NGX_ENOENT) { 514 if (err == NGX_ENOENT) {
507 515
508 if (!full_path) { 516 if (!ext->create_path) {
509 goto failed; 517 goto failed;
510 } 518 }
511 519
512 err = ngx_create_full_path(to->data, ngx_dir_access(access)); 520 err = ngx_create_full_path(to->data, ngx_dir_access(ext->access));
513 521
514 if (err) { 522 if (err) {
515 ngx_log_error(NGX_LOG_CRIT, log, err, 523 ngx_log_error(NGX_LOG_CRIT, ext->log, err,
516 ngx_create_dir_n " \"%s\" failed", to->data); 524 ngx_create_dir_n " \"%s\" failed", to->data);
517 err = 0; 525 err = 0;
518 goto failed; 526 goto failed;
519 } 527 }
520 528
527 } 535 }
528 536
529 #if (NGX_WIN32) 537 #if (NGX_WIN32)
530 538
531 if (err == NGX_EEXIST) { 539 if (err == NGX_EEXIST) {
532 if (ngx_win32_rename_file(src, to, log) == NGX_OK) { 540 if (ngx_win32_rename_file(src, to, ext->log) == NGX_OK) {
533 541
534 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { 542 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) {
535 return NGX_OK; 543 return NGX_OK;
536 } 544 }
537 545
544 552
545 #endif 553 #endif
546 554
547 failed: 555 failed:
548 556
549 if (delete) { 557 if (ext->delete) {
550 if (ngx_delete_file(src->data) == NGX_FILE_ERROR) { 558 if (ngx_delete_file(src->data) == NGX_FILE_ERROR) {
551 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, 559 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
552 ngx_delete_file_n " \"%s\" failed", src->data); 560 ngx_delete_file_n " \"%s\" failed", src->data);
553 } 561 }
554 } 562 }
555 563
556 if (err) { 564 if (err) {
557 ngx_log_error(NGX_LOG_CRIT, log, err, 565 ngx_log_error(NGX_LOG_CRIT, ext->log, err,
558 ngx_rename_file_n " \"%s\" to \"%s\" failed", 566 ngx_rename_file_n " \"%s\" to \"%s\" failed",
559 src->data, to->data); 567 src->data, to->data);
560 } 568 }
561 569
562 return NGX_ERROR; 570 return NGX_ERROR;