Index: net/base/file_stream_posix.cc |
diff --git a/net/base/file_stream_posix.cc b/net/base/file_stream_posix.cc |
index a4c5b3cc27fdc08b87bb77ecd04878ab7bd85b62..e947a6e5fa38f160dc1e190ecccb17f12d908a2c 100644 |
--- a/net/base/file_stream_posix.cc |
+++ b/net/base/file_stream_posix.cc |
@@ -298,13 +298,8 @@ FileStream::FileStream() |
} |
FileStream::FileStream(base::PlatformFile file, int flags) |
- : file_(file), |
- open_flags_(flags) { |
- // If the file handle is opened with base::PLATFORM_FILE_ASYNC, we need to |
- // make sure we will perform asynchronous File IO to it. |
- if (flags & base::PLATFORM_FILE_ASYNC) { |
- async_context_.reset(new AsyncContext()); |
- } |
+ : file_(base::kInvalidPlatformFileValue) { |
+ Open(file, flags); |
} |
FileStream::~FileStream() { |
@@ -323,6 +318,12 @@ void FileStream::Close() { |
} |
} |
+void FileStream::Release() { |
+ // Abort any existing asynchronous operations. |
+ async_context_.reset(); |
+ file_ = base::kInvalidPlatformFileValue; |
+} |
+ |
int FileStream::Open(const FilePath& path, int open_flags) { |
if (IsOpen()) { |
DLOG(FATAL) << "File is already open!"; |
@@ -344,6 +345,21 @@ int FileStream::Open(const FilePath& path, int open_flags) { |
return OK; |
} |
+int FileStream::Open(base::PlatformFile file, int open_flags) { |
+ if (IsOpen()) { |
+ DLOG(FATAL) << "File is already open!"; |
+ return ERR_UNEXPECTED; |
+ } |
+ |
+ open_flags_ = open_flags; |
+ file_ = file; |
+ |
+ if (open_flags & base::PLATFORM_FILE_ASYNC) |
+ async_context_.reset(new AsyncContext()); |
+ |
+ return OK; |
+} |
+ |
bool FileStream::IsOpen() const { |
return file_ != base::kInvalidPlatformFileValue; |
} |
@@ -445,7 +461,7 @@ int64 FileStream::Truncate(int64 bytes) { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- // We better be open for reading. |
+ // We better be open for writing. |
DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
// Seek to the position to truncate from. |