Mercurial > hg > nginx-vendor-current
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; |