annotate src/os/win32/ngx_files.c @ 8137:4b06186670ed

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