aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/FileUtil.cpp30
-rw-r--r--src/main.cpp9
2 files changed, 34 insertions, 5 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;
}
diff --git a/src/main.cpp b/src/main.cpp
index b232d93..0d29a75 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -701,6 +701,9 @@ int initProject(int argc, const _tinydir_char_t **argv)
ferr << "Error: Project type not defined, expected to be either --exec, --static or --dynamic" << endl;
usageInit();
}
+
+ if(!lang)
+ lang = TINYDIR_STRING("c++");
string projectTypeConf;
if(_tinydir_strcmp(projectType, TINYDIR_STRING("--exec")) == 0)
@@ -714,9 +717,6 @@ int initProject(int argc, const _tinydir_char_t **argv)
ferr << "Expected project type to be either --exec, --static or --dynamic; was: " << projectType << endl << endl;
usageInit();
}
-
- if(!lang)
- lang = TINYDIR_STRING("c++");
// TODO: If projectPath is not defined and working directory does not contain project.conf, then search every parent directory until one is found
if(projectPath.empty())
@@ -920,6 +920,9 @@ int newProject(int argc, const _tinydir_char_t **argv)
ferr << "Error: Project type not defined, expected to be either --exec, --static or --dynamic" << endl;
usageNew();
}
+
+ if(!lang)
+ lang = TINYDIR_STRING("c++");
string projectTypeConf;
if(_tinydir_strcmp(projectType, TINYDIR_STRING("--exec")) == 0)