Mercurial > hg > nginx-mail
comparison src/core/ngx_file.c @ 665:0b460e61bdcd default tip
Merge with nginx 1.0.0.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:22:17 +0400 |
parents | 8246d8a2c2be |
children |
comparison
equal
deleted
inserted
replaced
572:06419a2298a9 | 665:0b460e61bdcd |
---|---|
181 ngx_create_full_path(u_char *dir, ngx_uint_t access) | 181 ngx_create_full_path(u_char *dir, ngx_uint_t access) |
182 { | 182 { |
183 u_char *p, ch; | 183 u_char *p, ch; |
184 ngx_err_t err; | 184 ngx_err_t err; |
185 | 185 |
186 for (p = dir + 1; *p; p++) { | 186 err = 0; |
187 | |
188 #if (NGX_WIN32) | |
189 p = dir + 3; | |
190 #else | |
191 p = dir + 1; | |
192 #endif | |
193 | |
194 for ( /* void */ ; *p; p++) { | |
187 ch = *p; | 195 ch = *p; |
188 | 196 |
189 if (ch != '/') { | 197 if (ch != '/') { |
190 continue; | 198 continue; |
191 } | 199 } |
192 | 200 |
193 *p = '\0'; | 201 *p = '\0'; |
194 | 202 |
195 if (ngx_create_dir(dir, access) == NGX_FILE_ERROR) { | 203 if (ngx_create_dir(dir, access) == NGX_FILE_ERROR) { |
196 err = ngx_errno; | 204 err = ngx_errno; |
197 if (err != NGX_EEXIST) { | 205 |
206 switch (err) { | |
207 case NGX_EEXIST: | |
208 err = 0; | |
209 case NGX_EACCES: | |
210 break; | |
211 | |
212 default: | |
198 return err; | 213 return err; |
199 } | 214 } |
200 } | 215 } |
201 | 216 |
202 *p = '/'; | 217 *p = '/'; |
203 } | 218 } |
204 | 219 |
205 return 0; | 220 return err; |
206 } | 221 } |
207 | 222 |
208 | 223 |
209 ngx_atomic_uint_t | 224 ngx_atomic_uint_t |
210 ngx_next_temp_number(ngx_uint_t collision) | 225 ngx_next_temp_number(ngx_uint_t collision) |
574 } | 589 } |
575 | 590 |
576 #if (NGX_WIN32) | 591 #if (NGX_WIN32) |
577 | 592 |
578 if (err == NGX_EEXIST) { | 593 if (err == NGX_EEXIST) { |
579 if (ngx_win32_rename_file(src, to, ext->log) == NGX_OK) { | 594 err = ngx_win32_rename_file(src, to, ext->log); |
580 | 595 |
581 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) { | 596 if (err == 0) { |
582 return NGX_OK; | 597 return NGX_OK; |
583 } | |
584 | |
585 err = ngx_errno; | |
586 | |
587 } else { | |
588 err = 0; | |
589 } | 598 } |
590 } | 599 } |
591 | 600 |
592 #endif | 601 #endif |
593 | 602 |
751 } | 760 } |
752 | 761 |
753 size -= n; | 762 size -= n; |
754 } | 763 } |
755 | 764 |
756 if (ngx_set_file_time(to, nfd, cf->time) != NGX_OK) { | 765 if (cf->time != -1) { |
757 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno, | 766 if (ngx_set_file_time(to, nfd, cf->time) != NGX_OK) { |
758 ngx_set_file_time_n " \"%s\" failed", to); | 767 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno, |
759 goto failed; | 768 ngx_set_file_time_n " \"%s\" failed", to); |
769 goto failed; | |
770 } | |
760 } | 771 } |
761 | 772 |
762 rc = NGX_OK; | 773 rc = NGX_OK; |
763 | 774 |
764 failed: | 775 failed: |
812 ngx_int_t rc; | 823 ngx_int_t rc; |
813 ngx_err_t err; | 824 ngx_err_t err; |
814 ngx_str_t file, buf; | 825 ngx_str_t file, buf; |
815 ngx_dir_t dir; | 826 ngx_dir_t dir; |
816 | 827 |
817 buf.len = 0; | 828 ngx_str_null(&buf); |
818 buf.data = NULL; | |
819 | 829 |
820 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0, | 830 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0, |
821 "walk tree \"%V\"", tree); | 831 "walk tree \"%V\"", tree); |
822 | 832 |
823 if (ngx_open_dir(tree, &dir) == NGX_ERROR) { | 833 if (ngx_open_dir(tree, &dir) == NGX_ERROR) { |