annotate src/core/ngx_file.c @ 5360:3d2d3e1cf427

Win32: MinGW GCC compatibility. Several warnings silenced, notably (ngx_socket_t) -1 is now checked on socket operations instead of -1, as ngx_socket_t is unsigned on win32 and gcc complains on comparison. With this patch, it's now possible to compile nginx using mingw gcc, with options we normally compile on win32.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 04 Sep 2013 20:48:28 +0400
parents 314c3d7cc3a5
children 7d8770196436
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3970
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
6
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
5316
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
12 static ngx_int_t ngx_test_full_name(ngx_str_t *name);
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
13
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
14
3035
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
15 static ngx_atomic_t temp_number = 0;
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
16 ngx_atomic_t *ngx_temp_number = &temp_number;
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
17 ngx_atomic_int_t ngx_random_number = 123456;
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
18
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
19
5316
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
20 ngx_int_t
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
21 ngx_get_full_name(ngx_pool_t *pool, ngx_str_t *prefix, ngx_str_t *name)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
22 {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
23 size_t len;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
24 u_char *p, *n;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
25 ngx_int_t rc;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
26
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
27 rc = ngx_test_full_name(name);
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
28
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
29 if (rc == NGX_OK) {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
30 return rc;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
31 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
32
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
33 len = prefix->len;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
34
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
35 #if (NGX_WIN32)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
36
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
37 if (rc == 2) {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
38 len = rc;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
39 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
40
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
41 #endif
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
42
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
43 n = ngx_pnalloc(pool, len + name->len + 1);
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
44 if (n == NULL) {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
45 return NGX_ERROR;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
46 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
47
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
48 p = ngx_cpymem(n, prefix->data, len);
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
49 ngx_cpystrn(p, name->data, name->len + 1);
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
50
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
51 name->len += len;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
52 name->data = n;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
53
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
54 return NGX_OK;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
55 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
56
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
57
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
58 static ngx_int_t
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
59 ngx_test_full_name(ngx_str_t *name)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
60 {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
61 #if (NGX_WIN32)
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
62 u_char c0, c1;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
63
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
64 c0 = name->data[0];
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
65
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
66 if (name->len < 2) {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
67 if (c0 == '/') {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
68 return 2;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
69 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
70
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
71 return NGX_DECLINED;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
72 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
73
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
74 c1 = name->data[1];
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
75
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
76 if (c1 == ':') {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
77 c0 |= 0x20;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
78
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
79 if ((c0 >= 'a' && c0 <= 'z')) {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
80 return NGX_OK;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
81 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
82
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
83 return NGX_DECLINED;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
84 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
85
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
86 if (c1 == '/') {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
87 return NGX_OK;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
88 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
89
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
90 if (c0 == '/') {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
91 return 2;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
92 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
93
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
94 return NGX_DECLINED;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
95
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
96 #else
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
97
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
98 if (name->data[0] == '/') {
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
99 return NGX_OK;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
100 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
101
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
102 return NGX_DECLINED;
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
103
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
104 #endif
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
105 }
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
106
12dd27b74117 Fixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev <vbart@nginx.com>
parents: 4966
diff changeset
107
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
108 ssize_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
109 ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
110 {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
111 ngx_int_t rc;
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
112
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
113 if (tf->file.fd == NGX_INVALID_FILE) {
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 160
diff changeset
114 rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool,
1075
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 1058
diff changeset
115 tf->persistent, tf->clean, tf->access);
208
0b67be7d4489 nginx-0.0.1-2003-12-08-23:48:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
116
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
117 if (rc == NGX_ERROR || rc == NGX_AGAIN) {
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
118 return rc;
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
119 }
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
120
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 661
diff changeset
121 if (tf->log_level) {
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 661
diff changeset
122 ngx_log_error(tf->log_level, tf->file.log, 0, "%s %V",
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
123 tf->warn, &tf->file.name);
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
124 }
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
125 }
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
126
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 160
diff changeset
127 return ngx_write_chain_to_file(&tf->file, chain, tf->offset, tf->pool);
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
128 }
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
129
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 156
diff changeset
130
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
131 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
132 ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
1075
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 1058
diff changeset
133 ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access)
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 {
1090
01b48bcb73bf shorten temporary names on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 1075
diff changeset
135 uint32_t n;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
136 ngx_err_t err;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
137 ngx_pool_cleanup_t *cln;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
138 ngx_pool_cleanup_file_t *clnf;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139
1091
58f1641783ca allocate less memory on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 1090
diff changeset
140 file->name.len = path->name.len + 1 + path->len + 10;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1909
diff changeset
142 file->name.data = ngx_pnalloc(pool, file->name.len + 1);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
143 if (file->name.data == NULL) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
144 return NGX_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
145 }
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 #if 0
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148 for (i = 0; i < file->name.len; i++) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 file->name.data[i] = 'X';
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 #endif
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 ngx_memcpy(file->name.data, path->name.data, path->name.len);
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
1090
01b48bcb73bf shorten temporary names on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 1075
diff changeset
155 n = (uint32_t) ngx_next_temp_number(0);
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
156
1747
442a791354d8 create the only cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
157 cln = ngx_pool_cleanup_add(pool, sizeof(ngx_pool_cleanup_file_t));
442a791354d8 create the only cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
158 if (cln == NULL) {
442a791354d8 create the only cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
159 return NGX_ERROR;
442a791354d8 create the only cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
160 }
442a791354d8 create the only cleanup
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
161
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 for ( ;; ) {
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
163 (void) ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
1090
01b48bcb73bf shorten temporary names on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 1075
diff changeset
164 "%010uD%Z", n);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
166 ngx_create_hashed_filename(path, file->name.data, file->name.len);
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
167
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
168 ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
169 "hashed path: %s", file->name.data);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170
1046
bb139aba3199 rename mode to access
Igor Sysoev <igor@sysoev.ru>
parents: 977
diff changeset
171 file->fd = ngx_open_tempfile(file->name.data, persistent, access);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 208
diff changeset
173 ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 208
diff changeset
174 "temp fd:%d", file->fd);
75
869b10be682f nginx-0.0.1-2003-04-14-21:04:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 74
diff changeset
175
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 if (file->fd != NGX_INVALID_FILE) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
177
1075
4d203f76b757 undo "client_body_in_file_only any"
Igor Sysoev <igor@sysoev.ru>
parents: 1058
diff changeset
178 cln->handler = clean ? ngx_pool_delete_file : ngx_pool_cleanup_file;
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
179 clnf = cln->data;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
180
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
181 clnf->fd = file->fd;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
182 clnf->name = file->name.data;
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
183 clnf->log = pool->log;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
184
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 return NGX_OK;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 err = ngx_errno;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 if (err == NGX_EEXIST) {
1090
01b48bcb73bf shorten temporary names on 64-bit platforms
Igor Sysoev <igor@sysoev.ru>
parents: 1075
diff changeset
191 n = (uint32_t) ngx_next_temp_number(1);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 continue;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194
3023
7d5501988fe3 NGX_ENOPATH
Igor Sysoev <igor@sysoev.ru>
parents: 3018
diff changeset
195 if ((path->level[0] == 0) || (err != NGX_ENOPATH)) {
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 ngx_log_error(NGX_LOG_CRIT, file->log, err,
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 ngx_open_tempfile_n " \"%s\" failed",
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198 file->name.data);
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 return NGX_ERROR;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202 if (ngx_create_path(file, path) == NGX_ERROR) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 return NGX_ERROR;
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 92
diff changeset
204 }
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
209 void
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
210 ngx_create_hashed_filename(ngx_path_t *path, u_char *file, size_t len)
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 {
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
212 size_t i, level;
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
213 ngx_uint_t n;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
215 i = path->name.len + 1;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
217 file[path->name.len + path->len] = '/';
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
219 for (n = 0; n < 3; n++) {
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
220 level = path->level[n];
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 if (level == 0) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 break;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225
1748
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
226 len -= level;
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
227 file[i - 1] = '/';
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
228 ngx_memcpy(&file[i], &file[len], level);
91d381e4e691 ngx_create_hashed_filename() does not need ngx_file_t
Igor Sysoev <igor@sysoev.ru>
parents: 1747
diff changeset
229 i += level + 1;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
234 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
235 ngx_create_path(ngx_file_t *file, ngx_path_t *path)
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 {
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
237 size_t pos;
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
238 ngx_err_t err;
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
239 ngx_uint_t i;
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 pos = path->name.len;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 for (i = 0; i < 3; i++) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244 if (path->level[i] == 0) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 break;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 pos += path->level[i] + 1;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 file->name.data[pos] = '\0';
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 208
diff changeset
252 ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 208
diff changeset
253 "temp file: \"%s\"", file->name.data);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
255 if (ngx_create_dir(file->name.data, 0700) == NGX_FILE_ERROR) {
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 err = ngx_errno;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 if (err != NGX_EEXIST) {
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 ngx_log_error(NGX_LOG_CRIT, file->log, err,
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
259 ngx_create_dir_n " \"%s\" failed",
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
260 file->name.data);
74
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 return NGX_ERROR;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 file->name.data[pos] = '/';
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 }
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 return NGX_OK;
17ab1af8c3dd nginx-0.0.1-2003-04-11-20:01:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269 }
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
270
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
271
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
272 ngx_err_t
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
273 ngx_create_full_path(u_char *dir, ngx_uint_t access)
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
274 {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
275 u_char *p, ch;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
276 ngx_err_t err;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
277
3202
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
278 err = 0;
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
279
3201
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
280 #if (NGX_WIN32)
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
281 p = dir + 3;
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
282 #else
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
283 p = dir + 1;
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
284 #endif
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
285
5fae6f9085e1 do not create Win32 drive letter in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3035
diff changeset
286 for ( /* void */ ; *p; p++) {
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
287 ch = *p;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
288
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
289 if (ch != '/') {
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
290 continue;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
291 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
292
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
293 *p = '\0';
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
294
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
295 if (ngx_create_dir(dir, access) == NGX_FILE_ERROR) {
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
296 err = ngx_errno;
3202
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
297
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
298 switch (err) {
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
299 case NGX_EEXIST:
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
300 err = 0;
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
301 case NGX_EACCES:
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
302 break;
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
303
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
304 default:
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
305 return err;
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
306 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
307 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
308
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
309 *p = '/';
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
310 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
311
3202
121fae8c673c ignore EACCES errors for top level directories in ngx_create_full_path()
Igor Sysoev <igor@sysoev.ru>
parents: 3201
diff changeset
312 return err;
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
313 }
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
314
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
315
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
316 ngx_atomic_uint_t
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
317 ngx_next_temp_number(ngx_uint_t collision)
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
318 {
3035
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
319 ngx_atomic_uint_t n, add;
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
320
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
321 add = collision ? ngx_random_number : 1;
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
322
3035
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
323 n = ngx_atomic_fetch_add(ngx_temp_number, add);
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
324
f9d97311c652 *) share temporary number between workers
Igor Sysoev <igor@sysoev.ru>
parents: 3034
diff changeset
325 return n + add;
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 75
diff changeset
326 }
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
327
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
328
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
329 char *
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
330 ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
331 {
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
332 char *p = conf;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
333
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
334 ssize_t level;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
335 ngx_str_t *value;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
336 ngx_uint_t i, n;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
337 ngx_path_t *path, **slot;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
338
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
339 slot = (ngx_path_t **) (p + cmd->offset);
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
340
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
341 if (*slot) {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
342 return "is duplicate";
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
343 }
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
344
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
345 path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
346 if (path == NULL) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
347 return NGX_CONF_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
348 }
190
02a715e85df1 nginx-0.0.1-2003-11-19-00:34:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
349
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
350 value = cf->args->elts;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
351
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
352 path->name = value[1];
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
353
661
9079ee4735ae nginx-0.3.52-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
354 if (path->name.data[path->name.len - 1] == '/') {
9079ee4735ae nginx-0.3.52-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
355 path->name.len--;
9079ee4735ae nginx-0.3.52-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
356 }
9079ee4735ae nginx-0.3.52-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
357
5330
314c3d7cc3a5 Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5317
diff changeset
358 if (ngx_conf_full_name(cf->cycle, &path->name, 0) != NGX_OK) {
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
359 return NULL;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
360 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
361
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
362 path->len = 0;
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 2898
diff changeset
363 path->manager = NULL;
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 2898
diff changeset
364 path->loader = NULL;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
365 path->conf_file = cf->conf_file->file.name.data;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
366 path->line = cf->conf_file->line;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
367
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
368 for (i = 0, n = 2; n < cf->args->nelts; i++, n++) {
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
369 level = ngx_atoi(value[n].data, value[n].len);
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
370 if (level == NGX_ERROR || level == 0) {
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
371 return "invalid value";
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
372 }
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
373
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
374 path->level[i] = level;
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
375 path->len += level + 1;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
376 }
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
377
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
378 while (i < 3) {
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
379 path->level[i++] = 0;
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
380 }
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
381
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
382 *slot = path;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
383
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
384 if (ngx_add_path(cf, slot) == NGX_ERROR) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
385 return NGX_CONF_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
386 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
387
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
388 return NGX_CONF_OK;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
389 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
390
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
391
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
392 char *
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
393 ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev,
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
394 ngx_path_init_t *init)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
395 {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
396 if (*path) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
397 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
398 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
399
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
400 if (prev) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
401 *path = prev;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
402 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
403 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
404
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
405 *path = ngx_palloc(cf->pool, sizeof(ngx_path_t));
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
406 if (*path == NULL) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
407 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
408 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
409
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
410 (*path)->name = init->name;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
411
5330
314c3d7cc3a5 Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5317
diff changeset
412 if (ngx_conf_full_name(cf->cycle, &(*path)->name, 0) != NGX_OK) {
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
413 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
414 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
415
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
416 (*path)->level[0] = init->level[0];
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
417 (*path)->level[1] = init->level[1];
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
418 (*path)->level[2] = init->level[2];
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
419
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
420 (*path)->len = init->level[0] + (init->level[0] ? 1 : 0)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
421 + init->level[1] + (init->level[1] ? 1 : 0)
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
422 + init->level[2] + (init->level[2] ? 1 : 0);
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
423
2616
d19979e0d980 introduce cache manager instead of cache cleaner
Igor Sysoev <igor@sysoev.ru>
parents: 2592
diff changeset
424 (*path)->manager = NULL;
3018
8fc7b94f647b cache loader process
Igor Sysoev <igor@sysoev.ru>
parents: 2898
diff changeset
425 (*path)->loader = NULL;
2592
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
426 (*path)->conf_file = NULL;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
427
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
428 if (ngx_add_path(cf, path) != NGX_OK) {
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
429 return NGX_CONF_ERROR;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
430 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
431
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
432 return NGX_CONF_OK;
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
433 }
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
434
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
435
3a8a53c0c42f a prelimiary proxy cache support
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
436 char *
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
437 ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
438 {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
439 char *confp = conf;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
440
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
441 u_char *p;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
442 ngx_str_t *value;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
443 ngx_uint_t i, right, shift, *access;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
444
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
445 access = (ngx_uint_t *) (confp + cmd->offset);
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
446
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
447 if (*access != NGX_CONF_UNSET_UINT) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
448 return "is duplicate";
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
449 }
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
450
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
451 value = cf->args->elts;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
452
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
453 *access = 0600;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
454
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
455 for (i = 1; i < cf->args->nelts; i++) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
456
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
457 p = value[i].data;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
458
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
459 if (ngx_strncmp(p, "user:", sizeof("user:") - 1) == 0) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
460 shift = 6;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
461 p += sizeof("user:") - 1;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
462
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
463 } else if (ngx_strncmp(p, "group:", sizeof("group:") - 1) == 0) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
464 shift = 3;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
465 p += sizeof("group:") - 1;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
466
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
467 } else if (ngx_strncmp(p, "all:", sizeof("all:") - 1) == 0) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
468 shift = 0;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
469 p += sizeof("all:") - 1;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
470
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
471 } else {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
472 goto invalid;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
473 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
474
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
475 if (ngx_strcmp(p, "rw") == 0) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
476 right = 6;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
477
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
478 } else if (ngx_strcmp(p, "r") == 0) {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
479 right = 4;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
480
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
481 } else {
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
482 goto invalid;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
483 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
484
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
485 *access |= right << shift;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
486 }
1295
5383f5232364 proxy_store and fastcgi_store were changed,
Igor Sysoev <igor@sysoev.ru>
parents: 1291
diff changeset
487
1291
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
488 return NGX_CONF_OK;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
489
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
490 invalid:
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
491
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
492 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid value \"%V\"", &value[i]);
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
493
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
494 return NGX_CONF_ERROR;
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
495 }
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
496
13a4ce6e7f1e proxy_store and fastcgi_store
Igor Sysoev <igor@sysoev.ru>
parents: 1091
diff changeset
497
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
498 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
499 ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
500 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
501 ngx_uint_t i, n;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
502 ngx_path_t *path, **p;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
503
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
504 path = *slot;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
505
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
506 p = cf->cycle->paths.elts;
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
507 for (i = 0; i < cf->cycle->paths.nelts; i++) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
508 if (p[i]->name.len == path->name.len
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
509 && ngx_strcmp(p[i]->name.data, path->name.data) == 0)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
510 {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
511 for (n = 0; n < 3; n++) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
512 if (p[i]->level[n] != path->level[n]) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
513 if (path->conf_file == NULL) {
481
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
514 if (p[i]->conf_file == NULL) {
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
515 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
516 "the default path name \"%V\" has "
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
517 "the same name as another default path, "
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
518 "but the different levels, you need to "
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
519 "redefine one of them in http section",
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
520 &p[i]->name);
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
521 return NGX_ERROR;
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
522 }
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
523
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
524 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
525 "the path name \"%V\" in %s:%ui has "
481
fd661d14a7fa nginx-0.1.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
526 "the same name as default path, but "
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
527 "the different levels, you need to "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
528 "define default path in http section",
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
529 &p[i]->name, p[i]->conf_file, p[i]->line);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
530 return NGX_ERROR;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
531 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
532
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
533 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
534 "the same path name \"%V\" in %s:%ui "
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
535 "has the different levels than",
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
536 &p[i]->name, p[i]->conf_file, p[i]->line);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
537 return NGX_ERROR;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
538 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
539
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
540 if (p[i]->level[n] == 0) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
541 break;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
542 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
543 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
544
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
545 *slot = p[i];
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
546
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
547 return NGX_OK;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
548 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
549 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
550
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
551 p = ngx_array_push(&cf->cycle->paths);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
552 if (p == NULL) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
553 return NGX_ERROR;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
554 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
555
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
556 *p = path;
190
02a715e85df1 nginx-0.0.1-2003-11-19-00:34:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 186
diff changeset
557
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
558 return NGX_OK;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
559 }
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
560
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
561
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 481
diff changeset
562 ngx_int_t
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
563 ngx_create_paths(ngx_cycle_t *cycle, ngx_uid_t user)
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
564 {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
565 ngx_err_t err;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
566 ngx_uint_t i;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
567 ngx_path_t **path;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
568
4870
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
569 path = cycle->paths.elts;
8a9b7b4e9f2d Correct plural form for "path" in the whole source base.
Andrey Belov <defan@nginx.com>
parents: 4572
diff changeset
570 for (i = 0; i < cycle->paths.nelts; i++) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
571
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
572 if (ngx_create_dir(path[i]->name.data, 0700) == NGX_FILE_ERROR) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
573 err = ngx_errno;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
574 if (err != NGX_EEXIST) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
575 ngx_log_error(NGX_LOG_EMERG, cycle->log, err,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
576 ngx_create_dir_n " \"%s\" failed",
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
577 path[i]->name.data);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
578 return NGX_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
579 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
580 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
581
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
582 if (user == (ngx_uid_t) NGX_CONF_UNSET_UINT) {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
583 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
584 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
585
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
586 #if !(NGX_WIN32)
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1695
diff changeset
587 {
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1695
diff changeset
588 ngx_file_info_t fi;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
589
2782
4bd7825fab80 uniform ngx_file_info() interface with ngx_fd_info()
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
590 if (ngx_file_info((const char *) path[i]->name.data, &fi)
4bd7825fab80 uniform ngx_file_info() interface with ngx_fd_info()
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
591 == NGX_FILE_ERROR)
4bd7825fab80 uniform ngx_file_info() interface with ngx_fd_info()
Igor Sysoev <igor@sysoev.ru>
parents: 2616
diff changeset
592 {
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
593 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
594 ngx_file_info_n " \"%s\" failed", path[i]->name.data);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
595 return NGX_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
596 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
597
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
598 if (fi.st_uid != user) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
599 if (chown((const char *) path[i]->name.data, user, -1) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
600 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
601 "chown(\"%s\", %d) failed",
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
602 path[i]->name.data, user);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
603 return NGX_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
604 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
605 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
606
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
607 if ((fi.st_mode & (S_IRUSR|S_IWUSR|S_IXUSR))
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
608 != (S_IRUSR|S_IWUSR|S_IXUSR))
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
609 {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
610 fi.st_mode |= (S_IRUSR|S_IWUSR|S_IXUSR);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
611
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
612 if (chmod((const char *) path[i]->name.data, fi.st_mode) == -1) {
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
613 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
614 "chmod() \"%s\" failed", path[i]->name.data);
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
615 return NGX_ERROR;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
616 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
617 }
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1695
diff changeset
618 }
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
619 #endif
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
620 }
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
621
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
622 return NGX_OK;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
623 }
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
624
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
625
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
626 ngx_int_t
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
627 ngx_ext_rename_file(ngx_str_t *src, ngx_str_t *to, ngx_ext_rename_file_t *ext)
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
628 {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
629 u_char *name;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
630 ngx_err_t err;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
631 ngx_copy_file_t cf;
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
632
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
633 #if !(NGX_WIN32)
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
634
2394
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
635 if (ext->access) {
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
636 if (ngx_change_file_access(src->data, ext->access) == NGX_FILE_ERROR) {
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
637 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
638 ngx_change_file_access_n " \"%s\" failed", src->data);
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
639 err = 0;
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
640 goto failed;
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
641 }
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
642 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
643
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
644 #endif
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
645
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
646 if (ext->time != -1) {
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
647 if (ngx_set_file_time(src->data, ext->fd, ext->time) != NGX_OK) {
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
648 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
649 ngx_set_file_time_n " \"%s\" failed", src->data);
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
650 err = 0;
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
651 goto failed;
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
652 }
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
653 }
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
654
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
655 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) {
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
656 return NGX_OK;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
657 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
658
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
659 err = ngx_errno;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
660
3023
7d5501988fe3 NGX_ENOPATH
Igor Sysoev <igor@sysoev.ru>
parents: 3018
diff changeset
661 if (err == NGX_ENOPATH) {
7d5501988fe3 NGX_ENOPATH
Igor Sysoev <igor@sysoev.ru>
parents: 3018
diff changeset
662
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
663 if (!ext->create_path) {
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
664 goto failed;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
665 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
666
2394
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
667 err = ngx_create_full_path(to->data, ngx_dir_access(ext->path_access));
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
668
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
669 if (err) {
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
670 ngx_log_error(NGX_LOG_CRIT, ext->log, err,
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
671 ngx_create_dir_n " \"%s\" failed", to->data);
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
672 err = 0;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
673 goto failed;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
674 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
675
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
676 if (ngx_rename_file(src->data, to->data) != NGX_FILE_ERROR) {
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
677 return NGX_OK;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
678 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
679
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
680 err = ngx_errno;
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
681 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
682
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
683 #if (NGX_WIN32)
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
684
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
685 if (err == NGX_EEXIST) {
3382
6be1f25bae90 fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents: 3202
diff changeset
686 err = ngx_win32_rename_file(src, to, ext->log);
3387
a02b6d2e3bfd fix Win32 error message when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents: 3382
diff changeset
687
a02b6d2e3bfd fix Win32 error message when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents: 3382
diff changeset
688 if (err == 0) {
a02b6d2e3bfd fix Win32 error message when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents: 3382
diff changeset
689 return NGX_OK;
a02b6d2e3bfd fix Win32 error message when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents: 3382
diff changeset
690 }
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
691 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
692
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
693 #endif
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
694
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
695 if (err == NGX_EXDEV) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
696
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
697 cf.size = -1;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
698 cf.buf_size = 0;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
699 cf.access = ext->access;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
700 cf.time = ext->time;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
701 cf.log = ext->log;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
702
3032
524ba56ba9f7 fix copy destination name length, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3027
diff changeset
703 name = ngx_alloc(to->len + 1 + 10 + 1, ext->log);
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
704 if (name == NULL) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
705 return NGX_ERROR;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
706 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
707
3032
524ba56ba9f7 fix copy destination name length, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3027
diff changeset
708 (void) ngx_sprintf(name, "%*s.%010uD%Z", to->len, to->data,
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
709 (uint32_t) ngx_next_temp_number(0));
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
710
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
711 if (ngx_copy_file(src->data, name, &cf) == NGX_OK) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
712
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
713 if (ngx_rename_file(name, to->data) != NGX_FILE_ERROR) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
714 ngx_free(name);
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
715
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
716 if (ngx_delete_file(src->data) == NGX_FILE_ERROR) {
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
717 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
718 ngx_delete_file_n " \"%s\" failed",
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
719 src->data);
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
720 return NGX_ERROR;
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
721 }
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
722
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
723 return NGX_OK;
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
724 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
725
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
726 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
727 ngx_rename_file_n " \"%s\" to \"%s\" failed",
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
728 name, to->data);
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
729
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
730 if (ngx_delete_file(name) == NGX_FILE_ERROR) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
731 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
732 ngx_delete_file_n " \"%s\" failed", name);
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
733
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
734 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
735 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
736
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
737 ngx_free(name);
3033
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
738
db3e5c4c7413 fix copy failure logging and stale files removal, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3032
diff changeset
739 err = 0;
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
740 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
741
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
742 failed:
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
743
1909
cbd321d1e1b3 C++ compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1826
diff changeset
744 if (ext->delete_file) {
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
745 if (ngx_delete_file(src->data) == NGX_FILE_ERROR) {
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
746 ngx_log_error(NGX_LOG_CRIT, ext->log, ngx_errno,
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
747 ngx_delete_file_n " \"%s\" failed", src->data);
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
748 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
749 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
750
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
751 if (err) {
1826
8d50173ccba2 transform ngx_create_path_and_rename_file() to ngx_ext_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1750
diff changeset
752 ngx_log_error(NGX_LOG_CRIT, ext->log, err,
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
753 ngx_rename_file_n " \"%s\" to \"%s\" failed",
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
754 src->data, to->data);
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
755 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
756
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
757 return NGX_ERROR;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
758 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
759
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
760
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
761 ngx_int_t
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
762 ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
763 {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
764 char *buf;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
765 off_t size;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
766 size_t len;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
767 ssize_t n;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
768 ngx_fd_t fd, nfd;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
769 ngx_int_t rc;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
770 ngx_file_info_t fi;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
771
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
772 rc = NGX_ERROR;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
773 buf = NULL;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
774 nfd = NGX_INVALID_FILE;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
775
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
776 fd = ngx_open_file(from, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
777
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
778 if (fd == NGX_INVALID_FILE) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
779 ngx_log_error(NGX_LOG_CRIT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
780 ngx_open_file_n " \"%s\" failed", from);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
781 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
782 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
783
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
784 if (cf->size != -1) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
785 size = cf->size;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
786
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
787 } else {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
788 if (ngx_fd_info(fd, &fi) == NGX_FILE_ERROR) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
789 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
790 ngx_fd_info_n " \"%s\" failed", from);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
791
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
792 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
793 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
794
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
795 size = ngx_file_size(&fi);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
796 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
797
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
798 len = cf->buf_size ? cf->buf_size : 65536;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
799
3027
3e1b653fd22f fix building on 64-bit platforms, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3024
diff changeset
800 if ((off_t) len > size) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
801 len = (size_t) size;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
802 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
803
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
804 buf = ngx_alloc(len, cf->log);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
805 if (buf == NULL) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
806 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
807 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
808
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
809 nfd = ngx_open_file(to, NGX_FILE_WRONLY, NGX_FILE_CREATE_OR_OPEN,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
810 cf->access);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
811
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
812 if (nfd == NGX_INVALID_FILE) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
813 ngx_log_error(NGX_LOG_CRIT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
814 ngx_open_file_n " \"%s\" failed", to);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
815 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
816 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
817
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
818 while (size > 0) {
2394
dbe746851b31 use ngx_ext_rename_file() for single file MOVE
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
819
3027
3e1b653fd22f fix building on 64-bit platforms, introduced in r3025
Igor Sysoev <igor@sysoev.ru>
parents: 3024
diff changeset
820 if ((off_t) len > size) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
821 len = (size_t) size;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
822 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
823
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
824 n = ngx_read_fd(fd, buf, len);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
825
4966
c821975c9068 Fixed handling of ngx_write_fd() and ngx_read_fd() errors.
Valentin Bartenev <vbart@nginx.com>
parents: 4870
diff changeset
826 if (n == -1) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
827 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
828 ngx_read_fd_n " \"%s\" failed", from);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
829 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
830 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
831
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
832 if ((size_t) n != len) {
4966
c821975c9068 Fixed handling of ngx_write_fd() and ngx_read_fd() errors.
Valentin Bartenev <vbart@nginx.com>
parents: 4870
diff changeset
833 ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
834 ngx_read_fd_n " has read only %z of %uz from %s",
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
835 n, size, from);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
836 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
837 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
838
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
839 n = ngx_write_fd(nfd, buf, len);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
840
4966
c821975c9068 Fixed handling of ngx_write_fd() and ngx_read_fd() errors.
Valentin Bartenev <vbart@nginx.com>
parents: 4870
diff changeset
841 if (n == -1) {
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
842 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
843 ngx_write_fd_n " \"%s\" failed", to);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
844 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
845 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
846
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
847 if ((size_t) n != len) {
4966
c821975c9068 Fixed handling of ngx_write_fd() and ngx_read_fd() errors.
Valentin Bartenev <vbart@nginx.com>
parents: 4870
diff changeset
848 ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
849 ngx_write_fd_n " has written only %z of %uz to %s",
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
850 n, size, to);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
851 goto failed;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
852 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
853
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
854 size -= n;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
855 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
856
3481
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
857 if (cf->time != -1) {
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
858 if (ngx_set_file_time(to, nfd, cf->time) != NGX_OK) {
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
859 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
860 ngx_set_file_time_n " \"%s\" failed", to);
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
861 goto failed;
35e258519a83 do not set file time in ngx_copy_file() if the time is -1,
Igor Sysoev <igor@sysoev.ru>
parents: 3387
diff changeset
862 }
3024
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
863 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
864
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
865 rc = NGX_OK;
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
866
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
867 failed:
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
868
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
869 if (nfd != NGX_INVALID_FILE) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
870 if (ngx_close_file(nfd) == NGX_FILE_ERROR) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
871 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
872 ngx_close_file_n " \"%s\" failed", to);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
873 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
874 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
875
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
876 if (fd != NGX_INVALID_FILE) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
877 if (ngx_close_file(fd) == NGX_FILE_ERROR) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
878 ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
879 ngx_close_file_n " \"%s\" failed", from);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
880 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
881 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
882
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
883 if (buf) {
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
884 ngx_free(buf);
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
885 }
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
886
8101d9101ed8 allow cross device temporary files atomic copying:
Igor Sysoev <igor@sysoev.ru>
parents: 3023
diff changeset
887 return rc;
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
888 }
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
889
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
890
1750
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
891 /*
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
892 * ctx->init_handler() - see ctx->alloc
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
893 * ctx->file_handler() - file handler
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
894 * ctx->pre_tree_handler() - handler is called before entering directory
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
895 * ctx->post_tree_handler() - handler is called after leaving directory
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
896 * ctx->spec_handler() - special (socket, FIFO, etc.) file handler
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
897 *
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
898 * ctx->data - some data structure, it may be the same on all levels, or
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
899 * reallocated if ctx->alloc is nonzero
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
900 *
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
901 * ctx->alloc - a size of data structure that is allocated at every level
4572
67653855682e Fixed spelling in multiline C comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
902 * and is initialized by ctx->init_handler()
1750
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
903 *
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
904 * ctx->log - a log
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
905 *
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
906 * on fatal (memory) error handler must return NGX_ABORT to stop walking tree
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
907 */
e16813ff8618 comment ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1748
diff changeset
908
1695
8c4532a48b0a ngx_create_path_and_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 1352
diff changeset
909 ngx_int_t
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
910 ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree)
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
911 {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
912 void *data, *prev;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
913 u_char *p, *name;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
914 size_t len;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
915 ngx_int_t rc;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
916 ngx_err_t err;
977
b9836e87dd4d style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 956
diff changeset
917 ngx_str_t file, buf;
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
918 ngx_dir_t dir;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
919
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3481
diff changeset
920 ngx_str_null(&buf);
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
921
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
922 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
923 "walk tree \"%V\"", tree);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
924
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
925 if (ngx_open_dir(tree, &dir) == NGX_ERROR) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
926 ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
927 ngx_open_dir_n " \"%s\" failed", tree->data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
928 return NGX_ERROR;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
929 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
930
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
931 prev = ctx->data;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
932
1058
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
933 if (ctx->alloc) {
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
934 data = ngx_alloc(ctx->alloc, ctx->log);
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
935 if (data == NULL) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
936 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
937 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
938
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
939 if (ctx->init_handler(data, prev) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
940 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
941 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
942
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
943 ctx->data = data;
1319
345d2095a6d5 fix potential double free(),
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
944
345d2095a6d5 fix potential double free(),
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
945 } else {
345d2095a6d5 fix potential double free(),
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
946 data = NULL;
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
947 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
948
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
949 for ( ;; ) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
950
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
951 ngx_set_errno(0);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
952
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
953 if (ngx_read_dir(&dir) == NGX_ERROR) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
954 err = ngx_errno;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
955
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
956 if (err == NGX_ENOMOREFILES) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
957 rc = NGX_OK;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
958
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
959 } else {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
960 ngx_log_error(NGX_LOG_CRIT, ctx->log, err,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
961 ngx_read_dir_n " \"%s\" failed", tree->data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
962 rc = NGX_ERROR;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
963 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
964
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
965 goto done;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
966 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
967
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
968 len = ngx_de_namelen(&dir);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
969 name = ngx_de_name(&dir);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
970
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
971 ngx_log_debug2(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
972 "tree name %uz:\"%s\"", len, name);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
973
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
974 if (len == 1 && name[0] == '.') {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
975 continue;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
976 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
977
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
978 if (len == 2 && name[0] == '.' && name[1] == '.') {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
979 continue;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
980 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
981
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
982 file.len = tree->len + 1 + len;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
983
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
984 if (file.len + NGX_DIR_MASK_LEN > buf.len) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
985
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
986 if (buf.len) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
987 ngx_free(buf.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
988 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
989
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
990 buf.len = tree->len + 1 + len + NGX_DIR_MASK_LEN;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
991
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
992 buf.data = ngx_alloc(buf.len + 1, ctx->log);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
993 if (buf.data == NULL) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
994 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
995 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
996 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
997
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
998 p = ngx_cpymem(buf.data, tree->data, tree->len);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
999 *p++ = '/';
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1000 ngx_memcpy(p, name, len + 1);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1001
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1002 file.data = buf.data;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1003
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1004 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1005 "tree path \"%s\"", file.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1006
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1007 if (!dir.valid_info) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1008 if (ngx_de_info(file.data, &dir) == NGX_FILE_ERROR) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1009 ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1010 ngx_de_info_n " \"%s\" failed", file.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1011 continue;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1012 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1013 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1014
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1015 if (ngx_de_is_file(&dir)) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1016
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1017 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1018 "tree file \"%s\"", file.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1019
1058
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1020 ctx->size = ngx_de_size(&dir);
3970
2d05952a324d elimination of reading cache files by cache loader
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
1021 ctx->fs_size = ngx_de_fs_size(&dir);
1058
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1022 ctx->access = ngx_de_access(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1023 ctx->mtime = ngx_de_mtime(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1024
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1025 if (ctx->file_handler(ctx, &file) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1026 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1027 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1028
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1029 } else if (ngx_de_is_dir(&dir)) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1030
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1031 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1032 "tree enter dir \"%s\"", file.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1033
1058
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1034 ctx->access = ngx_de_access(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1035 ctx->mtime = ngx_de_mtime(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1036
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1037 if (ctx->pre_tree_handler(ctx, &file) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1038 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1039 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1040
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1041 if (ngx_walk_tree(ctx, &file) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1042 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1043 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1044
1058
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1045 ctx->access = ngx_de_access(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1046 ctx->mtime = ngx_de_mtime(&dir);
01f818c6f7de add size, access, and mtime to ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 1046
diff changeset
1047
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1048 if (ctx->post_tree_handler(ctx, &file) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1049 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1050 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1051
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1052 } else {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1053
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1054 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1055 "tree special \"%s\"", file.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1056
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1057 if (ctx->spec_handler(ctx, &file) == NGX_ABORT) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1058 goto failed;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1059 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1060 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1061 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1062
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1063 failed:
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1064
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1065 rc = NGX_ABORT;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1066
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1067 done:
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1068
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1069 if (buf.len) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1070 ngx_free(buf.data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1071 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1072
1319
345d2095a6d5 fix potential double free(),
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
1073 if (data) {
345d2095a6d5 fix potential double free(),
Igor Sysoev <igor@sysoev.ru>
parents: 1295
diff changeset
1074 ngx_free(data);
956
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1075 ctx->data = prev;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1076 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1077
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1078 if (ngx_close_dir(&dir) == NGX_ERROR) {
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1079 ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1080 ngx_close_dir_n " \"%s\" failed", tree->data);
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1081 }
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1082
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1083 return rc;
8c3d62474df1 ngx_walk_tree()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1084 }