Merge "base: TemporaryDir add DoNotRemove() method"
diff --git a/base/file.cpp b/base/file.cpp
index 7a14711..d5bb7fe 100644
--- a/base/file.cpp
+++ b/base/file.cpp
@@ -134,6 +134,8 @@
 }
 
 TemporaryDir::~TemporaryDir() {
+  if (!remove_dir_and_contents_) return;
+
   auto callback = [](const char* child, const struct stat*, int file_type, struct FTW*) -> int {
     switch (file_type) {
       case FTW_D:
diff --git a/base/include/android-base/file.h b/base/include/android-base/file.h
index 80d7134..f8748b5 100644
--- a/base/include/android-base/file.h
+++ b/base/include/android-base/file.h
@@ -61,12 +61,16 @@
  public:
   TemporaryDir();
   ~TemporaryDir();
+  // Don't remove the temporary dir in the destructor.
+  void DoNotRemove() { remove_dir_and_contents_ = false; }
 
   char path[1024];
 
  private:
   bool init(const std::string& tmp_dir);
 
+  bool remove_dir_and_contents_ = true;
+
   DISALLOW_COPY_AND_ASSIGN(TemporaryDir);
 };