mirror of
https://github.com/gabime/spdlog.git
synced 2024-12-26 10:31:34 +08:00
Update create_dir
This commit is contained in:
parent
e9d42e059f
commit
066087b383
@ -485,27 +485,30 @@ SPDLOG_INLINE bool create_dir(filename_t path)
|
|||||||
{
|
{
|
||||||
return true;
|
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
|
#ifdef _WIN32
|
||||||
// support forward slash in windows
|
// support forward slash in windows
|
||||||
std::replace(path.begin(), path.end(), '/', folder_sep);
|
std::replace(path.begin(), path.end(), '/', folder_sep);
|
||||||
#endif
|
#endif
|
||||||
while (std::getline(istream, token, folder_sep))
|
|
||||||
|
size_t search_offset = 0;
|
||||||
|
do
|
||||||
{
|
{
|
||||||
if (!token.empty())
|
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)
|
||||||
{
|
{
|
||||||
cur_dir += token;
|
token_pos = path.size();
|
||||||
if (!file_exists(cur_dir) && !mkdir_(cur_dir))
|
}
|
||||||
|
|
||||||
|
auto subdir = path.substr(0, token_pos);
|
||||||
|
|
||||||
|
if (!subdir.empty() && !file_exists(subdir) && !mkdir_(subdir))
|
||||||
{
|
{
|
||||||
return false;
|
return false; // return error if failed creating dir
|
||||||
}
|
|
||||||
}
|
|
||||||
cur_dir += folder_sep;
|
|
||||||
}
|
}
|
||||||
|
search_offset = token_pos + 1;
|
||||||
|
} while (search_offset < path.size());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -517,10 +520,6 @@ SPDLOG_INLINE bool create_dir(filename_t path)
|
|||||||
// "abc///" => "abc//"
|
// "abc///" => "abc//"
|
||||||
SPDLOG_INLINE filename_t dir_name(filename_t path)
|
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);
|
auto pos = path.find_last_of(folder_sep);
|
||||||
return pos != filename_t::npos ? path.substr(0, pos) : filename_t{};
|
return pos != filename_t::npos ? path.substr(0, pos) : filename_t{};
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ using spdlog::details::os::file_exists;
|
|||||||
|
|
||||||
void test_create_dir(const char *path, const char *normalized_path)
|
void test_create_dir(const char *path, const char *normalized_path)
|
||||||
{
|
{
|
||||||
|
printf("Test Create dir %s\n", path);
|
||||||
auto rv = create_dir(path);
|
auto rv = create_dir(path);
|
||||||
REQUIRE(rv == true);
|
REQUIRE(rv == true);
|
||||||
REQUIRE(file_exists(normalized_path));
|
REQUIRE(file_exists(normalized_path));
|
||||||
@ -18,11 +19,23 @@ void test_create_dir(const char *path, const char *normalized_path)
|
|||||||
TEST_CASE("create_dir", "[create_dir]")
|
TEST_CASE("create_dir", "[create_dir]")
|
||||||
{
|
{
|
||||||
prepare_logdir();
|
prepare_logdir();
|
||||||
|
#ifdef WIN32
|
||||||
|
test_create_dir("test_logs/dir1/dir1", "test_logs\\dir1\\dir1");
|
||||||
|
test_create_dir("test_logs/dir1/dir1", "test_logs\\dir1\\dir1"); //test existing
|
||||||
|
test_create_dir("test_logs/dir1///dir2//", "test_logs\\dir1\\dir2");
|
||||||
|
test_create_dir("./test_logs/dir1/dir3", "test_logs\\dir1\\dir3");
|
||||||
|
test_create_dir("test_logs/../test_logs/dir1/dir4", "test_logs\\dir1\\dir4");
|
||||||
|
// test backslash
|
||||||
|
test_create_dir("test_logs\\dir1\\dir222", "test_logs\\dir1\\dir222");
|
||||||
|
test_create_dir("test_logs\\dir1\\dir223\\", "test_logs\\dir1\\dir223\\");
|
||||||
|
test_create_dir(".\\test_logs\\dir1\\dir2\\dir99\\..\\dir23", "test_logs\\dir1\\dir2\\dir23");
|
||||||
|
#else
|
||||||
test_create_dir("test_logs/dir1/dir1", "test_logs/dir1/dir1");
|
test_create_dir("test_logs/dir1/dir1", "test_logs/dir1/dir1");
|
||||||
|
test_create_dir("test_logs/dir1/dir1", "test_logs/dir1/dir1"); // test existing
|
||||||
test_create_dir("test_logs/dir1///dir2", "test_logs/dir1/dir2");
|
test_create_dir("test_logs/dir1///dir2", "test_logs/dir1/dir2");
|
||||||
test_create_dir("./test_logs/dir1/dir3", "test_logs/dir1/dir3");
|
test_create_dir("./test_logs/dir1/dir3", "test_logs/dir1/dir3");
|
||||||
test_create_dir("test_logs/../test_logs/dir1/dir4", "test_logs/dir1/dir4");
|
test_create_dir("test_logs/../test_logs/dir1/dir4", "test_logs/dir1/dir4");
|
||||||
test_create_dir("./test_logs/dir1/dir2/dir99/../dir23", "test_logs/dir1/dir2/dir23");
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("dir_name", "[create_dir]")
|
TEST_CASE("dir_name", "[create_dir]")
|
||||||
@ -30,6 +43,19 @@ TEST_CASE("dir_name", "[create_dir]")
|
|||||||
using spdlog::details::os::dir_name;
|
using spdlog::details::os::dir_name;
|
||||||
REQUIRE(dir_name("").empty());
|
REQUIRE(dir_name("").empty());
|
||||||
REQUIRE(dir_name("dir").empty());
|
REQUIRE(dir_name("dir").empty());
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
REQUIRE(dir_name(R"(dir\)") == "dir");
|
||||||
|
REQUIRE(dir_name(R"(dir\\\)") == R"(dir\\)");
|
||||||
|
REQUIRE(dir_name(R"(dir\file)") == "dir");
|
||||||
|
REQUIRE(dir_name(R"(dir\file.txt)") == "dir");
|
||||||
|
REQUIRE(dir_name(R"(dir\file.txt\)") == R"(dir\file.txt)");
|
||||||
|
REQUIRE(dir_name(R"(\dir\file.txt)") == R"(\dir)");
|
||||||
|
REQUIRE(dir_name(R"(\\dir\file.txt)") == R"(\\dir)");
|
||||||
|
REQUIRE(dir_name(R"(..\file.txt)") == "..");
|
||||||
|
REQUIRE(dir_name(R"(.\file.txt)") == ".");
|
||||||
|
REQUIRE(dir_name(R"(c:\\a\b\c\d\file.txt)") == R"(c:\\a\b\c\d)");
|
||||||
|
#else
|
||||||
REQUIRE(dir_name("dir/") == "dir");
|
REQUIRE(dir_name("dir/") == "dir");
|
||||||
REQUIRE(dir_name("dir///") == "dir//");
|
REQUIRE(dir_name("dir///") == "dir//");
|
||||||
REQUIRE(dir_name("dir/file") == "dir");
|
REQUIRE(dir_name("dir/file") == "dir");
|
||||||
@ -37,22 +63,8 @@ TEST_CASE("dir_name", "[create_dir]")
|
|||||||
REQUIRE(dir_name("dir/file.txt/") == "dir/file.txt");
|
REQUIRE(dir_name("dir/file.txt/") == "dir/file.txt");
|
||||||
REQUIRE(dir_name("/dir/file.txt") == "/dir");
|
REQUIRE(dir_name("/dir/file.txt") == "/dir");
|
||||||
REQUIRE(dir_name("//dir/file.txt") == "//dir");
|
REQUIRE(dir_name("//dir/file.txt") == "//dir");
|
||||||
REQUIRE(dir_name("//dir/file.txt") == "//dir");
|
|
||||||
REQUIRE(dir_name("../file.txt") == "..");
|
REQUIRE(dir_name("../file.txt") == "..");
|
||||||
REQUIRE(dir_name("./file.txt") == ".");
|
REQUIRE(dir_name("./file.txt") == ".");
|
||||||
#ifdef WIN32
|
|
||||||
REQUIRE(dir_name(R"(dir\)") == "dir");
|
|
||||||
REQUIRE(dir_name(R"(dir\\\)") == "dir//");
|
|
||||||
REQUIRE(dir_name(R"(dir\file)") == "dir");
|
|
||||||
REQUIRE(dir_name(R"(dir\file.txt)") == "dir");
|
|
||||||
REQUIRE(dir_name(R"(dir\file.txt\)") == "dir/file.txt");
|
|
||||||
REQUIRE(dir_name(R"(\dir\file.txt)") == "/dir");
|
|
||||||
REQUIRE(dir_name(R"(\\dir\file.txt)") == "//dir");
|
|
||||||
REQUIRE(dir_name(R"(\\dir\file.txt)") == "//dir");
|
|
||||||
REQUIRE(dir_name(R"(..\file.txt)") == "..");
|
|
||||||
REQUIRE(dir_name(R"(.\file.txt)") == ".");
|
|
||||||
REQUIRE(dir_name(R"(c:\\a\b\c\d\file.txt)") == "c://a/b/c/d");
|
|
||||||
//REQUIRE(dir_name(R"(c:\\a)") == "c://");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user