Mercurial > hg > nginx
comparison src/os/win32/ngx_files.c @ 3156:55f006d944ba
delete Win95 code
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 24 Sep 2009 19:55:35 +0000 |
parents | a2479937dbd8 |
children | a2c1b4f74ea7 |
comparison
equal
deleted
inserted
replaced
3155:e720c4a68ee0 | 3156:55f006d944ba |
---|---|
44 | 44 |
45 | 45 |
46 ssize_t | 46 ssize_t |
47 ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) | 47 ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
48 { | 48 { |
49 long high_offset; | |
50 u_long n; | 49 u_long n; |
51 ngx_err_t err; | 50 ngx_err_t err; |
52 OVERLAPPED ovlp, *povlp; | 51 OVERLAPPED ovlp, *povlp; |
53 | 52 |
54 if (ngx_win32_version < NGX_WIN_NT) { | 53 ovlp.Internal = 0; |
55 | 54 ovlp.InternalHigh = 0; |
56 /* | 55 ovlp.Offset = (u_long) offset; |
57 * under Win9X the overlapped pointer must be NULL | 56 ovlp.OffsetHigh = (u_long) (offset >> 32); |
58 * so we have to use SetFilePointer() to set the offset | 57 ovlp.hEvent = NULL; |
59 */ | 58 |
60 | 59 povlp = &ovlp; |
61 if (file->offset != offset) { | |
62 | |
63 /* | |
64 * the maximum file size on the FAT16 is 2G, but on the FAT32 | |
65 * the size is 4G so we have to use the high_offset | |
66 * because a single offset is signed value | |
67 */ | |
68 | |
69 high_offset = (long) (offset >> 32); | |
70 | |
71 if (SetFilePointer(file->fd, (long) offset, &high_offset, | |
72 FILE_BEGIN) == INVALID_SET_FILE_POINTER) | |
73 { | |
74 /* | |
75 * INVALID_SET_FILE_POINTER is 0xffffffff and it can be valid | |
76 * value for large file so we need also to check GetLastError() | |
77 */ | |
78 | |
79 err = ngx_errno; | |
80 if (err != NO_ERROR) { | |
81 ngx_log_error(NGX_LOG_ERR, file->log, err, | |
82 "SeekFilePointer() failed"); | |
83 return NGX_ERROR; | |
84 } | |
85 } | |
86 } | |
87 | |
88 povlp = NULL; | |
89 | |
90 } else { | |
91 ovlp.Internal = 0; | |
92 ovlp.InternalHigh = 0; | |
93 ovlp.Offset = (u_long) offset; | |
94 ovlp.OffsetHigh = (u_long) (offset >> 32); | |
95 ovlp.hEvent = NULL; | |
96 | |
97 povlp = &ovlp; | |
98 } | |
99 | 60 |
100 if (ReadFile(file->fd, buf, size, &n, povlp) == 0) { | 61 if (ReadFile(file->fd, buf, size, &n, povlp) == 0) { |
101 err = ngx_errno; | 62 err = ngx_errno; |
102 | 63 |
103 if (err == ERROR_HANDLE_EOF) { | 64 if (err == ERROR_HANDLE_EOF) { |
115 | 76 |
116 | 77 |
117 ssize_t | 78 ssize_t |
118 ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) | 79 ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
119 { | 80 { |
120 long high_offset; | |
121 u_long n; | 81 u_long n; |
122 ngx_err_t err; | |
123 OVERLAPPED ovlp, *povlp; | 82 OVERLAPPED ovlp, *povlp; |
124 | 83 |
125 if (ngx_win32_version < NGX_WIN_NT) { | 84 ovlp.Internal = 0; |
126 | 85 ovlp.InternalHigh = 0; |
127 /* | 86 ovlp.Offset = (u_long) offset; |
128 * under Win9X the overlapped pointer must be NULL | 87 ovlp.OffsetHigh = (u_long) (offset >> 32); |
129 * so we have to use SetFilePointer() to set the offset | 88 ovlp.hEvent = NULL; |
130 */ | 89 |
131 | 90 povlp = &ovlp; |
132 if (file->offset != offset) { | |
133 | |
134 /* | |
135 * the maximum file size on the FAT16 is 2G, but on the FAT32 | |
136 * the size is 4G so we have to use high_offset | |
137 * because a single offset is signed value | |
138 */ | |
139 | |
140 high_offset = (long) (offset >> 32); | |
141 if (SetFilePointer(file->fd, (long) offset, &high_offset, | |
142 FILE_BEGIN) == INVALID_SET_FILE_POINTER) | |
143 { | |
144 /* | |
145 * INVALID_SET_FILE_POINTER is 0xffffffff and it can be valid | |
146 * value for large file so we need also to check GetLastError() | |
147 */ | |
148 | |
149 err = ngx_errno; | |
150 if (err != NO_ERROR) { | |
151 ngx_log_error(NGX_LOG_ERR, file->log, err, | |
152 "SeekFilePointer() failed"); | |
153 return NGX_ERROR; | |
154 } | |
155 } | |
156 } | |
157 | |
158 povlp = NULL; | |
159 | |
160 } else { | |
161 ovlp.Internal = 0; | |
162 ovlp.InternalHigh = 0; | |
163 ovlp.Offset = (u_long) offset; | |
164 ovlp.OffsetHigh = (u_long) (offset >> 32); | |
165 ovlp.hEvent = NULL; | |
166 | |
167 povlp = &ovlp; | |
168 } | |
169 | 91 |
170 if (WriteFile(file->fd, buf, size, &n, povlp) == 0) { | 92 if (WriteFile(file->fd, buf, size, &n, povlp) == 0) { |
171 ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, "WriteFile() failed"); | 93 ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, "WriteFile() failed"); |
172 return NGX_ERROR; | 94 return NGX_ERROR; |
173 } | 95 } |