Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
S
spdlog
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
spdlog
Commits
066087b3
Commit
066087b3
authored
5 years ago
by
gabime
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update create_dir
parent
e9d42e05
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
31 deletions
+42
-31
os-inl.h
include/spdlog/details/os-inl.h
+15
-16
test_create_dir.cpp
tests/test_create_dir.cpp
+27
-15
No files found.
include/spdlog/details/os-inl.h
View file @
066087b3
...
@@ -485,27 +485,30 @@ SPDLOG_INLINE bool create_dir(filename_t path)
...
@@ -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
;
if
(
!
token
.
empty
())
do
{
{
cur_dir
+=
token
;
auto
token_pos
=
path
.
find
(
folder_sep
,
search_offset
);
if
(
!
file_exists
(
cur_dir
)
&&
!
mkdir_
(
cur_dir
))
// treat the entire path as a folder if no folder separator not found
if
(
token_pos
==
filename_t
::
npos
)
{
{
return
false
;
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
}
}
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)
...
@@ -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
{};
}
}
...
...
This diff is collapsed.
Click to expand it.
tests/test_create_dir.cpp
View file @
066087b3
...
@@ -8,6 +8,7 @@ using spdlog::details::os::file_exists;
...
@@ -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)
...
@@ -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]")
...
@@ -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]")
...
@@ -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
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment