summaryrefslogtreecommitdiff
path: root/src/file.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-08-23 14:13:46 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-08-23 14:13:46 +0100
commit71e362e2f96392cff4779200e687cd1dc541a7c8 (patch)
tree59bf01790aa47c266763b2fc0942ce041822e3a8 /src/file.cc
parentae839fc4713dafd887f0f872191924742a3c8832 (diff)
Move session socket to /tmp/kakoune/<user name>/<session>
Diffstat (limited to 'src/file.cc')
-rw-r--r--src/file.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/file.cc b/src/file.cc
index bea46dbb..2c8afeb5 100644
--- a/src/file.cc
+++ b/src/file.cc
@@ -291,6 +291,24 @@ String find_file(StringView filename, ConstArrayView<String> paths)
return "";
}
+void make_directory(StringView dir)
+{
+ auto it = dir.begin(), end = dir.end();
+ while(it != end)
+ {
+ it = std::find(it+1, end, '/');
+ struct stat st;
+ StringView dirname{dir.begin(), it};
+ if (stat(dirname.zstr(), &st) == 0)
+ {
+ if (not S_ISDIR(st.st_mode))
+ throw runtime_error(format("Cannot make directory, '{}' exists but is not a directory", dirname));
+ }
+ else if (mkdir(dirname.zstr(), S_IRWXU) != 0)
+ throw runtime_error(format("mkdir failed for directory '{}' errno {}", dirname, errno));
+ }
+}
+
template<typename Filter>
Vector<String> list_files(StringView prefix, StringView dirname,
Filter filter)