annotate src/os/win32/ngx_files.c @ 2974:63f71723cd2a

handle Win32 ReadFile() EOF state in Unix way
author Igor Sysoev <igor@sysoev.ru>
date Mon, 13 Jul 2009 09:32:49 +0000
parents 17da2da3a8f5
children 179f6dfcb7fe
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: 344
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: 344
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
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: 344
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
5
42
cd035a94e0b6 nginx-0.0.1-2002-12-27-10:27:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 35
diff changeset
6
cd035a94e0b6 nginx-0.0.1-2002-12-27-10:27:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 35
diff changeset
7 #include <ngx_config.h>
100
7ebc8b7fb816 nginx-0.0.1-2003-06-03-19:42:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 42
diff changeset
8 #include <ngx_core.h>
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
2628
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
11 #define NGX_UTF16_BUFLEN 256
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
12
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
13 static u_short *ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t len);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
14
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
15
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
16 /* FILE_FLAG_BACKUP_SEMANTICS allows to obtain a handle to a directory */
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
17
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
18 ngx_fd_t
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
19 ngx_open_file(u_char *name, u_long mode, u_long create, u_long access)
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
20 {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
21 u_short *u;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
22 ngx_fd_t fd;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
23 u_short utf16[NGX_UTF16_BUFLEN];
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
24
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
25 u = ngx_utf8_to_utf16(utf16, name, NGX_UTF16_BUFLEN);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
26
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
27 if (u == NULL) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
28 return INVALID_HANDLE_VALUE;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
29 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
30
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
31 fd = CreateFileW(u, mode,
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
32 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
33 NULL, create, FILE_FLAG_BACKUP_SEMANTICS, NULL);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
34
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
35 if (u != utf16) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
36 ngx_free(u);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
37 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
38
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
39 return fd;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
40 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
41
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
42
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
43 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
44 ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 {
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
46 long high_offset;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
47 u_long n;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
48 ngx_err_t err;
182
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
49 OVERLAPPED ovlp, *povlp;
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
51 if (ngx_win32_version < NGX_WIN_NT) {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
52
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
53 /*
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
54 * under Win9X the overlapped pointer must be NULL
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
55 * so we have to use SetFilePointer() to set the offset
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
56 */
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
57
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
58 if (file->offset != offset) {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
59
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
60 /*
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
61 * the maximum file size on the FAT16 is 2G, but on the FAT32
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
62 * the size is 4G so we have to use the high_offset
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
63 * because a single offset is signed value
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
64 */
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
65
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
66 high_offset = (long) (offset >> 32);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
67
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
68 if (SetFilePointer(file->fd, (long) offset, &high_offset,
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
69 FILE_BEGIN) == INVALID_SET_FILE_POINTER)
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
70 {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
71 /*
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
72 * INVALID_SET_FILE_POINTER is 0xffffffff and it can be valid
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
73 * value for large file so we need also to check GetLastError()
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
74 */
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
75
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
76 err = ngx_errno;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
77 if (err != NO_ERROR) {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
78 ngx_log_error(NGX_LOG_ERR, file->log, err,
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
79 "SeekFilePointer() failed");
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
80 return NGX_ERROR;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
81 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
82 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
83 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
84
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
85 povlp = NULL;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
86
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
87 } else {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
88 ovlp.Internal = 0;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
89 ovlp.InternalHigh = 0;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
90 ovlp.Offset = (u_long) offset;
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
91 ovlp.OffsetHigh = (u_long) (offset >> 32);
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
92 ovlp.hEvent = NULL;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
93
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
94 povlp = &ovlp;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
95 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
96
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
97 if (ReadFile(file->fd, buf, size, &n, povlp) == 0) {
2974
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
98 err = ngx_errno;
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
99
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
100 if (err == ERROR_HANDLE_EOF) {
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
101 return 0;
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
102 }
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
103
63f71723cd2a handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents: 2901
diff changeset
104 ngx_log_error(NGX_LOG_ERR, file->log, err, "ReadFile() failed");
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
105 return NGX_ERROR;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
106 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
107
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
108 file->offset += n;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
109
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
110 return n;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
111 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
112
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
113
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
114 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
115 ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
116 {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
117 long high_offset;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
118 u_long n;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
119 ngx_err_t err;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
120 OVERLAPPED ovlp, *povlp;
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
121
182
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
122 if (ngx_win32_version < NGX_WIN_NT) {
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
123
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
124 /*
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
125 * under Win9X the overlapped pointer must be NULL
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
126 * so we have to use SetFilePointer() to set the offset
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
127 */
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
128
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
129 if (file->offset != offset) {
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
130
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
131 /*
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
132 * the maximum file size on the FAT16 is 2G, but on the FAT32
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
133 * the size is 4G so we have to use high_offset
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
134 * because a single offset is signed value
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
135 */
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
136
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
137 high_offset = (long) (offset >> 32);
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
138 if (SetFilePointer(file->fd, (long) offset, &high_offset,
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
139 FILE_BEGIN) == INVALID_SET_FILE_POINTER)
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
140 {
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
141 /*
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
142 * INVALID_SET_FILE_POINTER is 0xffffffff and it can be valid
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
143 * value for large file so we need also to check GetLastError()
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
144 */
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
145
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
146 err = ngx_errno;
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
147 if (err != NO_ERROR) {
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
148 ngx_log_error(NGX_LOG_ERR, file->log, err,
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
149 "SeekFilePointer() failed");
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
150 return NGX_ERROR;
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
151 }
182
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
152 }
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
153 }
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
154
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
155 povlp = NULL;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
156
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
157 } else {
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
158 ovlp.Internal = 0;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
159 ovlp.InternalHigh = 0;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
160 ovlp.Offset = (u_long) offset;
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 280
diff changeset
161 ovlp.OffsetHigh = (u_long) (offset >> 32);
182
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
162 ovlp.hEvent = NULL;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
163
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
164 povlp = &ovlp;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
165 }
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
166
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 182
diff changeset
167 if (WriteFile(file->fd, buf, size, &n, povlp) == 0) {
182
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
168 ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, "WriteFile() failed");
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
169 return NGX_ERROR;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
170 }
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
171
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
172 file->offset += n;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
173
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
174 return n;
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
175 }
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
176
3c49eaf3f522 nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents: 123
diff changeset
177
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
178 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
179 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset,
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
180 ngx_pool_t *pool)
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
181 {
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
182 u_char *buf, *prev;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
183 size_t size;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
184 ssize_t total, n;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
185
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
186 total = 0;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
187
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
188 while (cl) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
189 buf = cl->buf->pos;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
190 prev = buf;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
191 size = 0;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
192
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
193 /* coalesce the neighbouring bufs */
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
194
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
195 while (cl && prev == cl->buf->pos) {
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
196 size += cl->buf->last - cl->buf->pos;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
197 prev = cl->buf->last;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
198 cl = cl->next;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
199 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
200
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
201 n = ngx_write_file(file, buf, size, offset);
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
202
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
203 if (n == NGX_ERROR) {
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
204 return NGX_ERROR;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
205 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
206
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
207 total += n;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
208 offset += n;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
209 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
210
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
211 return total;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
212 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
213
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
214
1634
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
215 ssize_t
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
216 ngx_read_fd(ngx_fd_t fd, void *buf, size_t size)
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
217 {
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
218 u_long n;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
219
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
220 if (ReadFile(fd, buf, size, &n, NULL) != 0) {
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
221 return (size_t) n;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
222 }
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
223
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
224 return -1;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
225 }
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
226
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
227
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
228 ssize_t
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
229 ngx_write_fd(ngx_fd_t fd, void *buf, size_t size)
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
230 {
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
231 u_long n;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
232
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
233 if (WriteFile(fd, buf, size, &n, NULL) != 0) {
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
234 return (size_t) n;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
235 }
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
236
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
237 return -1;
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
238 }
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
239
d3cbb96818f1 fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents: 1632
diff changeset
240
2769
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
241 ssize_t
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
242 ngx_write_console(ngx_fd_t fd, void *buf, size_t size)
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
243 {
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
244 u_long n;
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
245
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
246 (void) CharToOemBuff(buf, buf, size);
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
247
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
248 if (WriteFile(fd, buf, size, &n, NULL) != 0) {
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
249 return (size_t) n;
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
250 }
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
251
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
252 return -1;
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
253 }
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
254
9d986c4e796f introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents: 2687
diff changeset
255
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
256 ngx_int_t
1693
f4eb04fd8579 use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents: 1634
diff changeset
257 ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log)
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
258 {
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
259 u_char *name;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
260 ngx_int_t rc;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
261 ngx_uint_t collision;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
262 ngx_atomic_uint_t num;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
263
1693
f4eb04fd8579 use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents: 1634
diff changeset
264 name = ngx_alloc(to->len + 1 + 10 + 1 + sizeof("DELETE"), log);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
265 if (name == NULL) {
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
266 return NGX_ERROR;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
267 }
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
268
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
269 ngx_memcpy(name, to->data, to->len);
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
270
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
271 collision = 0;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
272
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
273 /* mutex_lock() (per cache or single ?) */
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
274
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
275 for ( ;; ) {
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
276 num = ngx_next_temp_number(collision);
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
277
2900
812445a822e3 add trailing zero to a file name
Igor Sysoev <igor@sysoev.ru>
parents: 2782
diff changeset
278 ngx_sprintf(name + to->len, ".%0muA.DELETE%Z", num);
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
279
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
280 if (MoveFile((const char *) to->data, (const char *) name) != 0) {
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
281 break;
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
282 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
283
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
284 collision = 1;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
285
2901
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
286 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno,
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
287 "MoveFile() \"%s\" to \"%s\" failed", to->data, name);
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
288 }
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
289
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
290 if (MoveFile((const char *) from->data, (const char *) to->data) == 0) {
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
291 rc = NGX_ERROR;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
292
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
293 } else {
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
294 rc = NGX_OK;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
295 }
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
296
1051
25114f8e2780 axe Win9X code
Igor Sysoev <igor@sysoev.ru>
parents: 727
diff changeset
297 if (DeleteFile((const char *) name) == 0) {
2901
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
298 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno,
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
299 "DeleteFile() \"%s\" failed", name);
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
300 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
301
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
302 if (rc == NGX_ERROR) {
2901
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
303 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno,
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
304 "MoveFile() \"%s\" to \"%s\" failed",
17da2da3a8f5 fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents: 2900
diff changeset
305 from->data, to->data);
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
306 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
307
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
308 /* mutex_unlock() */
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
309
1693
f4eb04fd8579 use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents: 1634
diff changeset
310 ngx_free(name);
f4eb04fd8579 use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents: 1634
diff changeset
311
184
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
312 return rc;
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
313 }
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
314
1bf718ce0dde nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
315
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
316 ngx_int_t
2462
90d5ddfedbb1 use GetFileAttributesEx() instead of GetFileAttributes()
Igor Sysoev <igor@sysoev.ru>
parents: 2459
diff changeset
317 ngx_file_info(u_char *file, ngx_file_info_t *sb)
185
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
318 {
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
319 WIN32_FILE_ATTRIBUTE_DATA fa;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
320
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
321 /* NT4 and Win98 */
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
322
2462
90d5ddfedbb1 use GetFileAttributesEx() instead of GetFileAttributes()
Igor Sysoev <igor@sysoev.ru>
parents: 2459
diff changeset
323 if (GetFileAttributesEx((char *) file, GetFileExInfoStandard, &fa) == 0) {
2782
4bd7825fab80 uniform ngx_file_info() interface with ngx_fd_info()
Igor Sysoev <igor@sysoev.ru>
parents: 2769
diff changeset
324 return NGX_FILE_ERROR;
185
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
325 }
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
326
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
327 sb->dwFileAttributes = fa.dwFileAttributes;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
328 sb->ftCreationTime = fa.ftCreationTime;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
329 sb->ftLastAccessTime = fa.ftLastAccessTime;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
330 sb->ftLastWriteTime = fa.ftLastWriteTime;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
331 sb->nFileSizeHigh = fa.nFileSizeHigh;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
332 sb->nFileSizeLow = fa.nFileSizeLow;
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
333
2782
4bd7825fab80 uniform ngx_file_info() interface with ngx_fd_info()
Igor Sysoev <igor@sysoev.ru>
parents: 2769
diff changeset
334 return ~NGX_FILE_ERROR;
185
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
335 }
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
336
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
337
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
338 ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
339 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s)
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
340 {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
341 uint64_t intervals;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
342 FILETIME ft;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
343
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
344 /* 116444736000000000 is commented in src/os/win32/ngx_time.c */
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
345
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
346 intervals = s * 10000000 + 116444736000000000;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
347
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
348 ft.dwLowDateTime = (DWORD) intervals;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
349 ft.dwHighDateTime = (DWORD) (intervals >> 32);
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
350
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
351 if (SetFileTime(fd, NULL, NULL, &ft) != 0) {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
352 return NGX_OK;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
353 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
354
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
355 return NGX_ERROR;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
356 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
357
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
358
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
359 char *
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
360 ngx_realpath(u_char *path, u_char *resolved)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
361 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
362 /* STUB */
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
363 return (char *) path;
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
364 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
365
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
366
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
367 ngx_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
368 ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
369 {
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
370 ngx_cpystrn(name->data + name->len, NGX_DIR_MASK, NGX_DIR_MASK_LEN + 1);
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
371
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
372 dir->dir = FindFirstFile((const char *) name->data, &dir->finddata);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
373
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
374 if (dir->dir == INVALID_HANDLE_VALUE) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
375 return NGX_ERROR;
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
376 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
377
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
378 dir->valid_info = 1;
2234
c7c319896bb4 *) autoconfigure struct dirent capabilities
Igor Sysoev <igor@sysoev.ru>
parents: 2134
diff changeset
379 dir->valid_type = 1;
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
380 dir->ready = 1;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
381
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
382 return NGX_OK;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
383 }
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
384
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
385
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
386 ngx_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
387 ngx_read_dir(ngx_dir_t *dir)
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
388 {
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
389 if (dir->ready) {
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
390 dir->ready = 0;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
391 return NGX_OK;
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
392 }
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
393
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
394 if (FindNextFile(dir->dir, &dir->finddata) != 0) {
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
395 return NGX_OK;
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
396 }
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
397
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
398 return NGX_ERROR;
186
c1f3a3c7c5db nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 185
diff changeset
399 }
185
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
400
d5f50cefc322 nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 184
diff changeset
401
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
402 ngx_int_t
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
403 ngx_open_glob(ngx_glob_t *gl)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
404 {
2459
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
405 u_char *p;
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
406 size_t len;
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
407 ngx_err_t err;
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
408
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
409 gl->dir = FindFirstFile((const char *) gl->pattern, &gl->finddata);
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
410
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
411 if (gl->dir == INVALID_HANDLE_VALUE) {
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
412
2459
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
413 err = ngx_errno;
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
414
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
415 if ((err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND)
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
416 && gl->test)
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
417 {
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
418 gl->no_match = 1;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
419 return NGX_OK;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
420 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
421
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
422 return NGX_ERROR;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
423 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
424
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
425 for (p = gl->pattern; *p; p++) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
426 if (*p == '/') {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
427 gl->last = p + 1 - gl->pattern;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
428 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
429 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
430
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
431 len = ngx_strlen(gl->finddata.cFileName);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
432 gl->name.len = gl->last + len;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
433
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
434 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
435 if (gl->name.data == NULL) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
436 return NGX_ERROR;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
437 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
438
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
439 ngx_memcpy(gl->name.data, gl->pattern, gl->last);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
440 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName,
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
441 len + 1);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
442
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
443 gl->ready = 1;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
444
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
445 return NGX_OK;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
446 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
447
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
448
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
449 ngx_int_t
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
450 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
451 {
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
452 size_t len;
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
453 ngx_err_t err;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
454
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
455 if (gl->no_match) {
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
456 return NGX_DONE;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
457 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
458
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
459 if (gl->ready) {
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
460 *name = gl->name;
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
461
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
462 gl->ready = 0;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
463 return NGX_OK;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
464 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
465
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
466 ngx_free(gl->name.data);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
467 gl->name.data = NULL;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
468
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
469 if (FindNextFile(gl->dir, &gl->finddata) != 0) {
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
470
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
471 len = ngx_strlen(gl->finddata.cFileName);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
472 gl->name.len = gl->last + len;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
473
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
474 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
475 if (gl->name.data == NULL) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
476 return NGX_ERROR;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
477 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
478
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
479 ngx_memcpy(gl->name.data, gl->pattern, gl->last);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
480 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName,
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
481 len + 1);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
482
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
483 *name = gl->name;
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
484
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
485 return NGX_OK;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
486 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
487
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
488 err = ngx_errno;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
489
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
490 if (err == NGX_ENOMOREFILES) {
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
491 return NGX_DONE;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
492 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
493
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
494 ngx_log_error(NGX_LOG_ALERT, gl->log, err,
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
495 "FindNextFile(%s) failed", gl->pattern);
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
496
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
497 return NGX_ERROR;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
498 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
499
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
500
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
501 void
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
502 ngx_close_glob(ngx_glob_t *gl)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
503 {
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
504 if (gl->name.data) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
505 ngx_free(gl->name.data);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
506 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
507
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
508 if (gl->dir == INVALID_HANDLE_VALUE) {
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
509 return;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
510 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
511
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
512 if (FindClose(gl->dir) == 0) {
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
513 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno,
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
514 "FindClose(%s) failed", gl->pattern);
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
515 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
516 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
517
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
518
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
519 ngx_int_t
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
520 ngx_de_info(u_char *name, ngx_dir_t *dir)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
521 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
522 return NGX_OK;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
523 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
524
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
525
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
526 ngx_int_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
527 ngx_de_link_info(u_char *name, ngx_dir_t *dir)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
528 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
529 return NGX_OK;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
530 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
531
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
532
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
533 ngx_int_t
2248
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
534 ngx_directio_on(ngx_fd_t fd)
2134
13652cba8633 fix building by bcc broken in r2130
Igor Sysoev <igor@sysoev.ru>
parents: 1980
diff changeset
535 {
13652cba8633 fix building by bcc broken in r2130
Igor Sysoev <igor@sysoev.ru>
parents: 1980
diff changeset
536 return 0;
13652cba8633 fix building by bcc broken in r2130
Igor Sysoev <igor@sysoev.ru>
parents: 1980
diff changeset
537 }
2248
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
538
2615
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
539
2248
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
540 ngx_int_t
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
541 ngx_directio_off(ngx_fd_t fd)
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
542 {
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
543 return 0;
1adec90a0e46 disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents: 2234
diff changeset
544 }
2615
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
545
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
546
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
547 size_t
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
548 ngx_fs_bsize(u_char *name)
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
549 {
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
550 u_char root[4];
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
551 u_long sc, bs, nfree, ncl;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
552
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
553 if (name[2] == ':') {
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
554 ngx_cpystrn(root, name, 4);
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
555 name = root;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
556 }
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
557
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
558 if (GetDiskFreeSpace((const char *) name, &sc, &bs, &nfree, &ncl) == 0) {
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
559 return 512;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
560 }
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
561
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
562 return sc * bs;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
563 }
2628
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
564
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
565
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
566 static u_short *
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
567 ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t len)
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
568 {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
569 u_char *p;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
570 u_short *u, *last;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
571 uint32_t n;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
572
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
573 p = utf8;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
574 u = utf16;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
575 last = utf16 + len;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
576
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
577 while (u < last) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
578
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
579 if (*p < 0x80) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
580 *u = (u_short) *p;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
581
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
582 if (*p == 0) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
583 return utf16;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
584 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
585
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
586 u++;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
587 p++;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
588
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
589 continue;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
590 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
591
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
592 n = ngx_utf8_decode(&p, 4);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
593
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
594 if (n > 0xffff) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
595 free(utf16);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
596 ngx_set_errno(NGX_EILSEQ);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
597 return NULL;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
598 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
599
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
600 *u++ = (u_short) n;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
601 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
602
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
603 /* the given buffer is not enough, allocate a new one */
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
604
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
605 u = malloc(((p - utf8) + ngx_strlen(p) + 1) * sizeof(u_short));
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
606 if (u == NULL) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
607 return NULL;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
608 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
609
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
610 ngx_memcpy(u, utf16, len * 2);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
611
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
612 utf16 = u;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
613 u += len;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
614
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
615 for ( ;; ) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
616
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
617 if (*p < 0x80) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
618 *u = (u_short) *p;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
619
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
620 if (*p == 0) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
621 return utf16;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
622 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
623
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
624 u++;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
625 p++;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
626
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
627 continue;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
628 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
629
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
630 n = ngx_utf8_decode(&p, 4);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
631
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
632 if (n > 0xffff) {
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
633 free(utf16);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
634 ngx_set_errno(NGX_EILSEQ);
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
635 return NULL;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
636 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
637
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
638 *u++ = (u_short) n;
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
639 }
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
640
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
641 /* unreachable */
64a10d6b97bd win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents: 2615
diff changeset
642 }