Dex header cleanup and windows simplification

Remove a few unnecessary inclusions, move one missed header to
libdexfile.  Also use android-base utilities for file loading in
dexdump2 and dexlist.  (The utilities seem to work on Windows, where
mmap did not.)

Bug: 22322814
Test: make -j 50 test-art-host-gtest
Change-Id: I6e6de1895921f664a2280451b01e367649436200
diff --git a/dexdump/dexdump.cc b/dexdump/dexdump.cc
index 8778b12..61a1209 100644
--- a/dexdump/dexdump.cc
+++ b/dexdump/dexdump.cc
@@ -34,19 +34,14 @@
 
 #include "dexdump.h"
 
-#include <fcntl.h>
 #include <inttypes.h>
 #include <stdio.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
 
-#include <iostream>
 #include <memory>
 #include <sstream>
 #include <vector>
 
+#include "android-base/file.h"
 #include "android-base/logging.h"
 #include "android-base/stringprintf.h"
 
@@ -1879,34 +1874,6 @@
   }
 }
 
-static bool openAndMapFile(const char* fileName,
-                           const uint8_t** base,
-                           size_t* size,
-                           std::string* error_msg) {
-  int fd = open(fileName, O_RDONLY);
-  if (fd < 0) {
-    *error_msg = "open failed";
-    return false;
-  }
-  struct stat st;
-  if (fstat(fd, &st) < 0) {
-    *error_msg = "stat failed";
-    return false;
-  }
-  *size = st.st_size;
-  if (*size == 0) {
-    *error_msg = "size == 0";
-    return false;
-  }
-  void* addr = mmap(nullptr /*addr*/, *size, PROT_READ, MAP_PRIVATE, fd, 0 /*offset*/);
-  if (addr == MAP_FAILED) {
-    *error_msg = "mmap failed";
-    return false;
-  }
-  *base = reinterpret_cast<const uint8_t*>(addr);
-  return true;
-}
-
 /*
  * Processes a single file (either direct .dex or indirect .zip/.jar/.apk).
  */
@@ -1918,17 +1885,22 @@
   // If the file is not a .dex file, the function tries .zip/.jar/.apk files,
   // all of which are Zip archives with "classes.dex" inside.
   const bool kVerifyChecksum = !gOptions.ignoreBadChecksum;
-  const uint8_t* base = nullptr;
-  size_t size = 0;
-  std::string error_msg;
-  if (!openAndMapFile(fileName, &base, &size, &error_msg)) {
-    LOG(ERROR) << error_msg;
+  std::string content;
+  // TODO: add an api to android::base to read a std::vector<uint8_t>.
+  if (!android::base::ReadFileToString(fileName, &content)) {
+    LOG(ERROR) << "ReadFileToString failed";
     return -1;
   }
   const DexFileLoader dex_file_loader;
+  std::string error_msg;
   std::vector<std::unique_ptr<const DexFile>> dex_files;
-  if (!dex_file_loader.OpenAll(
-        base, size, fileName, /*verify*/ true, kVerifyChecksum, &error_msg, &dex_files)) {
+  if (!dex_file_loader.OpenAll(reinterpret_cast<const uint8_t*>(content.data()),
+                               content.size(),
+                               fileName,
+                               /*verify*/ true,
+                               kVerifyChecksum,
+                               &error_msg,
+                               &dex_files)) {
     // Display returned error message to user. Note that this error behavior
     // differs from the error messages shown by the original Dalvik dexdump.
     LOG(ERROR) << error_msg;