X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Ffile_utils.cc;h=849d7f05fd216e804cd963931a9bfe1d3d6cab20;hb=61f9ca9f3c3fb8283ebc67c39f9083730511488b;hp=311d22f9e0a4fc4c2fd9fcf1442e845aae939cd0;hpb=23e7cf10191270d70357ccf0ed9294f020c7b7ab;p=ardour.git diff --git a/libs/pbd/file_utils.cc b/libs/pbd/file_utils.cc index 311d22f9e0..849d7f05fd 100644 --- a/libs/pbd/file_utils.cc +++ b/libs/pbd/file_utils.cc @@ -329,6 +329,21 @@ copy_files(const std::string & from_path, const std::string & to_dir) } } +void +copy_recurse(const std::string & from_path, const std::string & to_dir) +{ + vector files; + find_files_matching_filter (files, from_path, accept_all_files, 0, false, true, true); + + const size_t prefix_len = from_path.size(); + for (vector::iterator i = files.begin(); i != files.end(); ++i) { + std::string from = *i; + std::string to = Glib::build_filename (to_dir, (*i).substr(prefix_len)); + g_mkdir_with_parents (Glib::path_get_dirname (to).c_str(), 0755); + copy_file (from, to); + } +} + std::string get_absolute_path (const std::string & p) { @@ -336,6 +351,16 @@ get_absolute_path (const std::string & p) return Glib::build_filename (Glib::get_current_dir(), p); } +std::string +get_suffix (const std::string & p) +{ + string::size_type period = p.find_last_of ('.'); + if (period == string::npos || period == p.length() - 1) { + return string(); + } + return p.substr (period+1); +} + bool equivalent_paths (const std::string& a, const std::string& b) { @@ -443,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