Reland "Trim down FileWrapper class to be merely a wrapper owning a FILE*"
This is a reland of 80b95de7651caa0cfeb684ffc200860989f667dc
Original change's description:
> Trim down FileWrapper class to be merely a wrapper owning a FILE*
>
> Bug: webrtc:6463
> Change-Id: If71e2f3a75dc1863bc805ab71de1e2d33294f805
> Reviewed-on: https://webrtc-review.googlesource.com/c/117881
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Alex Loiko <aleloi@webrtc.org>
> Commit-Queue: Niels Moller <nisse@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#26311}
Bug: webrtc:6463
Change-Id: I12154ef65744c1b7811974a1d871e05ed3fbbc27
Reviewed-on: https://webrtc-review.googlesource.com/c/118660
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26337}
diff --git a/rtc_base/system/file_wrapper.cc b/rtc_base/system/file_wrapper.cc
index c033a79..dbea1ca 100644
--- a/rtc_base/system/file_wrapper.cc
+++ b/rtc_base/system/file_wrapper.cc
@@ -34,22 +34,13 @@
} // namespace
// static
-FileWrapper* FileWrapper::Create() {
- return new FileWrapper();
+FileWrapper FileWrapper::OpenReadOnly(const char* file_name_utf8) {
+ return FileWrapper(FileOpen(file_name_utf8, true));
}
// static
-FileWrapper FileWrapper::Open(const char* file_name_utf8, bool read_only) {
- return FileWrapper(FileOpen(file_name_utf8, read_only), 0);
-}
-
-FileWrapper::FileWrapper() {}
-
-FileWrapper::FileWrapper(FILE* file, size_t max_size)
- : file_(file), max_size_in_bytes_(max_size) {}
-
-FileWrapper::~FileWrapper() {
- CloseFileImpl();
+FileWrapper FileWrapper::OpenWriteOnly(const char* file_name_utf8) {
+ return FileWrapper(FileOpen(file_name_utf8, false));
}
FileWrapper::FileWrapper(FileWrapper&& other) {
@@ -57,95 +48,39 @@
}
FileWrapper& FileWrapper::operator=(FileWrapper&& other) {
+ Close();
file_ = other.file_;
- max_size_in_bytes_ = other.max_size_in_bytes_;
- position_ = other.position_;
other.file_ = nullptr;
return *this;
}
-void FileWrapper::CloseFile() {
- rtc::CritScope lock(&lock_);
- CloseFileImpl();
+bool FileWrapper::Rewind() {
+ RTC_DCHECK(file_);
+ return fseek(file_, 0, SEEK_SET) == 0;
}
-int FileWrapper::Rewind() {
- rtc::CritScope lock(&lock_);
- if (file_ != nullptr) {
- position_ = 0;
- return fseek(file_, 0, SEEK_SET);
- }
- return -1;
+bool FileWrapper::Flush() {
+ RTC_DCHECK(file_);
+ return fflush(file_) == 0;
}
-void FileWrapper::SetMaxFileSize(size_t bytes) {
- rtc::CritScope lock(&lock_);
- max_size_in_bytes_ = bytes;
-}
-
-int FileWrapper::Flush() {
- rtc::CritScope lock(&lock_);
- return FlushImpl();
-}
-
-bool FileWrapper::OpenFile(const char* file_name_utf8, bool read_only) {
- size_t length = strlen(file_name_utf8);
- if (length > kMaxFileNameSize - 1)
- return false;
-
- rtc::CritScope lock(&lock_);
- if (file_ != nullptr)
- return false;
-
- file_ = FileOpen(file_name_utf8, read_only);
- return file_ != nullptr;
-}
-
-bool FileWrapper::OpenFromFileHandle(FILE* handle) {
- if (!handle)
- return false;
- rtc::CritScope lock(&lock_);
- CloseFileImpl();
- file_ = handle;
- return true;
-}
-
-int FileWrapper::Read(void* buf, size_t length) {
- rtc::CritScope lock(&lock_);
- if (file_ == nullptr)
- return -1;
-
- size_t bytes_read = fread(buf, 1, length, file_);
- return static_cast<int>(bytes_read);
+size_t FileWrapper::Read(void* buf, size_t length) {
+ RTC_DCHECK(file_);
+ return fread(buf, 1, length, file_);
}
bool FileWrapper::Write(const void* buf, size_t length) {
- if (buf == nullptr)
- return false;
+ RTC_DCHECK(file_);
+ return fwrite(buf, 1, length, file_) == length;
+}
- rtc::CritScope lock(&lock_);
-
+bool FileWrapper::Close() {
if (file_ == nullptr)
- return false;
+ return true;
- // Check if it's time to stop writing.
- if (max_size_in_bytes_ > 0 && (position_ + length) > max_size_in_bytes_)
- return false;
-
- size_t num_bytes = fwrite(buf, 1, length, file_);
- position_ += num_bytes;
-
- return num_bytes == length;
-}
-
-void FileWrapper::CloseFileImpl() {
- if (file_ != nullptr)
- fclose(file_);
+ bool success = fclose(file_) == 0;
file_ = nullptr;
-}
-
-int FileWrapper::FlushImpl() {
- return (file_ != nullptr) ? fflush(file_) : -1;
+ return success;
}
} // namespace webrtc