Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(829)

Unified Diff: util/file/file_writer.cc

Issue 871193010: Add FileHandleFileWriter (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Rename to WeakFileHandleFileWriter Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « util/file/file_writer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/file/file_writer.cc
diff --git a/util/file/file_writer.cc b/util/file/file_writer.cc
index 4794c7f074ee47a1c648349f55829a5cef047b28..1b6ba0d4a1079ad87d3c5e89fca22a97404eb604 100644
--- a/util/file/file_writer.cc
+++ b/util/file/file_writer.cc
@@ -37,31 +37,18 @@ static_assert(offsetof(WritableIoVec, iov_len) == offsetof(iovec, iov_len),
"WritableIoVec len offset");
#endif // OS_POSIX
-FileWriter::FileWriter() : file_() {
+WeakFileHandleFileWriter::WeakFileHandleFileWriter(FileHandle file_handle)
+ : file_handle_(file_handle) {
}
-FileWriter::~FileWriter() {
+WeakFileHandleFileWriter::~WeakFileHandleFileWriter() {
}
-bool FileWriter::Open(const base::FilePath& path,
- FileWriteMode write_mode,
- FilePermissions permissions) {
- CHECK(!file_.is_valid());
- file_.reset(LoggingOpenFileForWrite(path, write_mode, permissions));
- return file_.is_valid();
-}
-
-void FileWriter::Close() {
- CHECK(file_.is_valid());
-
- file_.reset();
-}
-
-bool FileWriter::Write(const void* data, size_t size) {
- DCHECK(file_.is_valid());
+bool WeakFileHandleFileWriter::Write(const void* data, size_t size) {
+ DCHECK_NE(file_handle_, kInvalidFileHandle);
// TODO(mark): Write no more than SSIZE_MAX bytes in a single call.
- ssize_t written = WriteFile(file_.get(), data, size);
+ ssize_t written = WriteFile(file_handle_, data, size);
if (written < 0) {
PLOG(ERROR) << "write";
return false;
@@ -73,8 +60,8 @@ bool FileWriter::Write(const void* data, size_t size) {
return true;
}
-bool FileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) {
- DCHECK(file_.is_valid());
+bool WeakFileHandleFileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) {
+ DCHECK_NE(file_handle_, kInvalidFileHandle);
#if defined(OS_POSIX)
@@ -97,7 +84,7 @@ bool FileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) {
size_t writev_iovec_count =
std::min(remaining_iovecs, implicit_cast<size_t>(IOV_MAX));
ssize_t written =
- HANDLE_EINTR(writev(file_.get(), iov, writev_iovec_count));
+ HANDLE_EINTR(writev(file_handle_, iov, writev_iovec_count));
if (written < 0) {
PLOG(ERROR) << "writev";
return false;
@@ -149,9 +136,52 @@ bool FileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) {
return true;
}
+FileOffset WeakFileHandleFileWriter::Seek(FileOffset offset, int whence) {
+ DCHECK_NE(file_handle_, kInvalidFileHandle);
+ return LoggingSeekFile(file_handle_, offset, whence);
+}
+
+FileWriter::FileWriter()
+ : file_(),
+ weak_file_handle_file_writer_(kInvalidFileHandle) {
+}
+
+FileWriter::~FileWriter() {
+}
+
+bool FileWriter::Open(const base::FilePath& path,
+ FileWriteMode write_mode,
+ FilePermissions permissions) {
+ CHECK(!file_.is_valid());
+ file_.reset(LoggingOpenFileForWrite(path, write_mode, permissions));
+ if (!file_.is_valid()) {
+ return false;
+ }
+
+ weak_file_handle_file_writer_.set_file_handle(file_.get());
+ return true;
+}
+
+void FileWriter::Close() {
+ CHECK(file_.is_valid());
+
+ weak_file_handle_file_writer_.set_file_handle(kInvalidFileHandle);
+ file_.reset();
+}
+
+bool FileWriter::Write(const void* data, size_t size) {
+ DCHECK(file_.is_valid());
+ return weak_file_handle_file_writer_.Write(data, size);
+}
+
+bool FileWriter::WriteIoVec(std::vector<WritableIoVec>* iovecs) {
+ DCHECK(file_.is_valid());
+ return weak_file_handle_file_writer_.WriteIoVec(iovecs);
+}
+
FileOffset FileWriter::Seek(FileOffset offset, int whence) {
DCHECK(file_.is_valid());
- return LoggingSeekFile(file_.get(), offset, whence);
+ return weak_file_handle_file_writer_.Seek(offset, whence);
}
} // namespace crashpad
« no previous file with comments | « util/file/file_writer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698