Mercurial > hg > nginx
annotate src/os/win32/ngx_files.c @ 3619:5a30ea317664 stable-0.7
merge r3615:
do not free() stack allocated buffer
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 15 Jun 2010 09:51:58 +0000 |
parents | 771d28b86077 |
children |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
344
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
344
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
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 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
13 static u_short *ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t *len); |
2628
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 { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
21 size_t len; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
22 u_long n; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
23 u_short *u, *lu; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
24 ngx_fd_t fd; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
25 ngx_err_t err; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
26 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
|
27 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
28 len = NGX_UTF16_BUFLEN; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
29 u = ngx_utf8_to_utf16(utf16, name, &len); |
2628
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 if (u == NULL) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
32 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
|
33 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
34 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
35 fd = INVALID_HANDLE_VALUE; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
36 lu = NULL; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
37 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
38 if (create == NGX_FILE_OPEN) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
39 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
40 lu = malloc(len * 2); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
41 if (lu == NULL) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
42 goto failed; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
43 } |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
44 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
45 n = GetLongPathNameW(u, lu, len); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
46 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
47 if (n == 0) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
48 goto failed; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
49 } |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
50 |
3584 | 51 if (n != len - 1 || _wcsicmp(u, lu) != 0) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
52 ngx_set_errno(NGX_ENOENT); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
53 goto failed; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
54 } |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
55 } |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
56 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
57 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
|
58 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
|
59 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
|
60 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
61 failed: |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
62 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
63 err = ngx_errno; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
64 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
65 if (lu) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
66 ngx_free(lu); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
67 } |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
68 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
69 if (u != utf16) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
70 ngx_free(u); |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
71 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
72 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
73 ngx_set_errno(err); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
74 |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
75 return fd; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
76 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
77 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
78 |
561 | 79 ssize_t |
80 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
|
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 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
|
84 OVERLAPPED ovlp, *povlp; |
8
708f8bb772ec
nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
85 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
86 ovlp.Internal = 0; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
87 ovlp.InternalHigh = 0; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
88 ovlp.Offset = (u_long) offset; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
89 ovlp.OffsetHigh = (u_long) (offset >> 32); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
90 ovlp.hEvent = NULL; |
461 | 91 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
92 povlp = &ovlp; |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
93 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
94 if (ReadFile(file->fd, buf, size, &n, povlp) == 0) { |
3093 | 95 err = ngx_errno; |
96 | |
97 if (err == ERROR_HANDLE_EOF) { | |
98 return 0; | |
99 } | |
100 | |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
101 ngx_log_error(NGX_LOG_ERR, file->log, err, |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
102 "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
|
103 return NGX_ERROR; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
104 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
105 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
106 file->offset += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
107 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
108 return n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
109 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
110 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
111 |
561 | 112 ssize_t |
113 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
|
114 { |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
280
diff
changeset
|
115 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
|
116 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
|
117 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
118 ovlp.Internal = 0; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
119 ovlp.InternalHigh = 0; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
120 ovlp.Offset = (u_long) offset; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
121 ovlp.OffsetHigh = (u_long) (offset >> 32); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
122 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
|
123 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
124 povlp = &ovlp; |
183
4c698194c56d
nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
182
diff
changeset
|
125 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
126 if (WriteFile(file->fd, buf, size, &n, povlp) == 0) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
127 ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
128 "WriteFile() \"%s\" failed", file->name.data); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
129 return NGX_ERROR; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
130 } |
183
4c698194c56d
nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
182
diff
changeset
|
131 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
132 if (n != size) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
133 ngx_log_error(NGX_LOG_CRIT, file->log, 0, |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
134 "WriteFile() \"%s\" has written only %ul of %uz", |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
135 file->name.data, n, size); |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
136 return NGX_ERROR; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
137 } |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
138 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
139 file->offset += n; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
140 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
141 return n; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
142 } |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
143 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
123
diff
changeset
|
144 |
561 | 145 ssize_t |
146 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset, | |
147 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
|
148 { |
292
a472bfb778b3
nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
149 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
|
150 size_t size; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
151 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
|
152 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
153 total = 0; |
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 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
|
156 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
|
157 prev = buf; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
158 size = 0; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
159 |
344
e366ba5db8f8
nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents:
343
diff
changeset
|
160 /* 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
|
161 |
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
|
162 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
|
163 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
|
164 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
|
165 cl = cl->next; |
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 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
|
169 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
170 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
|
171 return NGX_ERROR; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
172 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
173 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
174 total += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
175 offset += n; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
176 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
177 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
178 return total; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
179 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
180 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
181 |
1634
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_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
|
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 (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
|
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 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
195 ssize_t |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
196 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
|
197 { |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
198 u_long n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
199 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
200 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
|
201 return (size_t) n; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
202 } |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
203 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
204 return -1; |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
205 } |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
206 |
d3cbb96818f1
fix win32 ngx_read_fd() and ngx_write_fd()
Igor Sysoev <igor@sysoev.ru>
parents:
1632
diff
changeset
|
207 |
2769
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
208 ssize_t |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
209 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
|
210 { |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
211 u_long n; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
212 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
213 (void) CharToOemBuff(buf, buf, size); |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
214 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
215 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
|
216 return (size_t) n; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
217 } |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
218 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
219 return -1; |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
220 } |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
221 |
9d986c4e796f
introduce ngx_write_console() to support OEM code pages
Igor Sysoev <igor@sysoev.ru>
parents:
2687
diff
changeset
|
222 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
223 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
|
224 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
|
225 { |
499 | 226 u_char *name; |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
227 ngx_err_t err; |
499 | 228 ngx_uint_t collision; |
229 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
|
230 |
1693
f4eb04fd8579
use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents:
1634
diff
changeset
|
231 name = ngx_alloc(to->len + 1 + 10 + 1 + sizeof("DELETE"), log); |
501 | 232 if (name == NULL) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
233 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
|
234 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
235 |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
236 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
|
237 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
238 collision = 0; |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
239 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
240 /* 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
|
241 |
499 | 242 for ( ;; ) { |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
243 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
|
244 |
2945
87da6664fb49
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
245 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
|
246 |
499 | 247 if (MoveFile((const char *) to->data, (const char *) name) != 0) { |
248 break; | |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
249 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
250 |
499 | 251 collision = 1; |
252 | |
2945
87da6664fb49
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
253 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, |
87da6664fb49
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
254 "MoveFile() \"%s\" to \"%s\" failed", to->data, name); |
499 | 255 } |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
256 |
292
a472bfb778b3
nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
257 if (MoveFile((const char *) from->data, (const char *) to->data) == 0) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
258 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
|
259 |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
260 } else { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
261 err = 0; |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
262 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
263 |
1051 | 264 if (DeleteFile((const char *) name) == 0) { |
2945
87da6664fb49
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
265 ngx_log_error(NGX_LOG_CRIT, log, ngx_errno, |
87da6664fb49
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
Igor Sysoev <igor@sysoev.ru>
parents:
2782
diff
changeset
|
266 "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
|
267 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
268 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
269 /* mutex_unlock() */ |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
270 |
1693
f4eb04fd8579
use malloc() in ngx_win32_rename_file, set crit level instead of error
Igor Sysoev <igor@sysoev.ru>
parents:
1634
diff
changeset
|
271 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
|
272 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
273 return err; |
184
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
274 } |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
275 |
1bf718ce0dde
nginx-0.0.1-2003-11-14-10:20:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
183
diff
changeset
|
276 |
561 | 277 ngx_int_t |
2462
90d5ddfedbb1
use GetFileAttributesEx() instead of GetFileAttributes()
Igor Sysoev <igor@sysoev.ru>
parents:
2459
diff
changeset
|
278 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
|
279 { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
280 size_t len; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
281 long rc; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
282 u_short *u; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
283 ngx_err_t err; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
284 WIN32_FILE_ATTRIBUTE_DATA fa; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
285 u_short utf16[NGX_UTF16_BUFLEN]; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
286 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
287 len = NGX_UTF16_BUFLEN; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
288 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
289 u = ngx_utf8_to_utf16(utf16, file, &len); |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
290 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
291 if (u == NULL) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
292 return NGX_FILE_ERROR; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
293 } |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
294 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
295 rc = GetFileAttributesExW(u, GetFileExInfoStandard, &fa); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
296 |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
297 if (u != utf16) { |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
298 err = ngx_errno; |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
299 ngx_free(u); |
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
300 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
|
301 } |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
302 |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
310 return rc; |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
311 } |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
312 |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
313 |
561 | 314 ngx_int_t |
681 | 315 ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s) |
316 { | |
317 uint64_t intervals; | |
318 FILETIME ft; | |
319 | |
320 /* 116444736000000000 is commented in src/os/win32/ngx_time.c */ | |
321 | |
322 intervals = s * 10000000 + 116444736000000000; | |
323 | |
324 ft.dwLowDateTime = (DWORD) intervals; | |
325 ft.dwHighDateTime = (DWORD) (intervals >> 32); | |
326 | |
327 if (SetFileTime(fd, NULL, NULL, &ft) != 0) { | |
328 return NGX_OK; | |
329 } | |
330 | |
331 return NGX_ERROR; | |
332 } | |
333 | |
334 | |
2259 | 335 char * |
336 ngx_realpath(u_char *path, u_char *resolved) | |
337 { | |
338 /* STUB */ | |
339 return (char *) path; | |
340 } | |
341 | |
342 | |
561 | 343 ngx_int_t |
344 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
|
345 { |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
346 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
|
347 |
727 | 348 dir->dir = FindFirstFile((const char *) name->data, &dir->finddata); |
577 | 349 |
186
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
350 if (dir->dir == INVALID_HANDLE_VALUE) { |
577 | 351 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
|
352 } |
577 | 353 |
457 | 354 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
|
355 dir->ready = 1; |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
356 |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
357 return NGX_OK; |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
358 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
359 |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
360 |
561 | 361 ngx_int_t |
362 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
|
363 { |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
364 if (dir->ready) { |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
365 dir->ready = 0; |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
366 return NGX_OK; |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
367 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
368 |
727 | 369 if (FindNextFile(dir->dir, &dir->finddata) != 0) { |
3433 | 370 dir->type = 1; |
681 | 371 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
|
372 } |
c1f3a3c7c5db
nginx-0.0.1-2003-11-17-00:49:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
185
diff
changeset
|
373 |
681 | 374 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
|
375 } |
185
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
376 |
d5f50cefc322
nginx-0.0.1-2003-11-14-19:52:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
184
diff
changeset
|
377 |
501 | 378 ngx_int_t |
727 | 379 ngx_open_glob(ngx_glob_t *gl) |
380 { | |
2459 | 381 u_char *p; |
382 size_t len; | |
383 ngx_err_t err; | |
1632 | 384 |
727 | 385 gl->dir = FindFirstFile((const char *) gl->pattern, &gl->finddata); |
386 | |
387 if (gl->dir == INVALID_HANDLE_VALUE) { | |
1980 | 388 |
2459 | 389 err = ngx_errno; |
390 | |
391 if ((err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND) | |
392 && gl->test) | |
393 { | |
1980 | 394 gl->no_match = 1; |
395 return NGX_OK; | |
396 } | |
397 | |
727 | 398 return NGX_ERROR; |
399 } | |
400 | |
1632 | 401 for (p = gl->pattern; *p; p++) { |
402 if (*p == '/') { | |
403 gl->last = p + 1 - gl->pattern; | |
404 } | |
405 } | |
406 | |
407 len = ngx_strlen(gl->finddata.cFileName); | |
408 gl->name.len = gl->last + len; | |
409 | |
410 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log); | |
411 if (gl->name.data == NULL) { | |
412 return NGX_ERROR; | |
413 } | |
414 | |
415 ngx_memcpy(gl->name.data, gl->pattern, gl->last); | |
416 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName, | |
417 len + 1); | |
418 | |
727 | 419 gl->ready = 1; |
420 | |
421 return NGX_OK; | |
422 } | |
423 | |
424 | |
425 ngx_int_t | |
426 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name) | |
427 { | |
1632 | 428 size_t len; |
727 | 429 ngx_err_t err; |
430 | |
1980 | 431 if (gl->no_match) { |
432 return NGX_DONE; | |
433 } | |
434 | |
727 | 435 if (gl->ready) { |
1632 | 436 *name = gl->name; |
727 | 437 |
438 gl->ready = 0; | |
439 return NGX_OK; | |
440 } | |
441 | |
1632 | 442 ngx_free(gl->name.data); |
443 gl->name.data = NULL; | |
444 | |
727 | 445 if (FindNextFile(gl->dir, &gl->finddata) != 0) { |
1632 | 446 |
447 len = ngx_strlen(gl->finddata.cFileName); | |
448 gl->name.len = gl->last + len; | |
449 | |
450 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log); | |
451 if (gl->name.data == NULL) { | |
452 return NGX_ERROR; | |
453 } | |
454 | |
455 ngx_memcpy(gl->name.data, gl->pattern, gl->last); | |
456 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName, | |
457 len + 1); | |
458 | |
459 *name = gl->name; | |
727 | 460 |
461 return NGX_OK; | |
462 } | |
463 | |
464 err = ngx_errno; | |
465 | |
466 if (err == NGX_ENOMOREFILES) { | |
467 return NGX_DONE; | |
468 } | |
469 | |
470 ngx_log_error(NGX_LOG_ALERT, gl->log, err, | |
471 "FindNextFile(%s) failed", gl->pattern); | |
472 | |
473 return NGX_ERROR; | |
474 } | |
475 | |
476 | |
477 void | |
478 ngx_close_glob(ngx_glob_t *gl) | |
479 { | |
1632 | 480 if (gl->name.data) { |
481 ngx_free(gl->name.data); | |
482 } | |
483 | |
1980 | 484 if (gl->dir == INVALID_HANDLE_VALUE) { |
485 return; | |
486 } | |
487 | |
1632 | 488 if (FindClose(gl->dir) == 0) { |
727 | 489 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno, |
490 "FindClose(%s) failed", gl->pattern); | |
491 } | |
492 } | |
493 | |
494 | |
495 ngx_int_t | |
501 | 496 ngx_de_info(u_char *name, ngx_dir_t *dir) |
497 { | |
498 return NGX_OK; | |
499 } | |
500 | |
501 | |
502 ngx_int_t | |
503 ngx_de_link_info(u_char *name, ngx_dir_t *dir) | |
504 { | |
505 return NGX_OK; | |
506 } | |
507 | |
508 | |
561 | 509 ngx_int_t |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
510 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
|
511 { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
512 return ~NGX_FILE_ERROR; |
2134
13652cba8633
fix building by bcc broken in r2130
Igor Sysoev <igor@sysoev.ru>
parents:
1980
diff
changeset
|
513 } |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
514 |
2615 | 515 |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
516 ngx_int_t |
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
517 ngx_directio_off(ngx_fd_t fd) |
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
518 { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
519 return ~NGX_FILE_ERROR; |
2248
1adec90a0e46
disable directio for unaligned reads in Linux
Igor Sysoev <igor@sysoev.ru>
parents:
2234
diff
changeset
|
520 } |
2615 | 521 |
522 | |
523 size_t | |
524 ngx_fs_bsize(u_char *name) | |
525 { | |
526 u_char root[4]; | |
527 u_long sc, bs, nfree, ncl; | |
528 | |
529 if (name[2] == ':') { | |
530 ngx_cpystrn(root, name, 4); | |
531 name = root; | |
532 } | |
533 | |
534 if (GetDiskFreeSpace((const char *) name, &sc, &bs, &nfree, &ncl) == 0) { | |
535 return 512; | |
536 } | |
537 | |
538 return sc * bs; | |
539 } | |
2628
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
540 |
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 static u_short * |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
543 ngx_utf8_to_utf16(u_short *utf16, u_char *utf8, size_t *len) |
2628
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 u_char *p; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
546 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
|
547 uint32_t n; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
548 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
549 p = utf8; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
550 u = utf16; |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
551 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
|
552 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
553 while (u < last) { |
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 if (*p < 0x80) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
556 *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
|
557 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
558 if (*p == 0) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
559 *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
|
560 return utf16; |
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 p++; |
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 continue; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
566 } |
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 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
|
569 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
570 if (n > 0xffff) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
571 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
|
572 return NULL; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
573 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
574 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
575 *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
|
576 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
577 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
578 /* 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
|
579 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
580 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
|
581 if (u == NULL) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
582 return NULL; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
583 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
584 |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
585 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
|
586 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
587 utf16 = u; |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
588 u += *len; |
2628
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 for ( ;; ) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
591 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
592 if (*p < 0x80) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
593 *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
|
594 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
595 if (*p == 0) { |
3435
d65ba5392f59
merge r3138, r3139, r3157, r3158, r3159, r3164, r3165,
Igor Sysoev <igor@sysoev.ru>
parents:
3433
diff
changeset
|
596 *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
|
597 return utf16; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
598 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
599 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
600 p++; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
601 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
602 continue; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
603 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
604 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
605 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
|
606 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
607 if (n > 0xffff) { |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
608 free(utf16); |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
609 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
|
610 return NULL; |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
611 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
612 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
613 *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
|
614 } |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
615 |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
616 /* unreachable */ |
64a10d6b97bd
win32 ngx_open_file() supports utf8 names and NGX_FILE_APPEND
Igor Sysoev <igor@sysoev.ru>
parents:
2615
diff
changeset
|
617 } |