annotate src/os/win32/ngx_files.c @ 9274:46ecad404a29 default tip

Mail: reset imap tag to empty after authentication attempt. We need to reset the imap tag to empty after an authentication attempt completes, otherwise if the next line parsed is incomplete with no tag (e.g. empty line) then we use the "tag" from the previous buffer which is now definitely wrong and has been partially overwritten with the most recently read data (e.g. CRLF). An example before this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: S: obar BAD invalid command Then with this patch: S: * OK IMAP4 ready C: foobar login a b S: foobar NO Incorrect username or password. C: S: * BAD invalid command
author Rob Mueller <robm@fastmailteam.com>
date Wed, 15 May 2024 10:06:00 +0300
parents 2acb00b9b5ff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4017
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
101 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
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
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
108 ovlp.Internal = 0;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
109 ovlp.InternalHigh = 0;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
110 ovlp.Offset = (u_long) offset;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
111 ovlp.OffsetHigh = (u_long) (offset >> 32);
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
112 ovlp.hEvent = NULL;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
113
3156
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
134 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
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
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
140 ovlp.Internal = 0;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
141 ovlp.InternalHigh = 0;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
142 ovlp.Offset = (u_long) offset;
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
143 ovlp.OffsetHigh = (u_long) (offset >> 32);
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
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
55f006d944ba delete Win95 code
Igor Sysoev <igor@sysoev.ru>
parents: 3138
diff changeset
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
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
154 if (n != size) {
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
155 ngx_log_error(NGX_LOG_CRIT, file->log, 0,
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
156 "WriteFile() \"%s\" has written only %ul of %uz",
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
157 file->name.data, n, size);
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
158 return NGX_ERROR;
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
159 }
17afb68c2a9a test incomplete WriteFile()
Igor Sysoev <igor@sysoev.ru>
parents: 3157
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
167 ssize_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
168 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset,
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
341 ngx_uint_t collision;
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
444 ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
445 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s)
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
446 {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
447 uint64_t intervals;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
448 FILETIME ft;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
449
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
450 /* 116444736000000000 is commented in src/os/win32/ngx_time.c */
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
451
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
452 intervals = s * 10000000 + 116444736000000000;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
453
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
454 ft.dwLowDateTime = (DWORD) intervals;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
455 ft.dwHighDateTime = (DWORD) (intervals >> 32);
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
456
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
457 if (SetFileTime(fd, NULL, NULL, &ft) != 0) {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
458 return NGX_OK;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
459 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
460
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
461 return NGX_ERROR;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
462 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
463
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
464
3651
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
465 ngx_int_t
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
466 ngx_create_file_mapping(ngx_file_mapping_t *fm)
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
467 {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
468 LARGE_INTEGER size;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
469
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
470 fm->fd = ngx_open_file(fm->name, NGX_FILE_RDWR, NGX_FILE_TRUNCATE,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
471 NGX_FILE_DEFAULT_ACCESS);
7086
Sergey Kandaurov <pluknet@nginx.com>
parents: 5785
diff changeset
472
3651
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
473 if (fm->fd == NGX_INVALID_FILE) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
474 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
475 ngx_open_file_n " \"%s\" failed", fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
476 return NGX_ERROR;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
477 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
478
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
479 fm->handle = NULL;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
480
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
481 size.QuadPart = fm->size;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
482
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
483 if (SetFilePointerEx(fm->fd, size, NULL, FILE_BEGIN) == 0) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
484 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
485 "SetFilePointerEx(\"%s\", %uz) failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
486 fm->name, fm->size);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
487 goto failed;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
488 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
489
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
490 if (SetEndOfFile(fm->fd) == 0) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
491 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
492 "SetEndOfFile() \"%s\" failed", fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
493 goto failed;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
494 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
495
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
496 fm->handle = CreateFileMapping(fm->fd, NULL, PAGE_READWRITE,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
497 (u_long) ((off_t) fm->size >> 32),
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
498 (u_long) ((off_t) fm->size & 0xffffffff),
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
499 NULL);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
500 if (fm->handle == NULL) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
501 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
502 "CreateFileMapping(%s, %uz) failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
503 fm->name, fm->size);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
504 goto failed;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
505 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
506
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
507 fm->addr = MapViewOfFile(fm->handle, FILE_MAP_WRITE, 0, 0, 0);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
508
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
509 if (fm->addr != NULL) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
510 return NGX_OK;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
511 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
512
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
513 ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
514 "MapViewOfFile(%uz) of file mapping \"%s\" failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
515 fm->size, fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
516
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
517 failed:
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
518
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
519 if (fm->handle) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
520 if (CloseHandle(fm->handle) == 0) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
521 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
522 "CloseHandle() of file mapping \"%s\" failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
523 fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
524 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
525 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
526
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
527 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
528 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
529 ngx_close_file_n " \"%s\" failed", fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
530 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
531
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
532 return NGX_ERROR;
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
533 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
534
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
535
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
536 void
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
537 ngx_close_file_mapping(ngx_file_mapping_t *fm)
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
538 {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
539 if (UnmapViewOfFile(fm->addr) == 0) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
540 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
541 "UnmapViewOfFile(%p) of file mapping \"%s\" failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
542 fm->addr, &fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
543 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
544
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
545 if (CloseHandle(fm->handle) == 0) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
546 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
547 "CloseHandle() of file mapping \"%s\" failed",
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
548 &fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
549 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
550
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
551 if (ngx_close_file(fm->fd) == NGX_FILE_ERROR) {
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
552 ngx_log_error(NGX_LOG_ALERT, fm->log, ngx_errno,
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
553 ngx_close_file_n " \"%s\" failed", fm->name);
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
554 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
555 }
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
556
515d50917016 ngx_create_file_mapping()
Igor Sysoev <igor@sysoev.ru>
parents: 3614
diff changeset
557
4564
13eb3193cd63 Fixed win32 build after realpath changes in r4559.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
558 u_char *
2259
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
559 ngx_realpath(u_char *path, u_char *resolved)
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
560 {
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
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
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
563 }
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
564
0864138899f1 $realpath_root
Igor Sysoev <igor@sysoev.ru>
parents: 2248
diff changeset
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
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
600 ngx_int_t
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
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
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
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
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
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
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
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
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
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
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
787 ngx_open_glob(ngx_glob_t *gl)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
788 {
2459
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
789 u_char *p;
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
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
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
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
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
803
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
804 if (gl->dir == INVALID_HANDLE_VALUE) {
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
805
2459
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
806 err = ngx_errno;
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
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
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
812 if ((err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND)
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
813 && gl->test)
f732b8509658 fix r1981 on win32
Igor Sysoev <igor@sysoev.ru>
parents: 2259
diff changeset
814 {
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
815 gl->no_match = 1;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
816 return NGX_OK;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
817 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
821 return NGX_ERROR;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
822 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
823
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
824 for (p = gl->pattern; *p; p++) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
825 if (*p == '/') {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
826 gl->last = p + 1 - gl->pattern;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
827 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
828 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
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
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
832 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
833
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
834 gl->ready = 1;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
835
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
836 return NGX_OK;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
837 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
838
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
839
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
840 ngx_int_t
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
841 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
847
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
848 if (gl->no_match) {
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
849 return NGX_DONE;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
850 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
851
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
852 if (gl->ready) {
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
855 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
856
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
857 ngx_free(gl->name.data);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
858 gl->name.data = NULL;
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
862 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
863
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
864 err = ngx_errno;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
865
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
866 if (err == NGX_ENOMOREFILES) {
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
867 return NGX_DONE;
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
868 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
869
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
870 ngx_log_error(NGX_LOG_ALERT, gl->log, err,
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
871 "FindNextFile(%s) failed", gl->pattern);
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
872
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
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
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
911 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
912
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
913
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
914 void
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
915 ngx_close_glob(ngx_glob_t *gl)
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
916 {
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
917 if (gl->name.data) {
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
918 ngx_free(gl->name.data);
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
919 }
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
920
1980
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
921 if (gl->dir == INVALID_HANDLE_VALUE) {
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
922 return;
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
923 }
b5263e401884 ignore glob no match error
Igor Sysoev <igor@sysoev.ru>
parents: 1693
diff changeset
924
1632
2142e5cf62da fix win32 glob
Igor Sysoev <igor@sysoev.ru>
parents: 1052
diff changeset
925 if (FindClose(gl->dir) == 0) {
727
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
926 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno,
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
927 "FindClose(%s) failed", gl->pattern);
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
928 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
929 }
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
930
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
931
532d15ddbe68 glob support in include
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
932 ngx_int_t
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
933 ngx_de_info(u_char *name, ngx_dir_t *dir)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
934 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
935 return NGX_OK;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
936 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
937
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
938
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
939 ngx_int_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
940 ngx_de_link_info(u_char *name, ngx_dir_t *dir)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
941 {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
942 return NGX_OK;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
943 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
944
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
945
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
946 ngx_int_t
3178
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
947 ngx_read_ahead(ngx_fd_t fd, size_t n)
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
948 {
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
949 return ~NGX_FILE_ERROR;
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
950 }
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
951
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
952
975f0558aab3 read_ahead
Igor Sysoev <igor@sysoev.ru>
parents: 3164
diff changeset
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
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
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
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
965
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
966
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
967 size_t
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
968 ngx_fs_bsize(u_char *name)
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
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
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
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
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
988 return 512;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
989 }
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
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
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
995 return sc * bs;
ceef364208c8 ngx_fs_bsize()
Igor Sysoev <igor@sysoev.ru>
parents: 2462
diff changeset
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
Maxim Dounin <mdounin@mdounin.ru>
parents: 4673
diff changeset
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 }