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 }