diff options
Diffstat (limited to 'butl')
-rw-r--r-- | butl/filesystem | 6 | ||||
-rw-r--r-- | butl/filesystem.cxx | 14 |
2 files changed, 20 insertions, 0 deletions
diff --git a/butl/filesystem b/butl/filesystem index 4d0b7ef..63b19ff 100644 --- a/butl/filesystem +++ b/butl/filesystem @@ -56,6 +56,12 @@ namespace butl mkdir_status try_mkdir (const path&, mode_t = 0777); + // The '-p' version of the above (i.e., it creates the parent + // directories if necessary). + // + mkdir_status + try_mkdir_p (const path&, mode_t = 0777); + // Try to remove the directory returning not_exist if it does not // exist and not_empty if it is not empty. All other errors are // reported by throwing std::system_error. diff --git a/butl/filesystem.cxx b/butl/filesystem.cxx index 4cf60b2..c65d591 100644 --- a/butl/filesystem.cxx +++ b/butl/filesystem.cxx @@ -108,6 +108,20 @@ namespace butl return r; } + mkdir_status + try_mkdir_p (const path& p, mode_t m) + { + if (!p.root ()) + { + path d (p.directory ()); + + if (!dir_exists (d)) + try_mkdir_p (d, m); + } + + return try_mkdir (p, m); + } + rmdir_status try_rmdir (const path& p) { |