Fix android-cloexec-fopen clang-tidy issues am: b4311a6730

Original change: https://android-review.googlesource.com/c/platform/art/+/2399021

Change-Id: Id2bda28201cba4e5f2d98bcd5bcea46bd177bfe1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/build/Android.bp b/build/Android.bp
index 49a4363..c3ee809 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -29,6 +29,7 @@
 
 art_clang_tidy_errors = [
     "android-cloexec-dup",
+    "android-cloexec-fopen",
     "android-cloexec-open",
     "bugprone-argument-comment",
     "bugprone-lambda-function-name",
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index e6c3d3c..36771b3 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -2805,7 +2805,7 @@
   template <typename T>
   static bool ReadCommentedInputFromFile(
       const char* input_filename, std::function<std::string(const char*)>* process, T* output) {
-    auto input_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(input_filename, "r"), fclose};
+    auto input_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(input_filename, "re"), fclose};
     if (!input_file) {
       LOG(ERROR) << "Failed to open input file " << input_filename;
       return false;
diff --git a/dexdump/dexdump_main.cc b/dexdump/dexdump_main.cc
index 3afee0d..0d46d6b 100644
--- a/dexdump/dexdump_main.cc
+++ b/dexdump/dexdump_main.cc
@@ -137,7 +137,7 @@
 
   // Open alternative output file.
   if (gOptions.outputFileName) {
-    gOutFile = fopen(gOptions.outputFileName, "w");
+    gOutFile = fopen(gOptions.outputFileName, "we");
     if (!gOutFile) {
       PLOG(ERROR) << "Can't open " << gOptions.outputFileName;
       return 1;
diff --git a/dexlayout/dexlayout_main.cc b/dexlayout/dexlayout_main.cc
index 12674f5..6c37b1d 100644
--- a/dexlayout/dexlayout_main.cc
+++ b/dexlayout/dexlayout_main.cc
@@ -180,7 +180,7 @@
   // Open alternative output file.
   FILE* out_file = stdout;
   if (options.output_file_name_) {
-    out_file = fopen(options.output_file_name_, "w");
+    out_file = fopen(options.output_file_name_, "we");
     if (!out_file) {
       PLOG(ERROR) << "Can't open " << options.output_file_name_;
       return 1;
diff --git a/libnativebridge/tests/PreInitializeNativeBridge_test.cpp b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp
index 149b05e..98ef30f 100644
--- a/libnativebridge/tests/PreInitializeNativeBridge_test.cpp
+++ b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp
@@ -39,7 +39,7 @@
     // Try to create our mount namespace.
     if (unshare(CLONE_NEWNS) != -1) {
         // Create a placeholder file.
-        FILE* cpuinfo = fopen("./cpuinfo", "w");
+        FILE* cpuinfo = fopen("./cpuinfo", "we");
         ASSERT_NE(nullptr, cpuinfo) << strerror(errno);
         fprintf(cpuinfo, kTestData);
         fclose(cpuinfo);
@@ -47,7 +47,7 @@
         ASSERT_TRUE(PreInitializeNativeBridge("does not matter 1", "short 2"));
 
         // Read /proc/cpuinfo
-        FILE* proc_cpuinfo = fopen("/proc/cpuinfo", "r");
+        FILE* proc_cpuinfo = fopen("/proc/cpuinfo", "re");
         ASSERT_NE(nullptr, proc_cpuinfo) << strerror(errno);
         char buf[1024];
         EXPECT_NE(nullptr, fgets(buf, sizeof(buf), proc_cpuinfo)) << "Error reading.";
diff --git a/libprofile/profile/profile_compilation_info_test.cc b/libprofile/profile/profile_compilation_info_test.cc
index 2ee34f2..dc78418 100644
--- a/libprofile/profile/profile_compilation_info_test.cc
+++ b/libprofile/profile/profile_compilation_info_test.cc
@@ -148,7 +148,7 @@
 
     // Zip the profile content.
     ScratchFile zip;
-    FILE* file = fopen(zip.GetFile()->GetPath().c_str(), "wb");
+    FILE* file = fopen(zip.GetFile()->GetPath().c_str(), "wbe");
     ZipWriter writer(file);
     writer.StartEntry(zip_entry, zip_flags);
     writer.WriteBytes(data.data(), data.size());
@@ -932,7 +932,7 @@
 
   // Zip the profile content.
   ScratchFile zip;
-  FILE* file = fopen(zip.GetFile()->GetPath().c_str(), "wb");
+  FILE* file = fopen(zip.GetFile()->GetPath().c_str(), "wbe");
   ZipWriter writer(file);
   writer.StartEntry("primary.prof", ZipWriter::kAlign32);
   writer.WriteBytes(data.data(), data.size());
diff --git a/perfetto_hprof/perfetto_hprof.cc b/perfetto_hprof/perfetto_hprof.cc
index 7731aaa..feee29f 100644
--- a/perfetto_hprof/perfetto_hprof.cc
+++ b/perfetto_hprof/perfetto_hprof.cc
@@ -509,7 +509,7 @@
 }
 
 void DumpSmaps(JavaHprofDataSource::TraceContext* ctx) {
-  FILE* smaps = fopen("/proc/self/smaps", "r");
+  FILE* smaps = fopen("/proc/self/smaps", "re");
   if (smaps != nullptr) {
     auto trace_packet = ctx->NewTracePacket();
     auto* smaps_packet = trace_packet->set_smaps_packet();
diff --git a/runtime/dex2oat_environment_test.h b/runtime/dex2oat_environment_test.h
index bc25231..3bfc792 100644
--- a/runtime/dex2oat_environment_test.h
+++ b/runtime/dex2oat_environment_test.h
@@ -250,7 +250,7 @@
     ASSERT_TRUE(vdex_file->ReadFully(data.data(), data.size()));
 
     // Zip the content.
-    FILE* file = fopen(out_dm.c_str(), "wb");
+    FILE* file = fopen(out_dm.c_str(), "wbe");
     ZipWriter writer(file);
     writer.StartEntry("primary.vdex", ZipWriter::kAlign32);
     writer.WriteBytes(data.data(), data.size());
diff --git a/tools/dmtracedump/createtesttrace.cc b/tools/dmtracedump/createtesttrace.cc
index d55b3e4..7bb5a7f 100644
--- a/tools/dmtracedump/createtesttrace.cc
+++ b/tools/dmtracedump/createtesttrace.cc
@@ -115,7 +115,7 @@
  * 2 and increments by 2 for each line.
  */
 void parseInputFile(const char* inputFileName) {
-  FILE* inputFp = fopen(inputFileName, "r");
+  FILE* inputFp = fopen(inputFileName, "re");
   if (inputFp == nullptr) {
     perror(inputFileName);
     exit(1);
@@ -396,7 +396,7 @@
 }
 
 void writeTrace(const char* traceFileName) {
-  FILE* fp = fopen(traceFileName, "w");
+  FILE* fp = fopen(traceFileName, "we");
   if (fp == nullptr) {
     perror(traceFileName);
     exit(1);
diff --git a/tools/dmtracedump/tracedump.cc b/tools/dmtracedump/tracedump.cc
index ecae6c1..3385f4a 100644
--- a/tools/dmtracedump/tracedump.cc
+++ b/tools/dmtracedump/tracedump.cc
@@ -1046,7 +1046,7 @@
   for (int32_t i = 0; i < MAX_THREADS; i++)
     traceData.depth[i] = 2;  // adjust for return from start function
 
-  FILE* dataFp = fopen(gOptions.traceFileName, "rb");
+  FILE* dataFp = fopen(gOptions.traceFileName, "rbe");
   if (dataFp == nullptr) return;
 
   DataKeys* pKeys = parseKeys(dataFp, 1);
@@ -1465,7 +1465,7 @@
     snprintf(path, FILENAME_MAX, "dot-%d-%d.dot", (int32_t)time(nullptr), rand());
   }
 
-  FILE* file = fopen(path, "w+");
+  FILE* file = fopen(path, "we+");
 
   fprintf(file, "digraph g {\nnode [shape = record,height=.1];\n");
 
@@ -2033,7 +2033,7 @@
 DataKeys* parseDataKeys(TraceData* traceData, const char* traceFileName, uint64_t* threadTime) {
   MethodEntry* caller;
 
-  FILE* dataFp = fopen(traceFileName, "rb");
+  FILE* dataFp = fopen(traceFileName, "rbe");
   if (dataFp == nullptr) return nullptr;
 
   DataKeys* dataKeys = parseKeys(dataFp, 0);