diff --git a/base/file.cpp b/base/file.cpp index 7a147115e..d5bb7fe24 100644 --- a/base/file.cpp +++ b/base/file.cpp @@ -134,6 +134,8 @@ TemporaryDir::TemporaryDir() { } 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 80d71346d..f8748b5d4 100644 --- a/base/include/android-base/file.h +++ b/base/include/android-base/file.h @@ -61,12 +61,16 @@ class TemporaryDir { 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); };