comparison src/os/win32/ngx_files.c @ 186:c1f3a3c7c5db

nginx-0.0.1-2003-11-17-00:49:42 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 16 Nov 2003 21:49:42 +0000
parents d5f50cefc322
children 7c7183b3ea8b
comparison
equal deleted inserted replaced
185:d5f50cefc322 186:c1f3a3c7c5db
161 161
162 return total; 162 return total;
163 } 163 }
164 164
165 165
166 int ngx_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_pool_t *pool) 166 int ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_pool_t *pool)
167 { 167 {
168 int rc, collision; 168 int rc, collision;
169 u_int num; 169 u_int num;
170 char *name; 170 char *name;
171 ngx_err_t err; 171
172 172 if (!(name = ngx_palloc(pool, to->len + 1 + 10 + 1 + sizeof("DELETE")))) {
173 name = ngx_palloc(pool, to->len + 1 + 10 + 1 + sizeof("DELETE")); 173 return NGX_ERROR;
174 }
175
174 ngx_memcpy(name, to->data, to->len); 176 ngx_memcpy(name, to->data, to->len);
175 177
176 collision = 0; 178 collision = 0;
177 179
178 /* mutex_lock() (per cache or single ?) */ 180 /* mutex_lock() (per cache or single ?) */
182 184
183 ngx_snprintf(name + to->len, 1 + 10 + 1 + sizeof("DELETE"), 185 ngx_snprintf(name + to->len, 1 + 10 + 1 + sizeof("DELETE"),
184 ".%010u.DELETE", num); 186 ".%010u.DELETE", num);
185 187
186 if (MoveFile(to->data, name) == 0) { 188 if (MoveFile(to->data, name) == 0) {
187 err = ngx_errno;
188 if (err == NGX_ENOENT || err == NGX_ENOTDIR) {
189 return NGX_ERROR;
190 }
191
192 collision = 1; 189 collision = 1;
193 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno, 190 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno,
194 "MoveFile() failed"); 191 "MoveFile() failed");
195 } 192 }
196 193
197 } while (collision); 194 } while (collision);
195
196 if (MoveFile(from->data, to->data) == 0) {
197 rc = NGX_ERROR;
198
199 } else {
200 rc = NGX_OK;
201 }
198 202
199 if (ngx_win32_version >= NGX_WIN_NT) { 203 if (ngx_win32_version >= NGX_WIN_NT) {
200 if (DeleteFile(name) == 0) { 204 if (DeleteFile(name) == 0) {
201 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno, 205 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno,
202 "DeleteFile() failed"); 206 "DeleteFile() failed");
203 } 207 }
204 }
205
206 if (MoveFile(from->data, to->data) == 0) {
207 rc = NGX_ERROR;
208 208
209 } else { 209 } else {
210 rc = NGX_OK; 210 /* TODO: Win9X: update the open files table */
211 } 211 }
212 212
213 if (rc == NGX_ERROR) { 213 if (rc == NGX_ERROR) {
214 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno, "MoveFile() failed"); 214 ngx_log_error(NGX_LOG_ERR, pool->log, ngx_errno, "MoveFile() failed");
215 } 215 }
218 218
219 return rc; 219 return rc;
220 } 220 }
221 221
222 222
223 int ngx_file_type(char *file, ngx_file_info_t *sb) 223 #if 0
224
225 int ngx_file_info(char *file, ngx_file_info_t *sb)
224 { 226 {
225 WIN32_FILE_ATTRIBUTE_DATA fa; 227 WIN32_FILE_ATTRIBUTE_DATA fa;
226 228
227 /* NT4 and Win98 */ 229 /* NT4 and Win98 */
228 230
238 sb->nFileSizeLow = fa.nFileSizeLow; 240 sb->nFileSizeLow = fa.nFileSizeLow;
239 241
240 return NGX_OK; 242 return NGX_OK;
241 } 243 }
242 244
243 245 #endif
244 #if 0 246
245 247
246 /* Win95 */ 248 int ngx_file_info(char *file, ngx_file_info_t *sb)
247 249 {
248 int ngx_file_type(char *file, ngx_file_info_t *sb) 250 /* Win95 */
249 { 251
250 sb->dwFileAttributes = GetFileAttributes(file); 252 sb->dwFileAttributes = GetFileAttributes(file);
251 253
252 if (sb->dwFileAttributes == INVALID_FILE_ATTRIBUTES) { 254 if (sb->dwFileAttributes == INVALID_FILE_ATTRIBUTES) {
253 return NGX_ERROR; 255 return NGX_ERROR;
254 } 256 }
255 257
256 return NGX_OK; 258 return NGX_OK;
257 } 259 }
258 260
259 #endif 261
262 int ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
263 {
264 ngx_cpystrn(name->data + name->len, NGX_DIR_MASK, NGX_DIR_MASK_LEN + 1);
265
266 dir->dir = FindFirstFile(name->data, &dir->fd);
267
268 if (dir->dir == INVALID_HANDLE_VALUE) {
269 return NGX_ERROR;
270 }
271
272 dir->info_valid = 1;
273 dir->ready = 1;
274
275 return NGX_OK;
276 }
277
278
279 int ngx_read_dir(ngx_dir_t *dir)
280 {
281 if (dir->ready) {
282 dir->ready = 0;
283 return NGX_OK;
284 }
285
286 if (FindNextFile(dir->dir, &dir->fd) == 0) {
287 return NGX_ERROR;
288 }
289
290 return NGX_OK;
291 }
260 292
261 293
262 int ngx_file_append_mode(ngx_fd_t fd) 294 int ngx_file_append_mode(ngx_fd_t fd)
263 { 295 {
264 if (SetFilePointer(fd, 0, NULL, FILE_END) == INVALID_SET_FILE_POINTER) { 296 if (SetFilePointer(fd, 0, NULL, FILE_END) == INVALID_SET_FILE_POINTER) {