diff --git a/src/utils/pathut.cpp b/src/utils/pathut.cpp index 40bde2a3..3ca1e411 100644 --- a/src/utils/pathut.cpp +++ b/src/utils/pathut.cpp @@ -148,6 +148,7 @@ bool maketmpdir(string& tdir, string& reason) } TempFileInternal::TempFileInternal(const string& suffix) + : m_noremove(false) { string filename = path_cat(tmplocation(), "rcltmpfXXXXXX"); char *cp = strdup(filename.c_str()); @@ -179,7 +180,7 @@ TempFileInternal::TempFileInternal(const string& suffix) TempFileInternal::~TempFileInternal() { - if (!m_filename.empty()) + if (!m_filename.empty() && !m_noremove) unlink(m_filename.c_str()); } diff --git a/src/utils/pathut.h b/src/utils/pathut.h index 94ef9a79..a2cf2317 100644 --- a/src/utils/pathut.h +++ b/src/utils/pathut.h @@ -85,12 +85,26 @@ class TempFileInternal { public: TempFileInternal(const string& suffix); ~TempFileInternal(); - const char *filename() {return m_filename.c_str();} - const string &getreason() {return m_reason;} - bool ok() {return !m_filename.empty();} + const char *filename() + { + return m_filename.c_str(); + } + const string &getreason() + { + return m_reason; + } + void setnoremove(bool onoff) + { + m_noremove = onoff; + } + bool ok() + { + return !m_filename.empty(); + } private: string m_filename; string m_reason; + bool m_noremove; }; typedef RefCntr TempFile;