Mercurial > hg > nginx-quic
comparison src/os/win32/ngx_files.c @ 290:87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 16 Mar 2004 07:10:12 +0000 |
parents | 7c7183b3ea8b |
children | a472bfb778b3 |
comparison
equal
deleted
inserted
replaced
289:0750faf8d7e3 | 290:87e73f067470 |
---|---|
1 | 1 |
2 #include <ngx_config.h> | 2 #include <ngx_config.h> |
3 #include <ngx_core.h> | 3 #include <ngx_core.h> |
4 | 4 |
5 | 5 |
6 ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset) | 6 ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
7 { | 7 { |
8 long high_offset; | 8 long high_offset; |
9 DWORD n; | 9 u_long n; |
10 ngx_err_t err; | 10 ngx_err_t err; |
11 OVERLAPPED ovlp, *povlp; | 11 OVERLAPPED ovlp, *povlp; |
12 | 12 |
13 if (ngx_win32_version < NGX_WIN_NT) { | 13 if (ngx_win32_version < NGX_WIN_NT) { |
14 | 14 |
18 */ | 18 */ |
19 | 19 |
20 if (file->offset != offset) { | 20 if (file->offset != offset) { |
21 | 21 |
22 /* | 22 /* |
23 * the maximum file size on FAT16 is 2G, but on FAT32 it's 4G so we | 23 * the maximum file size on FAT16 is 2G, but on FAT32 |
24 * need to use high_offset because a single offset is signed value | 24 * the size is 4G so we need to use high_offset |
25 * because a single offset is signed value | |
25 */ | 26 */ |
26 | 27 |
27 high_offset = (long) (offset >> 32); | 28 high_offset = (long) (offset >> 32); |
28 if (SetFilePointer(file->fd, (long) offset, &high_offset, | 29 if (SetFilePointer(file->fd, (long) offset, &high_offset, |
29 FILE_BEGIN) == INVALID_SET_FILE_POINTER) | 30 FILE_BEGIN) == INVALID_SET_FILE_POINTER) |
45 povlp = NULL; | 46 povlp = NULL; |
46 | 47 |
47 } else { | 48 } else { |
48 ovlp.Internal = 0; | 49 ovlp.Internal = 0; |
49 ovlp.InternalHigh = 0; | 50 ovlp.InternalHigh = 0; |
50 ovlp.Offset = (DWORD) offset; | 51 ovlp.Offset = (u_long) offset; |
51 ovlp.OffsetHigh = (DWORD) (offset >> 32); | 52 ovlp.OffsetHigh = (u_long) (offset >> 32); |
52 ovlp.hEvent = NULL; | 53 ovlp.hEvent = NULL; |
53 | 54 |
54 povlp = &ovlp; | 55 povlp = &ovlp; |
55 } | 56 } |
56 | 57 |
63 | 64 |
64 return n; | 65 return n; |
65 } | 66 } |
66 | 67 |
67 | 68 |
68 ssize_t ngx_write_file(ngx_file_t *file, char *buf, size_t size, off_t offset) | 69 ssize_t ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
69 { | 70 { |
70 long high_offset; | 71 long high_offset; |
71 DWORD n; | 72 u_long n; |
72 ngx_err_t err; | 73 ngx_err_t err; |
73 OVERLAPPED ovlp, *povlp; | 74 OVERLAPPED ovlp, *povlp; |
74 | 75 |
75 if (ngx_win32_version < NGX_WIN_NT) { | 76 if (ngx_win32_version < NGX_WIN_NT) { |
76 | 77 |
80 */ | 81 */ |
81 | 82 |
82 if (file->offset != offset) { | 83 if (file->offset != offset) { |
83 | 84 |
84 /* | 85 /* |
85 * the maximum file size on FAT16 is 2G, but on FAT32 it's 4G so we | 86 * the maximum file size on FAT16 is 2G, but on FAT32 |
86 * need to use high_offset because a single offset is signed value | 87 * the size is 4G so we need to use high_offset |
88 * because a single offset is signed value | |
87 */ | 89 */ |
88 | 90 |
89 high_offset = (long) (offset >> 32); | 91 high_offset = (long) (offset >> 32); |
90 if (SetFilePointer(file->fd, (long) offset, &high_offset, | 92 if (SetFilePointer(file->fd, (long) offset, &high_offset, |
91 FILE_BEGIN) == INVALID_SET_FILE_POINTER) | 93 FILE_BEGIN) == INVALID_SET_FILE_POINTER) |
107 povlp = NULL; | 109 povlp = NULL; |
108 | 110 |
109 } else { | 111 } else { |
110 ovlp.Internal = 0; | 112 ovlp.Internal = 0; |
111 ovlp.InternalHigh = 0; | 113 ovlp.InternalHigh = 0; |
112 ovlp.Offset = (DWORD) offset; | 114 ovlp.Offset = (u_long) offset; |
113 ovlp.OffsetHigh = (DWORD) (offset >> 32); | 115 ovlp.OffsetHigh = (u_long) (offset >> 32); |
114 ovlp.hEvent = NULL; | 116 ovlp.hEvent = NULL; |
115 | 117 |
116 povlp = &ovlp; | 118 povlp = &ovlp; |
117 } | 119 } |
118 | 120 |