Remove-on-destroy option for simgear::Dir, to help with cleaning up temporary directories.
This commit is contained in:
parent
63a8209a83
commit
43e13f0cf2
@ -47,22 +47,37 @@ using std::string;
|
|||||||
namespace simgear
|
namespace simgear
|
||||||
{
|
{
|
||||||
|
|
||||||
Dir::Dir()
|
Dir::Dir() :
|
||||||
|
_removeOnDestroy(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Dir::Dir(const SGPath& path) :
|
Dir::Dir(const SGPath& path) :
|
||||||
_path(path)
|
_path(path),
|
||||||
|
_removeOnDestroy(false)
|
||||||
{
|
{
|
||||||
_path.set_cached(false); // disable caching, so create/remove work
|
_path.set_cached(false); // disable caching, so create/remove work
|
||||||
}
|
}
|
||||||
|
|
||||||
Dir::Dir(const Dir& rel, const SGPath& relPath) :
|
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
|
_path.set_cached(false); // disable caching, so create/remove work
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dir::~Dir()
|
||||||
|
{
|
||||||
|
if (_removeOnDestroy) {
|
||||||
|
remove(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Dir::setRemoveOnDestroy()
|
||||||
|
{
|
||||||
|
_removeOnDestroy = true;
|
||||||
|
}
|
||||||
|
|
||||||
Dir Dir::current()
|
Dir Dir::current()
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -79,7 +94,7 @@ Dir Dir::tempDir(const std::string& templ)
|
|||||||
{
|
{
|
||||||
#ifdef HAVE_MKDTEMP
|
#ifdef HAVE_MKDTEMP
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
char* tempPath = ::getenv("TMPDIR");
|
const char* tempPath = ::getenv("TMPDIR");
|
||||||
if (!tempPath) {
|
if (!tempPath) {
|
||||||
tempPath = "/tmp/";
|
tempPath = "/tmp/";
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,15 @@ namespace simgear
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Dir();
|
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();
|
static Dir current();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,6 +101,7 @@ namespace simgear
|
|||||||
Dir parent() const;
|
Dir parent() const;
|
||||||
private:
|
private:
|
||||||
mutable SGPath _path;
|
mutable SGPath _path;
|
||||||
|
bool _removeOnDestroy;
|
||||||
};
|
};
|
||||||
} // of namespace simgear
|
} // of namespace simgear
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user