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 }