13
0

Add PBD::tmp_writable_directory utility function to pbd/file_utils.h/cc

This commit is contained in:
Tim Mayberry 2014-11-29 13:44:11 +07:00
parent 2b03521ef9
commit 1abe8f4e42
2 changed files with 33 additions and 0 deletions

View File

@ -468,4 +468,21 @@ remove_directory (const std::string& dir)
remove_directory_internal (dir, 0, 0, false);
}
string
tmp_writable_directory (const char* domain, const string& prefix)
{
std::string tmp_dir = Glib::build_filename (g_get_tmp_dir(), domain);
std::string dir_name;
std::string new_test_dir;
do {
ostringstream oss;
oss << prefix;
oss << g_random_int ();
dir_name = oss.str();
new_test_dir = Glib::build_filename (tmp_dir, dir_name);
if (Glib::file_test (new_test_dir, Glib::FILE_TEST_EXISTS)) continue;
} while (g_mkdir_with_parents (new_test_dir.c_str(), 0755) != 0);
return new_test_dir;
}
} // namespace PBD

View File

@ -232,6 +232,22 @@ LIBPBD_API int clear_directory (const std::string& dir, size_t* size = 0,
*/
LIBPBD_API void remove_directory (const std::string& dir);
/**
* Create a temporary writable directory in which to create
* temporary files. The directory will be created under the
* top level "domain" directory.
*
* For instance tmp_writable_directory ("pbd", "foo") on POSIX
* systems may return a path to a new directory something like
* to /tmp/pbd/foo-1423
*
* @param domain The top level directory
* @param prefix A prefix to use when creating subdirectory name
*
* @return new temporary directory
*/
LIBPBD_API std::string tmp_writable_directory (const char* domain, const std::string& prefix);
} // namespace PBD
#endif