Mercurial > hg > nginx-quic
comparison src/core/ngx_file.c @ 83:a7e45c45a95c
nginx-0.0.1-2003-04-28-19:06:39 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 28 Apr 2003 15:06:39 +0000 |
parents | 869b10be682f |
children | 19cc647ecd91 |
comparison
equal
deleted
inserted
replaced
82:fccdb921e8b8 | 83:a7e45c45a95c |
---|---|
5 #include <ngx_array.h> | 5 #include <ngx_array.h> |
6 #include <ngx_file.h> | 6 #include <ngx_file.h> |
7 #include <ngx_files.h> | 7 #include <ngx_files.h> |
8 | 8 |
9 | 9 |
10 static int ngx_temp_number; | |
11 static int ngx_random; | |
12 | |
13 | |
10 int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, | 14 int ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, |
11 ngx_pool_t *pool, int num, int step, int persistent) | 15 ngx_pool_t *pool, int persistent) |
12 { | 16 { |
13 int i; | 17 int i, num; |
14 ngx_err_t err; | 18 ngx_err_t err; |
15 | 19 |
16 file->name.len = path->name.len + 1 + path->len + 10; | 20 file->name.len = path->name.len + 1 + path->len + 10; |
17 | 21 |
18 ngx_test_null(file->name.data, ngx_palloc(pool, file->name.len + 1), | 22 ngx_test_null(file->name.data, ngx_palloc(pool, file->name.len + 1), |
23 file->name.data[i] = 'X'; | 27 file->name.data[i] = 'X'; |
24 } | 28 } |
25 #endif | 29 #endif |
26 | 30 |
27 ngx_memcpy(file->name.data, path->name.data, path->name.len); | 31 ngx_memcpy(file->name.data, path->name.data, path->name.len); |
32 | |
33 num = ngx_next_temp_number(0); | |
28 | 34 |
29 for ( ;; ) { | 35 for ( ;; ) { |
30 snprintf(file->name.data + path->name.len + 1 + path->len, 11, | 36 snprintf(file->name.data + path->name.len + 1 + path->len, 11, |
31 "%010u", num); | 37 "%010u", num); |
32 | 38 |
56 } | 62 } |
57 | 63 |
58 err = ngx_errno; | 64 err = ngx_errno; |
59 | 65 |
60 if (err == NGX_EEXIST) { | 66 if (err == NGX_EEXIST) { |
61 num = (num + 1) * step; | 67 num = ngx_next_temp_number(1); |
62 continue; | 68 continue; |
63 } | 69 } |
64 | 70 |
65 if (err != NGX_ENOENT | 71 if (err != NGX_ENOENT |
66 #if (WIN32_NEED_TEST) | 72 #if (WIN32_NEED_TEST) |
138 file->name.data[pos] = '/'; | 144 file->name.data[pos] = '/'; |
139 } | 145 } |
140 | 146 |
141 return NGX_OK; | 147 return NGX_OK; |
142 } | 148 } |
149 | |
150 | |
151 void ngx_init_temp_number() | |
152 { | |
153 ngx_random = 0; | |
154 | |
155 ngx_temp_number = ngx_random; | |
156 | |
157 while (ngx_random < 10000) { | |
158 ngx_random = 123456; | |
159 } | |
160 } | |
161 | |
162 | |
163 int ngx_next_temp_number(int collision) | |
164 { | |
165 if (collision) { | |
166 ngx_temp_number += ngx_random; | |
167 } | |
168 | |
169 return ngx_temp_number++; | |
170 } |