Change RtcEventLogOutputFile to use FILE* for i/o.

Eliminates a dependency on system_wrappers and the FileWrapper class.

Bug: None
Change-Id: I2cbbf4d6c3bf50e9b3b0b6d140da6d5d7e54167e
Reviewed-on: https://webrtc-review.googlesource.com/29821
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21208}
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index 7b31309..ee2f455 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -79,7 +79,6 @@
     "../modules/remote_bitrate_estimator:remote_bitrate_estimator",
     "../modules/rtp_rtcp:rtp_rtcp_format",
     "../rtc_base:rtc_base_approved",
-    "../system_wrappers",
   ]
 
   # TODO(eladalon): Remove this.
diff --git a/logging/rtc_event_log/output/rtc_event_log_output_file.cc b/logging/rtc_event_log/output/rtc_event_log_output_file.cc
index fba7d5b..9e51b41 100644
--- a/logging/rtc_event_log/output/rtc_event_log_output_file.cc
+++ b/logging/rtc_event_log/output/rtc_event_log_output_file.cc
@@ -14,7 +14,6 @@
 #include "logging/rtc_event_log/rtc_event_log.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "system_wrappers/include/file_wrapper.h"
 
 namespace webrtc {
 
@@ -30,48 +29,39 @@
 
 RtcEventLogOutputFile::RtcEventLogOutputFile(const std::string& file_name,
                                              size_t max_size_bytes)
-    : max_size_bytes_(max_size_bytes), file_(FileWrapper::Create()) {
-  RTC_CHECK_LE(max_size_bytes_, kMaxReasonableFileSize);
 
-  if (!file_->OpenFile(file_name.c_str(), false)) {
-    RTC_LOG(LS_ERROR) << "Can't open file. WebRTC event log not started.";
-    file_.reset();
-    return;
-  }
-}
+    // Unlike plain fopen, CreatePlatformFile takes care of filename utf8 ->
+    // wchar conversion on windows.
+    : RtcEventLogOutputFile(rtc::CreatePlatformFile(file_name),
+                            max_size_bytes) {}
 
 RtcEventLogOutputFile::RtcEventLogOutputFile(rtc::PlatformFile file)
     : RtcEventLogOutputFile(file, RtcEventLog::kUnlimitedOutput) {}
 
-RtcEventLogOutputFile::RtcEventLogOutputFile(rtc::PlatformFile file,
+RtcEventLogOutputFile::RtcEventLogOutputFile(rtc::PlatformFile platform_file,
                                              size_t max_size_bytes)
-    : max_size_bytes_(max_size_bytes), file_(FileWrapper::Create()) {
+    : max_size_bytes_(max_size_bytes) {
   RTC_CHECK_LE(max_size_bytes_, kMaxReasonableFileSize);
 
-  FILE* file_handle = rtc::FdopenPlatformFileForWriting(file);
-  if (!file_handle) {
+  // Handle errors from the CreatePlatformFile call in above constructor.
+  if (platform_file == rtc::kInvalidPlatformFileValue) {
+    RTC_LOG(LS_ERROR) << "Invalid file. WebRTC event log not started.";
+    return;
+  }
+  file_ = rtc::FdopenPlatformFileForWriting(platform_file);
+  if (!file_) {
     RTC_LOG(LS_ERROR) << "Can't open file. WebRTC event log not started.";
     // Even though we failed to open a FILE*, the file is still open
     // and needs to be closed.
-    if (!rtc::ClosePlatformFile(file)) {
+    if (!rtc::ClosePlatformFile(platform_file)) {
       RTC_LOG(LS_ERROR) << "Can't close file.";
     }
-    file_.reset();
-    return;
-  }
-
-  if (!file_->OpenFromFileHandle(file_handle)) {
-    RTC_LOG(LS_ERROR) << "Can't open file. WebRTC event log not started.";
-    file_.reset();
-    return;
   }
 }
 
 RtcEventLogOutputFile::~RtcEventLogOutputFile() {
   if (file_) {
-    RTC_DCHECK(IsActiveInternal());
-    file_->CloseFile();
-    file_.reset();
+    fclose(file_);
   }
 }
 
@@ -85,29 +75,27 @@
   // calculation of (written_bytes_ + output.length()).
   RTC_DCHECK_LT(output.length(), kMaxReasonableFileSize);
 
-  bool written = false;
   if (max_size_bytes_ == RtcEventLog::kUnlimitedOutput ||
       written_bytes_ + output.length() <= max_size_bytes_) {
-    written = file_->Write(output.c_str(), output.size());
-    if (!written) {
-      RTC_LOG(LS_ERROR) << "FileWrapper failed to write WebRtcEventLog file.";
+    if (fwrite(output.c_str(), 1, output.size(), file_) == output.size()) {
+      written_bytes_ += output.size();
+      return true;
+    } else {
+      RTC_LOG(LS_ERROR) << "Write to WebRtcEventLog file failed.";
     }
   } else {
     RTC_LOG(LS_VERBOSE) << "Max file size reached.";
   }
 
-  if (written) {
-    written_bytes_ += output.size();
-  } else {
-    file_->CloseFile();
-    file_.reset();
-  }
-
-  return written;
+  // Failed, for one of above reasons. Close output file.
+  fclose(file_);
+  file_ = nullptr;
+  return false;
 }
 
+// Internal non-virtual method.
 bool RtcEventLogOutputFile::IsActiveInternal() const {
-  return file_ && file_->is_open();
+  return file_ != nullptr;
 }
 
 }  // namespace webrtc
diff --git a/logging/rtc_event_log/output/rtc_event_log_output_file.h b/logging/rtc_event_log/output/rtc_event_log_output_file.h
index a07345c..3274084 100644
--- a/logging/rtc_event_log/output/rtc_event_log_output_file.h
+++ b/logging/rtc_event_log/output/rtc_event_log_output_file.h
@@ -12,6 +12,7 @@
 #define LOGGING_RTC_EVENT_LOG_OUTPUT_RTC_EVENT_LOG_OUTPUT_FILE_H_
 
 #include <stddef.h>
+#include <stdio.h>
 
 #include <memory>
 #include <string>
@@ -21,8 +22,6 @@
 
 namespace webrtc {
 
-class FileWrapper;
-
 class RtcEventLogOutputFile final : public RtcEventLogOutput {
  public:
   static const size_t kMaxReasonableFileSize;  // Explanation at declaration.
@@ -47,12 +46,10 @@
   // some other function of this class.
   inline bool IsActiveInternal() const;
 
-  // TODO(eladalon): We're still discussing whether to use FileWrapper or not.
-  // If we end up keeping FileWrapper, we should use its own max-size logic,
-  // rather than duplicate it.
+  // Maximum size, or zero for no limit.
   const size_t max_size_bytes_;
   size_t written_bytes_{0};
-  std::unique_ptr<FileWrapper> file_;
+  FILE* file_{nullptr};
 };
 
 }  // namespace webrtc