From bf927c256187f44cc8b4b544566c8ca1e87ba18a Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Thu, 19 Jun 2014 22:31:13 +1000 Subject: [PATCH] Add remove_directory_internal function and use it in PBD::clear_directory and PBD::remove_directory Conflicts: libs/pbd/clear_dir.cc --- libs/pbd/clear_dir.cc | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/libs/pbd/clear_dir.cc b/libs/pbd/clear_dir.cc index b1715c292c..f1e30e85bf 100644 --- a/libs/pbd/clear_dir.cc +++ b/libs/pbd/clear_dir.cc @@ -46,14 +46,14 @@ using namespace PBD; using namespace std; int -PBD::clear_directory (const string& dir, size_t* size, vector* paths) +remove_directory_internal (const string& dir, size_t* size, vector* paths, + bool just_remove_files) { vector tmp_paths; struct stat statbuf; int ret = 0; - // we are only removing files, not the directory structure - get_directory_contents (dir, tmp_paths, true, true); + get_directory_contents (dir, tmp_paths, just_remove_files, true); for (vector::const_iterator i = tmp_paths.begin(); i != tmp_paths.end(); ++i) { @@ -62,8 +62,8 @@ PBD::clear_directory (const string& dir, size_t* size, vector* paths) continue; } - if (::g_unlink (i->c_str())) { - error << string_compose (_("cannot remove file %1 (%2)"), *i, strerror (errno)) + if (::g_remove (i->c_str())) { + error << string_compose (_("cannot remove path %1 (%2)"), *i, strerror (errno)) << endmsg; ret = 1; } @@ -81,7 +81,15 @@ PBD::clear_directory (const string& dir, size_t* size, vector* paths) return ret; } +int +PBD::clear_directory (const string& dir, size_t* size, vector* paths) +{ + return remove_directory_internal (dir, size, paths, true); +} + // rm -rf -- used to remove saved plugin state + +#ifdef USE_WAVES_RMDIR_IMPLEMENTATION void PBD::remove_directory (const std::string& dir) { DIR* dead; @@ -115,4 +123,13 @@ PBD::remove_directory (const std::string& dir) { error << string_compose (_("cannot remove directory %1 (%2)"), dir, strerror (errno)) << endmsg; } ::closedir (dead); +} +#else + +void +PBD::remove_directory (const std::string& dir) +{ + remove_directory_internal (dir, 0, 0, false); } + +#endif