aboutsummaryrefslogtreecommitdiff
path: root/butl/filesystem
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-06-18 14:41:44 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-06-18 14:41:44 +0200
commit08903414e3546bc2c76bef73b2337ccf79886530 (patch)
tree17d76af2771ad209b781b13156da5160ba0f07ae /butl/filesystem
parent5a79b446475c9643346024a83bb14c2ba9c55dbd (diff)
Move path and filesystem from build2 to libbutl
Diffstat (limited to 'butl/filesystem')
-rw-r--r--butl/filesystem61
1 files changed, 61 insertions, 0 deletions
diff --git a/butl/filesystem b/butl/filesystem
new file mode 100644
index 0000000..10f61f2
--- /dev/null
+++ b/butl/filesystem
@@ -0,0 +1,61 @@
+// file : butl/filesystem -*- C++ -*-
+// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUTL_FILESYSTEM
+#define BUTL_FILESYSTEM
+
+#include <sys/types.h> // mode_t
+
+#include <butl/path>
+
+namespace butl
+{
+ // Return true if the path is to an existing directory. Note that
+ // this function resolves symlinks.
+ //
+ bool
+ dir_exists (const path&);
+
+ // Return true if the path is to an existing regular file. Note that
+ // this function resolves symlinks.
+ //
+ bool
+ file_exists (const path&);
+
+ // Try to create a directory unless it already exists. If you expect
+ // the directory to exist and performance is important, then you
+ // should first call dir_exists() above since that's what this
+ // implementation will do to make sure the path is actually a
+ // directory.
+ //
+ // You should also probably use the default mode 0777 and let the
+ // umask mechanism adjust it to the user's preferences.
+ //
+ // Errors are reported by throwing std::system_error.
+ //
+ enum class mkdir_status {success, already_exists};
+
+ mkdir_status
+ try_mkdir (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.
+ //
+ enum class rmdir_status {success, not_exist, not_empty};
+
+ rmdir_status
+ try_rmdir (const path&);
+
+ // Try to remove the file (or symbolic link) returning not_exist if
+ // it does not exist. All other errors are reported by throwing
+ // std::system_error.
+ //
+ enum class rmfile_status {success, not_exist};
+
+ rmfile_status
+ try_rmfile (const path&);
+}
+
+#endif // BUTL_FILESYSTEM