diff --git a/simgear/misc/sg_dir.cxx b/simgear/misc/sg_dir.cxx index 95f9949d..8922b030 100644 --- a/simgear/misc/sg_dir.cxx +++ b/simgear/misc/sg_dir.cxx @@ -47,22 +47,37 @@ using std::string; namespace simgear { -Dir::Dir() +Dir::Dir() : + _removeOnDestroy(false) { } Dir::Dir(const SGPath& path) : - _path(path) + _path(path), + _removeOnDestroy(false) { _path.set_cached(false); // disable caching, so create/remove work } Dir::Dir(const Dir& rel, const SGPath& relPath) : - _path(rel.file(relPath.str())) + _path(rel.file(relPath.str())), + _removeOnDestroy(false) { _path.set_cached(false); // disable caching, so create/remove work } +Dir::~Dir() +{ + if (_removeOnDestroy) { + remove(true); + } +} + +void Dir::setRemoveOnDestroy() +{ + _removeOnDestroy = true; +} + Dir Dir::current() { #ifdef _WIN32 @@ -79,7 +94,7 @@ Dir Dir::tempDir(const std::string& templ) { #ifdef HAVE_MKDTEMP char buf[1024]; - char* tempPath = ::getenv("TMPDIR"); + const char* tempPath = ::getenv("TMPDIR"); if (!tempPath) { tempPath = "/tmp/"; } diff --git a/simgear/misc/sg_dir.hxx b/simgear/misc/sg_dir.hxx index 7befbc8c..109a0d4b 100644 --- a/simgear/misc/sg_dir.hxx +++ b/simgear/misc/sg_dir.hxx @@ -43,7 +43,15 @@ namespace simgear { public: Dir(); - + ~Dir(); + + /** + * when this directory object is destroyed, remove the corresponding + * diretory (and its contents) from the disk. Often used with temporary + * directories to ensure they are cleaned up. + */ + void setRemoveOnDestroy(); + static Dir current(); /** @@ -93,6 +101,7 @@ namespace simgear Dir parent() const; private: mutable SGPath _path; + bool _removeOnDestroy; }; } // of namespace simgear