annotate src/os/win32/ngx_files.c @ 3178:975f0558aab3

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