Mercurial > hg > nginx
annotate src/os/win32/ngx_files.c @ 9299:2706b60dc225 default tip
Core: error logging rate limiting.
With this change, error logging to files can be rate-limited with
the "rate=" parameter. The parameter specifies allowed log messages
rate to a particular file (per worker), in messages per second (m/s).
By default, "rate=1000m/s" is used.
Rate limiting is implemented using the "leaky bucket" method, similarly
to the limit_req module.
Maximum burst size is set to the number of log messages per second
for each severity level, so "error" messages are logged even if the
rate limit is hit by "info" messages (but not vice versa). When the
limit is reached for a particular level, the "too many log messages,
limiting" message is logged at this level.
If debug logging is enabled, either for the particular log file or for
the particular connection, rate limiting is not used.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 25 Jun 2024 22:58:56 +0300 |
parents | 2acb00b9b5ff |
children |
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 |
4412 | 4 * Copyright (C) Nginx, Inc. |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
344
diff
changeset
|
5 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
344
diff
changeset
|
6 |
42
cd035a94e0b6
nginx-0.0.1-2002-12-27-10:27:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
35
diff
changeset
|
7 |
cd035a94e0b6
nginx-0.0.1-2002-12-27-10:27:47 import
Igor Sysoev <igor@sysoev.ru>
parents:
35
diff
changeset
|
8 #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
|
9 #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
|
10 |
708f8bb772ec
nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
12 #define NGX_UTF16_BUFLEN 256 |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
13 #define NGX_UTF8_BUFLEN 512 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
14 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
15 static ngx_int_t ngx_win32_check_filename(u_short *u, size_t len, |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
16 ngx_uint_t dirname); |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
17 static u_short *ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t *len, |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
18 size_t reserved); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
19 static u_char *ngx_utf16_to_utf8(u_char *utf8, u_short *utf16, size_t *len, |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
20 size_t *allocated); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
21 uint32_t ngx_utf16_decode(u_short **u, size_t n); |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
22 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
23 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
24 /* 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
|
25 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
26 ngx_fd_t |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
27 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
|
28 { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
29 size_t len; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
30 u_short *u; |
3137
179f6dfcb7fe
preserve errno while ngx_free()
Igor Sysoev <igor@sysoev.ru>
parents:
2974
diff
changeset
|
31 ngx_fd_t fd; |
179f6dfcb7fe
preserve errno while ngx_free()
Igor Sysoev <igor@sysoev.ru>
parents:
2974
diff
changeset
|
32 ngx_err_t err; |
179f6dfcb7fe
preserve errno while ngx_free()
Igor Sysoev <igor@sysoev.ru>
parents:
2974
diff
changeset
|
33 u_short utf16[NGX_UTF16_BUFLEN]; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
34 |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
35 len = NGX_UTF16_BUFLEN; |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
36 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
2628
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 if (u == NULL) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
39 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
|
40 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
41 |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
42 fd = INVALID_HANDLE_VALUE; |
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
43 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
44 if (create == NGX_FILE_OPEN |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
45 && ngx_win32_check_filename(u, len, 0) != NGX_OK) |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
46 { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
47 goto failed; |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
48 } |
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
49 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
50 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
|
51 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
|
52 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
|
53 |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
54 failed: |
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
55 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
56 if (u != utf16) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
57 err = ngx_errno; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
58 ngx_free(u); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
59 ngx_set_errno(err); |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
60 } |
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
61 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
62 return fd; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
63 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
64 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
65 |
8139
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
66 ngx_fd_t |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
67 ngx_open_tempfile(u_char *name, ngx_uint_t persistent, ngx_uint_t access) |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
68 { |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
69 size_t len; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
70 u_short *u; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
71 ngx_fd_t fd; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
72 ngx_err_t err; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
73 u_short utf16[NGX_UTF16_BUFLEN]; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
74 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
75 len = NGX_UTF16_BUFLEN; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
76 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
77 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
78 if (u == NULL) { |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
79 return INVALID_HANDLE_VALUE; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
80 } |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
81 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
82 fd = CreateFileW(u, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
83 GENERIC_READ|GENERIC_WRITE, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
84 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
85 NULL, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
86 CREATE_NEW, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
87 persistent ? 0: |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
88 FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE, |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
89 NULL); |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
90 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
91 if (u != utf16) { |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
92 err = ngx_errno; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
93 ngx_free(u); |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
94 ngx_set_errno(err); |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
95 } |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
96 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
97 return fd; |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
98 } |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
99 |
e818ed227735
Win32: non-ASCII names support in ngx_open_tempfile().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8138
diff
changeset
|
100 |
561 | 101 ssize_t |
102 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
|
103 { |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
280
diff
changeset
|
104 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
|
105 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
|
106 OVERLAPPED ovlp, *povlp; |
8
708f8bb772ec
nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
107 |
3156 | 108 ovlp.Internal = 0; |
109 ovlp.InternalHigh = 0; | |
110 ovlp.Offset = (u_long) offset; | |
111 ovlp.OffsetHigh = (u_long) (offset >> 32); | |
112 ovlp.hEvent = NULL; | |
461 | 113 |
3156 | 114 povlp = &ovlp; |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
115 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
116 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
|
117 err = ngx_errno; |
63f71723cd2a
handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents:
2901
diff
changeset
|
118 |
63f71723cd2a
handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents:
2901
diff
changeset
|
119 if (err == ERROR_HANDLE_EOF) { |
63f71723cd2a
handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents:
2901
diff
changeset
|
120 return 0; |
63f71723cd2a
handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents:
2901
diff
changeset
|
121 } |
63f71723cd2a
handle Win32 ReadFile() EOF state in Unix way
Igor Sysoev <igor@sysoev.ru>
parents:
2901
diff
changeset
|
122 |
3157
a2c1b4f74ea7
log file name for read/write errors
Igor Sysoev <igor@sysoev.ru>
parents:
3156
diff
changeset
|
123 ngx_log_error(NGX_LOG_ERR, file->log, err, |
a2c1b4f74ea7
log file name for read/write errors
Igor Sysoev <igor@sysoev.ru>
parents:
3156
diff
changeset
|
124 "ReadFile() \"%s\" failed", file->name.data); |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
125 return NGX_ERROR; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
126 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
127 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
128 file->offset += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
129 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
130 return n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
131 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
132 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
133 |
561 | 134 ssize_t |
135 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
|
136 { |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
280
diff
changeset
|
137 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
|
138 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
|
139 |
3156 | 140 ovlp.Internal = 0; |
141 ovlp.InternalHigh = 0; | |
142 ovlp.Offset = (u_long) offset; | |
143 ovlp.OffsetHigh = (u_long) (offset >> 32); | |
144 ovlp.hEvent = NULL; | |
183
4c698194c56d
nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
182
diff
changeset
|
145 |
3156 | 146 povlp = &ovlp; |
183
4c698194c56d
nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
182
diff
changeset
|
147 |
4c698194c56d
nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
182
diff
changeset
|
148 if (WriteFile(file->fd, buf, size, &n, povlp) == 0) { |
3157
a2c1b4f74ea7
log file name for read/write errors
Igor Sysoev <igor@sysoev.ru>
parents:
3156
diff
changeset
|
149 ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, |
a2c1b4f74ea7
log file name for read/write errors
Igor Sysoev <igor@sysoev.ru>
parents:
3156
diff
changeset
|
150 "WriteFile() \"%s\" failed", file->name.data); |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
151 return NGX_ERROR; |
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 |
3158 | 154 if (n != size) { |
155 ngx_log_error(NGX_LOG_CRIT, file->log, 0, | |
156 "WriteFile() \"%s\" has written only %ul of %uz", | |
157 file->name.data, n, size); | |
158 return NGX_ERROR; | |
159 } | |
160 | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
161 file->offset += n; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
162 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
163 return n; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
164 } |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
165 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
166 |
561 | 167 ssize_t |
168 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset, | |
169 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
|
170 { |
292
a472bfb778b3
nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
171 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
|
172 size_t size; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
173 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
|
174 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
175 total = 0; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
176 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
177 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
|
178 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
|
179 prev = buf; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
180 size = 0; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
181 |
344
e366ba5db8f8
nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents:
343
diff
changeset
|
182 /* 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
|
183 |
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
|
184 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
|
185 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
|
186 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
|
187 cl = cl->next; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
188 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
189 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
190 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
|
191 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
192 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
|
193 return NGX_ERROR; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
194 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
195 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
196 total += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
197 offset += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
198 } |
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 return total; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
201 } |
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 |
1634
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
204 ssize_t |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
205 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
|
206 { |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
207 u_long n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
208 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
209 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
|
210 return (size_t) n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
211 } |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
212 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
213 return -1; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
214 } |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
215 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
216 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
217 ssize_t |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
218 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
|
219 { |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
220 u_long n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
221 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
222 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
|
223 return (size_t) n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
224 } |
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 return -1; |
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 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
229 |
2769
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
230 ssize_t |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
231 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
|
232 { |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
233 u_long n; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
234 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
235 (void) CharToOemBuff(buf, buf, size); |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
236 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
237 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
|
238 return (size_t) n; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
239 } |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
240 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
241 return -1; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
242 } |
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 |
8137
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
245 ngx_int_t |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
246 ngx_delete_file(u_char *name) |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
247 { |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
248 long rc; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
249 size_t len; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
250 u_short *u; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
251 ngx_err_t err; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
252 u_short utf16[NGX_UTF16_BUFLEN]; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
253 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
254 len = NGX_UTF16_BUFLEN; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
255 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
256 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
257 if (u == NULL) { |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
258 return NGX_FILE_ERROR; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
259 } |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
260 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
261 rc = NGX_FILE_ERROR; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
262 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
263 if (ngx_win32_check_filename(u, len, 0) != NGX_OK) { |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
264 goto failed; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
265 } |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
266 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
267 rc = DeleteFileW(u); |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
268 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
269 failed: |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
270 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
271 if (u != utf16) { |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
272 err = ngx_errno; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
273 ngx_free(u); |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
274 ngx_set_errno(err); |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
275 } |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
276 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
277 return rc; |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
278 } |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
279 |
4b06186670ed
Win32: non-ASCII names support in ngx_delete_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8136
diff
changeset
|
280 |
8138
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
281 ngx_int_t |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
282 ngx_rename_file(u_char *from, u_char *to) |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
283 { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
284 long rc; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
285 size_t len; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
286 u_short *fu, *tu; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
287 ngx_err_t err; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
288 u_short utf16f[NGX_UTF16_BUFLEN]; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
289 u_short utf16t[NGX_UTF16_BUFLEN]; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
290 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
291 len = NGX_UTF16_BUFLEN; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
292 fu = ngx_utf8_to_utf16(utf16f, from, &len, 0); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
293 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
294 if (fu == NULL) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
295 return NGX_FILE_ERROR; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
296 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
297 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
298 rc = NGX_FILE_ERROR; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
299 tu = NULL; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
300 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
301 if (ngx_win32_check_filename(fu, len, 0) != NGX_OK) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
302 goto failed; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
303 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
304 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
305 len = NGX_UTF16_BUFLEN; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
306 tu = ngx_utf8_to_utf16(utf16t, to, &len, 0); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
307 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
308 if (tu == NULL) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
309 goto failed; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
310 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
311 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
312 if (ngx_win32_check_filename(tu, len, 1) != NGX_OK) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
313 goto failed; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
314 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
315 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
316 rc = MoveFileW(fu, tu); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
317 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
318 failed: |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
319 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
320 if (fu != utf16f) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
321 err = ngx_errno; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
322 ngx_free(fu); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
323 ngx_set_errno(err); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
324 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
325 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
326 if (tu && tu != utf16t) { |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
327 err = ngx_errno; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
328 ngx_free(tu); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
329 ngx_set_errno(err); |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
330 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
331 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
332 return rc; |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
333 } |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
334 |
96d894b38667
Win32: non-ASCII names support in ngx_rename_file().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8137
diff
changeset
|
335 |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
336 ngx_err_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
|
337 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
|
338 { |
499 | 339 u_char *name; |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
340 ngx_err_t err; |
499 | 341 ngx_uint_t collision; |
342 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
|
343 |
4017
4f4086cf1a07
Fix buffer overrun under Windows.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3651
diff
changeset
|
344 name = ngx_alloc(to->len + 1 + NGX_ATOMIC_T_LEN + 1 + sizeof("DELETE"), |
4f4086cf1a07
Fix buffer overrun under Windows.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3651
diff
changeset
|
345 log); |
501 | 346 if (name == NULL) { |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
347 return NGX_ENOMEM; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
348 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
349 |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
350 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
|
351 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
352 collision = 0; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
353 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
354 /* 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
|
355 |
499 | 356 for ( ;; ) { |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
357 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
|
358 |
2900
812445a822e3
add trailing zero to a file name
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
359 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
|
360 |
8136
37a184966ab3
Win32: reworked ngx_win32_rename_file() to use nginx wrappers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8135
diff
changeset
|
361 if (ngx_rename_file(to->data, name) != NGX_FILE_ERROR) { |
499 | 362 break; |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
363 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
364 |
8135
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
365 err = ngx_errno; |
499 | 366 |
8135
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
367 if (err == NGX_EEXIST || err == NGX_EEXIST_FILE) { |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
368 collision = 1; |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
369 continue; |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
370 } |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
371 |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
372 ngx_log_error(NGX_LOG_CRIT, log, err, |
2901
17da2da3a8f5
fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents:
2900
diff
changeset
|
373 "MoveFile() \"%s\" to \"%s\" failed", to->data, name); |
8135
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
374 goto failed; |
499 | 375 } |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
376 |
8136
37a184966ab3
Win32: reworked ngx_win32_rename_file() to use nginx wrappers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8135
diff
changeset
|
377 if (ngx_rename_file(from->data, to->data) == NGX_FILE_ERROR) { |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
378 err = ngx_errno; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
379 |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
380 } else { |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
381 err = 0; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
382 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
383 |
8136
37a184966ab3
Win32: reworked ngx_win32_rename_file() to use nginx wrappers.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8135
diff
changeset
|
384 if (ngx_delete_file(name) == NGX_FILE_ERROR) { |
2901
17da2da3a8f5
fix logging in ngx_win32_rename_file()
Igor Sysoev <igor@sysoev.ru>
parents:
2900
diff
changeset
|
385 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
|
386 "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
|
387 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
388 |
8135
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
389 failed: |
8880fe0b193c
Win32: reworked ngx_win32_rename_file() to check errors.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8134
diff
changeset
|
390 |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
391 /* mutex_unlock() */ |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
392 |
1693
f4eb04fd8579
use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents:
1634
diff
changeset
|
393 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
|
394 |
3382
6be1f25bae90
fix Win32 error messages when an temporary file replaces an existent file:
Igor Sysoev <igor@sysoev.ru>
parents:
3200
diff
changeset
|
395 return err; |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
396 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
397 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
398 |
561 | 399 ngx_int_t |
2462
90d5ddfedbb1
use GetFileAttributesEx() instead of GetFileAttributes()
Igor Sysoev <igor@sysoev.ru>
parents:
2459
diff
changeset
|
400 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
|
401 { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
402 size_t len; |
3138
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
403 long rc; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
404 u_short *u; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
405 ngx_err_t err; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
406 WIN32_FILE_ATTRIBUTE_DATA fa; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
407 u_short utf16[NGX_UTF16_BUFLEN]; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
408 |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
409 len = NGX_UTF16_BUFLEN; |
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
410 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
411 u = ngx_utf8_to_utf16(utf16, file, &len, 0); |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
412 |
3138
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
413 if (u == NULL) { |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
414 return NGX_FILE_ERROR; |
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
415 } |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
416 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
417 rc = NGX_FILE_ERROR; |
3138
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
418 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
419 if (ngx_win32_check_filename(u, len, 0) != NGX_OK) { |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
420 goto failed; |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
421 } |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
422 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
423 rc = GetFileAttributesExW(u, GetFileExInfoStandard, &fa); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
424 |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
432 failed: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
433 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
434 if (u != utf16) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
435 err = ngx_errno; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
436 ngx_free(u); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
437 ngx_set_errno(err); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
438 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
439 |
3138
a2479937dbd8
win32 ngx_file_info() utf8 support
Igor Sysoev <igor@sysoev.ru>
parents:
3137
diff
changeset
|
440 return rc; |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
441 } |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
442 |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
443 |
561 | 444 ngx_int_t |
681 | 445 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) |
446 { | |
447 uint64_t intervals; | |
448 FILETIME ft; | |
449 | |
450 /* 116444736000000000 is commented in src/os/win32/ngx_time.c */ | |
451 | |
452 intervals = s * 10000000 + 116444736000000000; | |
453 | |
454 ft.dwLowDateTime = (DWORD) intervals; | |
455 ft.dwHighDateTime = (DWORD) (intervals >> 32); | |
456 | |
457 if (SetFileTime(fd, NULL, NULL, &ft) != 0) { | |
458 return NGX_OK; | |
459 } | |
460 | |
461 return NGX_ERROR; | |
462 } | |
463 | |
464 | |
3651 | 465 ngx_int_t |
466 ngx_create_file_mapping(ngx_file_mapping_t *fm) | |
467 { | |
468 LARGE_INTEGER size; | |
469 | |
470 fm->fd = ngx_open_file(fm->name, NGX_FILE_RDWR, NGX_FILE_TRUNCATE, | |
471 NGX_FILE_DEFAULT_ACCESS); | |
7086 | 472 |
3651 | 473 if (fm->fd == NGX_INVALID_FILE) { |
474 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
475 ngx_open_file_n " \"%s\" failed", fm->name); | |
476 return NGX_ERROR; | |
477 } | |
478 | |
479 fm->handle = NULL; | |
480 | |
481 size.QuadPart = fm->size; | |
482 | |
483 if (SetFilePointerEx(fm->fd, size, NULL, FILE_BEGIN) == 0) { | |
484 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
485 "SetFilePointerEx(\"%s\", %uz) failed", | |
486 fm->name, fm->size); | |
487 goto failed; | |
488 } | |
489 | |
490 if (SetEndOfFile(fm->fd) == 0) { | |
491 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
492 "SetEndOfFile() \"%s\" failed", fm->name); | |
493 goto failed; | |
494 } | |
495 | |
496 fm->handle = CreateFileMapping(fm->fd, NULL, PAGE_READWRITE, | |
497 (u_long) ((off_t) fm->size >> 32), | |
498 (u_long) ((off_t) fm->size & 0xffffffff), | |
499 NULL); | |
500 if (fm->handle == NULL) { | |
501 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
502 "CreateFileMapping(%s, %uz) failed", | |
503 fm->name, fm->size); | |
504 goto failed; | |
505 } | |
506 | |
507 fm->addr = MapViewOfFile(fm->handle, FILE_MAP_WRITE, 0, 0, 0); | |
508 | |
509 if (fm->addr != NULL) { | |
510 return NGX_OK; | |
511 } | |
512 | |
513 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno, | |
514 "MapViewOfFile(%uz) of file mapping \"%s\" failed", | |
515 fm->size, fm->name); | |
516 | |
517 failed: | |
518 | |
519 if (fm->handle) { | |
520 if (CloseHandle(fm->handle) == 0) { | |
521 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
522 "CloseHandle() of file mapping \"%s\" failed", | |
523 fm->name); | |
524 } | |
525 } | |
526 | |
527 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) { | |
528 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
529 ngx_close_file_n " \"%s\" failed", fm->name); | |
530 } | |
531 | |
532 return NGX_ERROR; | |
533 } | |
534 | |
535 | |
536 void | |
537 ngx_close_file_mapping(ngx_file_mapping_t *fm) | |
538 { | |
539 if (UnmapViewOfFile(fm->addr) == 0) { | |
540 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
541 "UnmapViewOfFile(%p) of file mapping \"%s\" failed", | |
542 fm->addr, &fm->name); | |
543 } | |
544 | |
545 if (CloseHandle(fm->handle) == 0) { | |
546 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
547 "CloseHandle() of file mapping \"%s\" failed", | |
548 &fm->name); | |
549 } | |
550 | |
551 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) { | |
552 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno, | |
553 ngx_close_file_n " \"%s\" failed", fm->name); | |
554 } | |
555 } | |
556 | |
557 | |
4564
13eb3193cd63
Fixed win32 build after realpath changes in r4559.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4412
diff
changeset
|
558 u_char * |
2259 | 559 ngx_realpath(u_char *path, u_char *resolved) |
560 { | |
561 /* STUB */ | |
4564
13eb3193cd63
Fixed win32 build after realpath changes in r4559.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4412
diff
changeset
|
562 return path; |
2259 | 563 } |
564 | |
565 | |
8132
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
566 size_t |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
567 ngx_getcwd(u_char *buf, size_t size) |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
568 { |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
569 u_char *p; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
570 size_t n; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
571 u_short utf16[NGX_MAX_PATH]; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
572 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
573 n = GetCurrentDirectoryW(NGX_MAX_PATH, utf16); |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
574 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
575 if (n == 0) { |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
576 return 0; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
577 } |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
578 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
579 if (n > NGX_MAX_PATH) { |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
580 ngx_set_errno(ERROR_INSUFFICIENT_BUFFER); |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
581 return 0; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
582 } |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
583 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
584 p = ngx_utf16_to_utf8(buf, utf16, &size, NULL); |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
585 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
586 if (p == NULL) { |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
587 return 0; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
588 } |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
589 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
590 if (p != buf) { |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
591 ngx_free(p); |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
592 ngx_set_errno(ERROR_INSUFFICIENT_BUFFER); |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
593 return 0; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
594 } |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
595 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
596 return size - 1; |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
597 } |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
598 |
8ea2e052feb4
Win32: non-ASCII directory names support in ngx_getcwd().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8131
diff
changeset
|
599 |
561 | 600 ngx_int_t |
601 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
|
602 { |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
603 size_t len; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
604 u_short *u, *p; |
7433
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
605 ngx_err_t err; |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
606 u_short utf16[NGX_UTF16_BUFLEN]; |
7433
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
607 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
608 len = NGX_UTF16_BUFLEN - 2; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
609 u = ngx_utf8_to_utf16(utf16, name->data, &len, 2); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
610 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
611 if (u == NULL) { |
7433
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
612 return NGX_ERROR; |
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
613 } |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
614 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
615 if (ngx_win32_check_filename(u, len, 0) != NGX_OK) { |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
616 goto failed; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
617 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
618 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
619 p = &u[len - 1]; |
577 | 620 |
7433
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
621 *p++ = '/'; |
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
622 *p++ = '*'; |
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
623 *p = '\0'; |
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
624 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
625 dir->dir = FindFirstFileW(u, &dir->finddata); |
5749
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
626 |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
627 if (dir->dir == INVALID_HANDLE_VALUE) { |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
628 goto failed; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
629 } |
577 | 630 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
631 if (u != utf16) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
632 ngx_free(u); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
633 } |
7433
061ec464813f
Win32: removed NGX_DIR_MASK concept.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7086
diff
changeset
|
634 |
457 | 635 dir->valid_info = 1; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
636 dir->ready = 1; |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
637 dir->name = NULL; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
638 dir->allocated = 0; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
639 |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
640 return NGX_OK; |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
641 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
642 failed: |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
643 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
644 if (u != utf16) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
645 err = ngx_errno; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
646 ngx_free(u); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
647 ngx_set_errno(err); |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
648 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
649 |
681 | 650 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
|
651 } |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
652 |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
653 |
501 | 654 ngx_int_t |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
655 ngx_read_dir(ngx_dir_t *dir) |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
656 { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
657 u_char *name; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
658 size_t len, allocated; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
659 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
660 if (dir->ready) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
661 dir->ready = 0; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
662 goto convert; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
663 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
664 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
665 if (FindNextFileW(dir->dir, &dir->finddata) != 0) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
666 dir->type = 1; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
667 goto convert; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
668 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
669 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
670 return NGX_ERROR; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
671 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
672 convert: |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
673 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
674 name = dir->name; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
675 len = dir->allocated; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
676 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
677 name = ngx_utf16_to_utf8(name, dir->finddata.cFileName, &len, &allocated); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
678 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
679 if (name == NULL) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
680 return NGX_ERROR; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
681 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
682 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
683 if (name != dir->name) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
684 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
685 if (dir->name) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
686 ngx_free(dir->name); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
687 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
688 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
689 dir->name = name; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
690 dir->allocated = allocated; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
691 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
692 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
693 dir->namelen = len - 1; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
694 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
695 return NGX_OK; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
696 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
697 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
698 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
699 ngx_int_t |
5749
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
700 ngx_close_dir(ngx_dir_t *dir) |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
701 { |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
702 if (dir->name) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
703 ngx_free(dir->name); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
704 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
705 |
5749
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
706 if (FindClose(dir->dir) == 0) { |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
707 return NGX_ERROR; |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
708 } |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
709 |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
710 return NGX_OK; |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
711 } |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
712 |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
713 |
a680bf4dddd5
Win32: ngx_open_dir() and ngx_close_dir() fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5501
diff
changeset
|
714 ngx_int_t |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
715 ngx_create_dir(u_char *name, ngx_uint_t access) |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
716 { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
717 long rc; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
718 size_t len; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
719 u_short *u; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
720 ngx_err_t err; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
721 u_short utf16[NGX_UTF16_BUFLEN]; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
722 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
723 len = NGX_UTF16_BUFLEN; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
724 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
725 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
726 if (u == NULL) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
727 return NGX_FILE_ERROR; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
728 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
729 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
730 rc = NGX_FILE_ERROR; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
731 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
732 if (ngx_win32_check_filename(u, len, 1) != NGX_OK) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
733 goto failed; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
734 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
735 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
736 rc = CreateDirectoryW(u, NULL); |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
737 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
738 failed: |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
739 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
740 if (u != utf16) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
741 err = ngx_errno; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
742 ngx_free(u); |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
743 ngx_set_errno(err); |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
744 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
745 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
746 return rc; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
747 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
748 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
749 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
750 ngx_int_t |
8134
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
751 ngx_delete_dir(u_char *name) |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
752 { |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
753 long rc; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
754 size_t len; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
755 u_short *u; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
756 ngx_err_t err; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
757 u_short utf16[NGX_UTF16_BUFLEN]; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
758 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
759 len = NGX_UTF16_BUFLEN; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
760 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
761 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
762 if (u == NULL) { |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
763 return NGX_FILE_ERROR; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
764 } |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
765 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
766 rc = NGX_FILE_ERROR; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
767 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
768 if (ngx_win32_check_filename(u, len, 0) != NGX_OK) { |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
769 goto failed; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
770 } |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
771 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
772 rc = RemoveDirectoryW(u); |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
773 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
774 failed: |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
775 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
776 if (u != utf16) { |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
777 err = ngx_errno; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
778 ngx_free(u); |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
779 ngx_set_errno(err); |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
780 } |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
781 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
782 return rc; |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
783 } |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
784 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
785 |
7d60e4584d9e
Win32: non-ASCII directory names support in ngx_delete_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8133
diff
changeset
|
786 ngx_int_t |
727 | 787 ngx_open_glob(ngx_glob_t *gl) |
788 { | |
2459 | 789 u_char *p; |
790 size_t len; | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
791 u_short *u; |
2459 | 792 ngx_err_t err; |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
793 u_short utf16[NGX_UTF16_BUFLEN]; |
1632 | 794 |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
795 len = NGX_UTF16_BUFLEN; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
796 u = ngx_utf8_to_utf16(utf16, gl->pattern, &len, 0); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
797 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
798 if (u == NULL) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
799 return NGX_ERROR; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
800 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
801 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
802 gl->dir = FindFirstFileW(u, &gl->finddata); |
727 | 803 |
804 if (gl->dir == INVALID_HANDLE_VALUE) { | |
1980 | 805 |
2459 | 806 err = ngx_errno; |
807 | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
808 if (u != utf16) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
809 ngx_free(u); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
810 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
811 |
2459 | 812 if ((err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND) |
813 && gl->test) | |
814 { | |
1980 | 815 gl->no_match = 1; |
816 return NGX_OK; | |
817 } | |
818 | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
819 ngx_set_errno(err); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
820 |
727 | 821 return NGX_ERROR; |
822 } | |
823 | |
1632 | 824 for (p = gl->pattern; *p; p++) { |
825 if (*p == '/') { | |
826 gl->last = p + 1 - gl->pattern; | |
827 } | |
828 } | |
829 | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
830 if (u != utf16) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
831 ngx_free(u); |
1632 | 832 } |
833 | |
727 | 834 gl->ready = 1; |
835 | |
836 return NGX_OK; | |
837 } | |
838 | |
839 | |
840 ngx_int_t | |
841 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name) | |
842 { | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
843 u_char *p; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
844 size_t len; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
845 ngx_err_t err; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
846 u_char utf8[NGX_UTF8_BUFLEN]; |
727 | 847 |
1980 | 848 if (gl->no_match) { |
849 return NGX_DONE; | |
850 } | |
851 | |
727 | 852 if (gl->ready) { |
853 gl->ready = 0; | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
854 goto convert; |
727 | 855 } |
856 | |
1632 | 857 ngx_free(gl->name.data); |
858 gl->name.data = NULL; | |
859 | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
860 if (FindNextFileW(gl->dir, &gl->finddata) != 0) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
861 goto convert; |
727 | 862 } |
863 | |
864 err = ngx_errno; | |
865 | |
866 if (err == NGX_ENOMOREFILES) { | |
867 return NGX_DONE; | |
868 } | |
869 | |
870 ngx_log_error(NGX_LOG_ALERT, gl->log, err, | |
871 "FindNextFile(%s) failed", gl->pattern); | |
872 | |
873 return NGX_ERROR; | |
8131
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
874 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
875 convert: |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
876 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
877 len = NGX_UTF8_BUFLEN; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
878 p = ngx_utf16_to_utf8(utf8, gl->finddata.cFileName, &len, NULL); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
879 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
880 if (p == NULL) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
881 return NGX_ERROR; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
882 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
883 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
884 gl->name.len = gl->last + len - 1; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
885 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
886 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
887 if (gl->name.data == NULL) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
888 goto failed; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
889 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
890 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
891 ngx_memcpy(gl->name.data, gl->pattern, gl->last); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
892 ngx_cpystrn(gl->name.data + gl->last, p, len); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
893 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
894 if (p != utf8) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
895 ngx_free(p); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
896 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
897 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
898 *name = gl->name; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
899 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
900 return NGX_OK; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
901 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
902 failed: |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
903 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
904 if (p != utf8) { |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
905 err = ngx_errno; |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
906 ngx_free(p); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
907 ngx_set_errno(err); |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
908 } |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
909 |
751f79bd802c
Win32: non-ASCII names support in "include" with wildcards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
8130
diff
changeset
|
910 return NGX_ERROR; |
727 | 911 } |
912 | |
913 | |
914 void | |
915 ngx_close_glob(ngx_glob_t *gl) | |
916 { | |
1632 | 917 if (gl->name.data) { |
918 ngx_free(gl->name.data); | |
919 } | |
920 | |
1980 | 921 if (gl->dir == INVALID_HANDLE_VALUE) { |
922 return; | |
923 } | |
924 | |
1632 | 925 if (FindClose(gl->dir) == 0) { |
727 | 926 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno, |
927 "FindClose(%s) failed", gl->pattern); | |
928 } | |
929 } | |
930 | |
931 | |
932 ngx_int_t | |
501 | 933 ngx_de_info(u_char *name, ngx_dir_t *dir) |
934 { | |
935 return NGX_OK; | |
936 } | |
937 | |
938 | |
939 ngx_int_t | |
940 ngx_de_link_info(u_char *name, ngx_dir_t *dir) | |
941 { | |
942 return NGX_OK; | |
943 } | |
944 | |
945 | |
561 | 946 ngx_int_t |
3178 | 947 ngx_read_ahead(ngx_fd_t fd, size_t n) |
948 { | |
949 return ~NGX_FILE_ERROR; | |
950 } | |
951 | |
952 | |
953 ngx_int_t | |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
954 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
|
955 { |
3164
b1b1775698d5
uniform ngx_directio_on/off() interface with other file functions
Igor Sysoev <igor@sysoev.ru>
parents:
3158
diff
changeset
|
956 return ~NGX_FILE_ERROR; |
2134
13652cba8633
fix building by bcc broken in r2130
Igor Sysoev <igor@sysoev.ru>
parents:
1980
diff
changeset
|
957 } |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
958 |
2615 | 959 |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
960 ngx_int_t |
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
961 ngx_directio_off(ngx_fd_t fd) |
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
962 { |
3164
b1b1775698d5
uniform ngx_directio_on/off() interface with other file functions
Igor Sysoev <igor@sysoev.ru>
parents:
3158
diff
changeset
|
963 return ~NGX_FILE_ERROR; |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
964 } |
2615 | 965 |
966 | |
967 size_t | |
968 ngx_fs_bsize(u_char *name) | |
969 { | |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
970 u_long sc, bs, nfree, ncl; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
971 size_t len; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
972 u_short *u; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
973 u_short utf16[NGX_UTF16_BUFLEN]; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
974 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
975 len = NGX_UTF16_BUFLEN; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
976 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
977 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
978 if (u == NULL) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
979 return 512; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
980 } |
2615 | 981 |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
982 if (GetDiskFreeSpaceW(u, &sc, &bs, &nfree, &ncl) == 0) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
983 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
984 if (u != utf16) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
985 ngx_free(u); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
986 } |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
987 |
2615 | 988 return 512; |
989 } | |
990 | |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
991 if (u != utf16) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
992 ngx_free(u); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
993 } |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
994 |
2615 | 995 return sc * bs; |
996 } | |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
997 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
998 |
7670
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
999 off_t |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1000 ngx_fs_available(u_char *name) |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1001 { |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1002 size_t len; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1003 u_short *u; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1004 ULARGE_INTEGER navail; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1005 u_short utf16[NGX_UTF16_BUFLEN]; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1006 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1007 len = NGX_UTF16_BUFLEN; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1008 u = ngx_utf8_to_utf16(utf16, name, &len, 0); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1009 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1010 if (u == NULL) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1011 return NGX_MAX_OFF_T_VALUE; |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1012 } |
7670
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1013 |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1014 if (GetDiskFreeSpaceExW(u, &navail, NULL, NULL) == 0) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1015 |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1016 if (u != utf16) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1017 ngx_free(u); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1018 } |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1019 |
7670
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1020 return NGX_MAX_OFF_T_VALUE; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1021 } |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1022 |
8141
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1023 if (u != utf16) { |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1024 ngx_free(u); |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1025 } |
2acb00b9b5ff
Win32: non-ASCII names in ngx_fs_bsize(), ngx_fs_available().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8140
diff
changeset
|
1026 |
7670
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1027 return (off_t) navail.QuadPart; |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1028 } |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1029 |
ccb5ff87ab3e
Cache: introduced min_free cache clearing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
7433
diff
changeset
|
1030 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1031 static ngx_int_t |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1032 ngx_win32_check_filename(u_short *u, size_t len, ngx_uint_t dirname) |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1033 { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1034 u_long n; |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1035 u_short *lu, *p, *slash, ch; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1036 ngx_err_t err; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1037 enum { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1038 sw_start = 0, |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1039 sw_normal, |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1040 sw_after_slash, |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1041 sw_after_colon, |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1042 sw_after_dot |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1043 } state; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1044 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1045 /* check for NTFS streams (":"), trailing dots and spaces */ |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1046 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1047 lu = NULL; |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1048 slash = NULL; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1049 state = sw_start; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1050 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1051 #if (NGX_SUPPRESS_WARN) |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1052 ch = 0; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1053 #endif |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1054 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1055 for (p = u; *p; p++) { |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1056 ch = *p; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1057 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1058 switch (state) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1059 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1060 case sw_start: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1061 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1062 /* |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1063 * skip till first "/" to allow paths starting with drive and |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1064 * relative path, like "c:html/" |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1065 */ |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1066 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1067 if (ch == '/' || ch == '\\') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1068 state = sw_after_slash; |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1069 slash = p; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1070 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1071 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1072 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1073 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1074 case sw_normal: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1075 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1076 if (ch == ':') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1077 state = sw_after_colon; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1078 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1079 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1080 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1081 if (ch == '.' || ch == ' ') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1082 state = sw_after_dot; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1083 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1084 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1085 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1086 if (ch == '/' || ch == '\\') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1087 state = sw_after_slash; |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1088 slash = p; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1089 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1090 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1091 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1092 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1093 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1094 case sw_after_slash: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1095 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1096 if (ch == '/' || ch == '\\') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1097 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1098 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1099 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1100 if (ch == '.') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1101 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1102 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1103 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1104 if (ch == ':') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1105 state = sw_after_colon; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1106 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1107 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1108 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1109 state = sw_normal; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1110 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1111 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1112 case sw_after_colon: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1113 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1114 if (ch == '/' || ch == '\\') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1115 state = sw_after_slash; |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1116 slash = p; |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1117 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1118 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1119 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1120 goto invalid; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1121 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1122 case sw_after_dot: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1123 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1124 if (ch == '/' || ch == '\\') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1125 goto invalid; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1126 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1127 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1128 if (ch == ':') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1129 goto invalid; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1130 } |
4703 | 1131 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1132 if (ch == '.' || ch == ' ') { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1133 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1134 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1135 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1136 state = sw_normal; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1137 break; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1138 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1139 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1140 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1141 if (state == sw_after_dot) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1142 goto invalid; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1143 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1144 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1145 if (dirname && slash) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1146 ch = *slash; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1147 *slash = '\0'; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1148 len = slash - u + 1; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1149 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1150 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1151 /* check if long name match */ |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1152 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1153 lu = malloc(len * 2); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1154 if (lu == NULL) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1155 return NGX_ERROR; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1156 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1157 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1158 n = GetLongPathNameW(u, lu, len); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1159 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1160 if (n == 0) { |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1161 |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1162 if (dirname && slash && ngx_errno == NGX_ENOENT) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1163 ngx_set_errno(NGX_ENOPATH); |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1164 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1165 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1166 goto failed; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1167 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1168 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1169 if (n != len - 1 || _wcsicmp(u, lu) != 0) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1170 goto invalid; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1171 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1172 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1173 if (dirname && slash) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1174 *slash = ch; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1175 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1176 |
5437
dea321e5c021
Win32: plugged memory leak.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4703
diff
changeset
|
1177 ngx_free(lu); |
dea321e5c021
Win32: plugged memory leak.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4703
diff
changeset
|
1178 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1179 return NGX_OK; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1180 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1181 invalid: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1182 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1183 ngx_set_errno(NGX_ENOENT); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1184 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1185 failed: |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1186 |
8133
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1187 if (dirname && slash) { |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1188 *slash = ch; |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1189 } |
e0f385521c79
Win32: non-ASCII directory names support in ngx_create_dir().
Maxim Dounin <mdounin@mdounin.ru>
parents:
8132
diff
changeset
|
1190 |
4673
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1191 if (lu) { |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1192 err = ngx_errno; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1193 ngx_free(lu); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1194 ngx_set_errno(err); |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1195 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1196 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1197 return NGX_ERROR; |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1198 } |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1199 |
dc6c658942a8
Win32: disallowed access to various non-canonical name variants.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4564
diff
changeset
|
1200 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1201 static u_short * |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1202 ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t *len, size_t reserved) |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1203 { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1204 u_char *p; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1205 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
|
1206 uint32_t n; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1207 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1208 p = utf8; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1209 u = utf16; |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1210 last = utf16 + *len; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1211 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1212 while (u < last) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1213 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1214 if (*p < 0x80) { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1215 *u++ = (u_short) *p; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1216 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1217 if (*p == 0) { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1218 *len = u - utf16; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1219 return utf16; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1220 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1221 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1222 p++; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1223 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1224 continue; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1225 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1226 |
5501
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1227 if (u + 1 == last) { |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1228 *len = u - utf16; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1229 break; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1230 } |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1231 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1232 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
|
1233 |
5501
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1234 if (n > 0x10ffff) { |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1235 ngx_set_errno(NGX_EILSEQ); |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1236 return NULL; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1237 } |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1238 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1239 if (n > 0xffff) { |
5501
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1240 n -= 0x10000; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1241 *u++ = (u_short) (0xd800 + (n >> 10)); |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1242 *u++ = (u_short) (0xdc00 + (n & 0x03ff)); |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1243 continue; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1244 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1245 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1246 *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
|
1247 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1248 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1249 /* 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
|
1250 |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1251 u = malloc(((p - utf8) + ngx_strlen(p) + 1 + reserved) * sizeof(u_short)); |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1252 if (u == NULL) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1253 return NULL; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1254 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1255 |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1256 ngx_memcpy(u, utf16, *len * 2); |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1257 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1258 utf16 = u; |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1259 u += *len; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1260 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1261 for ( ;; ) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1262 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1263 if (*p < 0x80) { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1264 *u++ = (u_short) *p; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1265 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1266 if (*p == 0) { |
3417
15017418fd84
disable Win32 short file names
Igor Sysoev <igor@sysoev.ru>
parents:
3382
diff
changeset
|
1267 *len = u - utf16; |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1268 return utf16; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1269 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1270 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1271 p++; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1272 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1273 continue; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1274 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1275 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1276 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
|
1277 |
5501
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1278 if (n > 0x10ffff) { |
5785
fbdab7f38fd6
Style: use ngx_free() instead of free().
Tatsuhiko Kubo <cubicdaiya@gmail.com>
parents:
5749
diff
changeset
|
1279 ngx_free(utf16); |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1280 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
|
1281 return NULL; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1282 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1283 |
5501
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1284 if (n > 0xffff) { |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1285 n -= 0x10000; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1286 *u++ = (u_short) (0xd800 + (n >> 10)); |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1287 *u++ = (u_short) (0xdc00 + (n & 0x03ff)); |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1288 continue; |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1289 } |
1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
Maxim Dounin <mdounin@mdounin.ru>
parents:
5437
diff
changeset
|
1290 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1291 *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
|
1292 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1293 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1294 /* unreachable */ |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
1295 } |
8130
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1296 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1297 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1298 static u_char * |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1299 ngx_utf16_to_utf8(u_char *utf8, u_short *utf16, size_t *len, size_t *allocated) |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1300 { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1301 u_char *p, *last; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1302 u_short *u, *j; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1303 uint32_t n; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1304 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1305 u = utf16; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1306 p = utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1307 last = utf8 + *len; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1308 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1309 while (p < last) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1310 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1311 if (*u < 0x80) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1312 *p++ = (u_char) *u; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1313 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1314 if (*u == 0) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1315 *len = p - utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1316 return utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1317 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1318 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1319 u++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1320 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1321 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1322 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1323 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1324 if (p >= last - 4) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1325 *len = p - utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1326 break; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1327 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1328 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1329 n = ngx_utf16_decode(&u, 2); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1330 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1331 if (n > 0x10ffff) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1332 ngx_set_errno(NGX_EILSEQ); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1333 return NULL; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1334 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1335 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1336 if (n >= 0x10000) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1337 *p++ = (u_char) (0xf0 + (n >> 18)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1338 *p++ = (u_char) (0x80 + ((n >> 12) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1339 *p++ = (u_char) (0x80 + ((n >> 6) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1340 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1341 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1342 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1343 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1344 if (n >= 0x0800) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1345 *p++ = (u_char) (0xe0 + (n >> 12)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1346 *p++ = (u_char) (0x80 + ((n >> 6) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1347 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1348 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1349 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1350 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1351 *p++ = (u_char) (0xc0 + (n >> 6)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1352 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1353 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1354 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1355 /* the given buffer is not enough, allocate a new one */ |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1356 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1357 for (j = u; *j; j++) { /* void */ } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1358 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1359 p = malloc((j - utf16) * 4 + 1); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1360 if (p == NULL) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1361 return NULL; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1362 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1363 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1364 if (allocated) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1365 *allocated = (j - utf16) * 4 + 1; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1366 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1367 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1368 ngx_memcpy(p, utf8, *len); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1369 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1370 utf8 = p; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1371 p += *len; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1372 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1373 for ( ;; ) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1374 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1375 if (*u < 0x80) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1376 *p++ = (u_char) *u; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1377 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1378 if (*u == 0) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1379 *len = p - utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1380 return utf8; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1381 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1382 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1383 u++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1384 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1385 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1386 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1387 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1388 n = ngx_utf16_decode(&u, 2); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1389 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1390 if (n > 0x10ffff) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1391 ngx_free(utf8); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1392 ngx_set_errno(NGX_EILSEQ); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1393 return NULL; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1394 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1395 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1396 if (n >= 0x10000) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1397 *p++ = (u_char) (0xf0 + (n >> 18)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1398 *p++ = (u_char) (0x80 + ((n >> 12) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1399 *p++ = (u_char) (0x80 + ((n >> 6) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1400 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1401 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1402 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1403 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1404 if (n >= 0x0800) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1405 *p++ = (u_char) (0xe0 + (n >> 12)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1406 *p++ = (u_char) (0x80 + ((n >> 6) & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1407 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1408 continue; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1409 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1410 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1411 *p++ = (u_char) (0xc0 + (n >> 6)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1412 *p++ = (u_char) (0x80 + (n & 0x3f)); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1413 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1414 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1415 /* unreachable */ |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1416 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1417 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1418 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1419 /* |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1420 * ngx_utf16_decode() decodes one or two UTF-16 code units |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1421 * the return values: |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1422 * 0x80 - 0x10ffff valid character |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1423 * 0x110000 - 0xfffffffd invalid sequence |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1424 * 0xfffffffe incomplete sequence |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1425 * 0xffffffff error |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1426 */ |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1427 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1428 uint32_t |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1429 ngx_utf16_decode(u_short **u, size_t n) |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1430 { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1431 uint32_t k, m; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1432 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1433 k = **u; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1434 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1435 if (k < 0xd800 || k > 0xdfff) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1436 (*u)++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1437 return k; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1438 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1439 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1440 if (k > 0xdbff) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1441 (*u)++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1442 return 0xffffffff; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1443 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1444 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1445 if (n < 2) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1446 return 0xfffffffe; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1447 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1448 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1449 (*u)++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1450 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1451 m = *(*u)++; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1452 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1453 if (m < 0xdc00 || m > 0xdfff) { |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1454 return 0xffffffff; |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1455 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1456 } |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1457 |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1458 return 0x10000 + ((k - 0xd800) << 10) + (m - 0xdc00); |
b0a06c50c1b4
Win32: non-ASCII names support in autoindex (ticket #458).
Maxim Dounin <mdounin@mdounin.ru>
parents:
7670
diff
changeset
|
1459 } |