OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #include "net/base/file_stream.h" | 5 #include "net/base/file_stream.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 } | 227 } |
228 } else if (overlapped) { | 228 } else if (overlapped) { |
229 async_context_->IOCompletionIsPending(callback); | 229 async_context_->IOCompletionIsPending(callback); |
230 rv = ERR_IO_PENDING; | 230 rv = ERR_IO_PENDING; |
231 } else { | 231 } else { |
232 rv = static_cast<int>(bytes_read); | 232 rv = static_cast<int>(bytes_read); |
233 } | 233 } |
234 return rv; | 234 return rv; |
235 } | 235 } |
236 | 236 |
| 237 int FileStream::ReadUntilComplete(char *buf, int buf_len) { |
| 238 int to_read = buf_len; |
| 239 int bytes_total = 0; |
| 240 |
| 241 do { |
| 242 int bytes_read = Read(buf, to_read, NULL); |
| 243 if (bytes_read <= 0) { |
| 244 if (bytes_total == 0) |
| 245 return bytes_read; |
| 246 |
| 247 return bytes_total; |
| 248 } |
| 249 |
| 250 bytes_total += bytes_read; |
| 251 buf += bytes_read; |
| 252 to_read -= bytes_read; |
| 253 } while (bytes_total < buf_len); |
| 254 |
| 255 return bytes_total; |
| 256 } |
| 257 |
237 int FileStream::Write( | 258 int FileStream::Write( |
238 const char* buf, int buf_len, CompletionCallback* callback) { | 259 const char* buf, int buf_len, CompletionCallback* callback) { |
239 if (!IsOpen()) | 260 if (!IsOpen()) |
240 return ERR_UNEXPECTED; | 261 return ERR_UNEXPECTED; |
241 DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); | 262 DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
242 | 263 |
243 OVERLAPPED* overlapped = NULL; | 264 OVERLAPPED* overlapped = NULL; |
244 if (async_context_.get()) { | 265 if (async_context_.get()) { |
245 DCHECK(!async_context_->callback()); | 266 DCHECK(!async_context_->callback()); |
246 overlapped = async_context_->overlapped(); | 267 overlapped = async_context_->overlapped(); |
(...skipping 14 matching lines...) Expand all Loading... |
261 async_context_->IOCompletionIsPending(callback); | 282 async_context_->IOCompletionIsPending(callback); |
262 rv = ERR_IO_PENDING; | 283 rv = ERR_IO_PENDING; |
263 } else { | 284 } else { |
264 rv = static_cast<int>(bytes_written); | 285 rv = static_cast<int>(bytes_written); |
265 } | 286 } |
266 return rv; | 287 return rv; |
267 } | 288 } |
268 | 289 |
269 } // namespace net | 290 } // namespace net |
270 | 291 |
OLD | NEW |