aboutsummaryrefslogtreecommitdiff
path: root/src/FileUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/FileUtil.cpp')
-rw-r--r--src/FileUtil.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/FileUtil.cpp b/src/FileUtil.cpp
index aca2778..53430c4 100644
--- a/src/FileUtil.cpp
+++ b/src/FileUtil.cpp
@@ -288,6 +288,31 @@ namespace sibs
return Result<FileString>::Err(strerror(errno));
}
+ Result<bool> createDirectory(const _tinydir_char_t *path)
+ {
+ size_t pathLength = strlen(path);
+ if(pathLength > _TINYDIR_PATH_MAX - 1)
+ {
+ string errMsg = "Directory path too long: ";
+ errMsg += string(path, pathLength);
+ return Result<bool>::Err(errMsg, ENAMETOOLONG);
+ }
+
+ if(mkdir(path, S_IRWXU) != 0)
+ {
+ int error = errno;
+ if(error != EEXIST)
+ {
+ string errMsg = "Failed to create directory: ";
+ errMsg += toUtf8(path);
+ errMsg += "; reason: ";
+ errMsg += strerror(error);
+ return Result<bool>::Err(errMsg, error);
+ }
+ }
+ return Result<bool>::Ok(true);
+ }
+
Result<bool> createDirectoryRecursive(const _tinydir_char_t *path)
{
char pathBuffer[_TINYDIR_PATH_MAX];
@@ -303,7 +328,8 @@ namespace sibs
char *p = pathBuffer;
for(size_t i = 0; i < pathLength; ++i)
{
- if(i > 0 && *p == '/')
+ char c = *p;
+ if(i > 0 && (c == '/' || c == '\\'))
{
*p = '\0';
if(mkdir(pathBuffer, S_IRWXU) != 0)
@@ -318,7 +344,7 @@ namespace sibs
return Result<bool>::Err(errMsg, error);
}
}
- *p = '/';
+ *p = c;
}
++p;
}