Update create_dir

This commit is contained in:
gabime
2019-10-25 14:14:50 +03:00
parent e9d42e059f
commit 066087b383
2 changed files with 55 additions and 44 deletions

View File

@@ -485,27 +485,30 @@ SPDLOG_INLINE bool create_dir(filename_t path)
{
return true;
}
using char_type = filename_t::value_type;
std::basic_istringstream<char_type> istream(path);
filename_t token;
filename_t cur_dir;
#ifdef _WIN32
// support forward slash in windows
std::replace(path.begin(), path.end(), '/', folder_sep);
#endif
while (std::getline(istream, token, folder_sep))
{
if (!token.empty())
{
cur_dir += token;
if (!file_exists(cur_dir) && !mkdir_(cur_dir))
{
return false;
}
}
cur_dir += folder_sep;
}
#endif
size_t search_offset = 0;
do
{
auto token_pos = path.find(folder_sep, search_offset);
// treat the entire path as a folder if no folder separator not found
if (token_pos == filename_t::npos)
{
token_pos = path.size();
}
auto subdir = path.substr(0, token_pos);
if (!subdir.empty() && !file_exists(subdir) && !mkdir_(subdir))
{
return false; // return error if failed creating dir
}
search_offset = token_pos + 1;
} while (search_offset < path.size());
return true;
}
@@ -517,10 +520,6 @@ SPDLOG_INLINE bool create_dir(filename_t path)
// "abc///" => "abc//"
SPDLOG_INLINE filename_t dir_name(filename_t path)
{
#ifdef _WIN32
// support forward slash in windows
std::replace(path.begin(), path.end(), '/', folder_sep);
#endif
auto pos = path.find_last_of(folder_sep);
return pos != filename_t::npos ? path.substr(0, pos) : filename_t{};
}