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 // For 64-bit file access (off_t = off64_t, lseek64, etc). | 5 // For 64-bit file access (off_t = off64_t, lseek64, etc). |
6 #define _FILE_OFFSET_BITS 64 | 6 #define _FILE_OFFSET_BITS 64 |
7 | 7 |
8 #include "net/base/file_stream.h" | 8 #include "net/base/file_stream.h" |
9 | 9 |
10 #include <sys/types.h> | 10 #include <sys/types.h> |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 | 375 |
376 return size - cur_pos; | 376 return size - cur_pos; |
377 } | 377 } |
378 | 378 |
379 int FileStream::Read( | 379 int FileStream::Read( |
380 char* buf, int buf_len, CompletionCallback* callback) { | 380 char* buf, int buf_len, CompletionCallback* callback) { |
381 if (!IsOpen()) | 381 if (!IsOpen()) |
382 return ERR_UNEXPECTED; | 382 return ERR_UNEXPECTED; |
383 | 383 |
384 // read(..., 0) will return 0, which indicates end-of-file. | 384 // read(..., 0) will return 0, which indicates end-of-file. |
385 DCHECK(buf_len > 0 && buf_len <= SSIZE_MAX); | 385 DCHECK(buf_len > 0); |
386 DCHECK(open_flags_ & base::PLATFORM_FILE_READ); | 386 DCHECK(open_flags_ & base::PLATFORM_FILE_READ); |
387 | 387 |
388 if (async_context_.get()) { | 388 if (async_context_.get()) { |
389 DCHECK(open_flags_ & base::PLATFORM_FILE_ASYNC); | 389 DCHECK(open_flags_ & base::PLATFORM_FILE_ASYNC); |
390 // If we're in async, make sure we don't have a request in flight. | 390 // If we're in async, make sure we don't have a request in flight. |
391 DCHECK(!async_context_->callback()); | 391 DCHECK(!async_context_->callback()); |
392 async_context_->InitiateAsyncRead(file_, buf, buf_len, callback); | 392 async_context_->InitiateAsyncRead(file_, buf, buf_len, callback); |
393 return ERR_IO_PENDING; | 393 return ERR_IO_PENDING; |
394 } else { | 394 } else { |
395 return ReadFile(file_, buf, buf_len); | 395 return ReadFile(file_, buf, buf_len); |
(...skipping 17 matching lines...) Expand all Loading... |
413 buf += bytes_read; | 413 buf += bytes_read; |
414 to_read -= bytes_read; | 414 to_read -= bytes_read; |
415 } while (bytes_total < buf_len); | 415 } while (bytes_total < buf_len); |
416 | 416 |
417 return bytes_total; | 417 return bytes_total; |
418 } | 418 } |
419 | 419 |
420 int FileStream::Write( | 420 int FileStream::Write( |
421 const char* buf, int buf_len, CompletionCallback* callback) { | 421 const char* buf, int buf_len, CompletionCallback* callback) { |
422 // write(..., 0) will return 0, which indicates end-of-file. | 422 // write(..., 0) will return 0, which indicates end-of-file. |
423 DCHECK(buf_len > 0 && buf_len <= SSIZE_MAX); | 423 DCHECK(buf_len > 0); |
424 | 424 |
425 if (!IsOpen()) | 425 if (!IsOpen()) |
426 return ERR_UNEXPECTED; | 426 return ERR_UNEXPECTED; |
427 | 427 |
428 if (async_context_.get()) { | 428 if (async_context_.get()) { |
429 DCHECK(open_flags_ & base::PLATFORM_FILE_ASYNC); | 429 DCHECK(open_flags_ & base::PLATFORM_FILE_ASYNC); |
430 // If we're in async, make sure we don't have a request in flight. | 430 // If we're in async, make sure we don't have a request in flight. |
431 DCHECK(!async_context_->callback()); | 431 DCHECK(!async_context_->callback()); |
432 async_context_->InitiateAsyncWrite(file_, buf, buf_len, callback); | 432 async_context_->InitiateAsyncWrite(file_, buf, buf_len, callback); |
433 return ERR_IO_PENDING; | 433 return ERR_IO_PENDING; |
(...skipping 13 matching lines...) Expand all Loading... |
447 int64 seek_position = Seek(FROM_BEGIN, bytes); | 447 int64 seek_position = Seek(FROM_BEGIN, bytes); |
448 if (seek_position != bytes) | 448 if (seek_position != bytes) |
449 return ERR_UNEXPECTED; | 449 return ERR_UNEXPECTED; |
450 | 450 |
451 // And truncate the file. | 451 // And truncate the file. |
452 int result = ftruncate(file_, bytes); | 452 int result = ftruncate(file_, bytes); |
453 return result == 0 ? seek_position : MapErrorCode(errno); | 453 return result == 0 ? seek_position : MapErrorCode(errno); |
454 } | 454 } |
455 | 455 |
456 } // namespace net | 456 } // namespace net |
OLD | NEW |