Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
21e9bead
Unverified
Commit
21e9bead
authored
Mar 30, 2021
by
Stéphane Graber
Committed by
GitHub
Mar 30, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3756 from brauner/2021-03-30/fixes_3
string_utils: switch to path_simplify()
parents
ec6de2c3
28e54be1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
56 additions
and
47 deletions
+56
-47
confile_utils.c
src/lxc/confile_utils.c
+5
-5
criu.c
src/lxc/criu.c
+1
-1
overlay.c
src/lxc/storage/overlay.c
+2
-2
string_utils.c
src/lxc/string_utils.c
+40
-33
string_utils.h
src/lxc/string_utils.h
+2
-0
lxc-test-utils.c
src/tests/lxc-test-utils.c
+6
-6
No files found.
src/lxc/confile_utils.c
View file @
21e9bead
...
...
@@ -667,13 +667,13 @@ int set_config_string_item_max(char **conf_item, const char *value, size_t max)
int
set_config_path_item
(
char
**
conf_item
,
const
char
*
value
)
{
__do_free
char
*
normalized
=
NULL
;
__do_free
char
*
valdup
=
NULL
;
normalized
=
lxc_deslash
ify
(
value
);
if
(
!
normalized
)
return
syserror_set
(
-
ENOMEM
,
"Failed to normalize path config item"
)
;
valdup
=
path_simpl
ify
(
value
);
if
(
!
valdup
)
return
-
ENOMEM
;
return
set_config_string_item_max
(
conf_item
,
normalized
,
PATH_MAX
);
return
set_config_string_item_max
(
conf_item
,
valdup
,
PATH_MAX
);
}
int
set_config_bool_item
(
bool
*
conf_item
,
const
char
*
value
,
bool
empty_conf_action
)
...
...
src/lxc/criu.c
View file @
21e9bead
...
...
@@ -319,7 +319,7 @@ static int exec_criu(struct cgroup_ops *cgroup_ops, struct lxc_conf *conf,
return
log_error_errno
(
-
ENOMEM
,
ENOMEM
,
"Failed to duplicate limit cgroup path"
);
}
tmp
=
lxc_deslash
ify
(
cgroup_base_path
);
tmp
=
path_simpl
ify
(
cgroup_base_path
);
if
(
!
tmp
)
return
log_error_errno
(
-
ENOMEM
,
ENOMEM
,
"Failed to remove extraneous slashes from
\"
%s
\"
"
,
tmp
);
free_move_ptr
(
cgroup_base_path
,
tmp
);
...
...
src/lxc/storage/overlay.c
View file @
21e9bead
...
...
@@ -192,11 +192,11 @@ int ovl_clonepaths(struct lxc_storage *orig, struct lxc_storage *new, const char
* don't need to record a dependency. If we would restore would
* also fail.
*/
clean_old_path
=
lxc_deslash
ify
(
oldpath
);
clean_old_path
=
path_simpl
ify
(
oldpath
);
if
(
!
clean_old_path
)
return
log_error_errno
(
-
ENOMEM
,
ENOMEM
,
"Failed to create clean path for
\"
%s
\"
"
,
oldpath
);
clean_new_path
=
lxc_deslash
ify
(
lxcpath
);
clean_new_path
=
path_simpl
ify
(
lxcpath
);
if
(
!
clean_new_path
)
return
log_error_errno
(
-
ENOMEM
,
ENOMEM
,
"Failed to create clean path for
\"
%s
\"
"
,
lxcpath
);
...
...
src/lxc/string_utils.c
View file @
21e9bead
...
...
@@ -195,7 +195,6 @@ char *lxc_string_join(const char *sep, const char **parts, bool use_as_prefix)
char
**
lxc_normalize_path
(
const
char
*
path
)
{
char
**
components
;
char
**
p
;
size_t
components_len
=
0
;
size_t
pos
=
0
;
...
...
@@ -203,9 +202,6 @@ char **lxc_normalize_path(const char *path)
if
(
!
components
)
return
NULL
;
for
(
p
=
components
;
*
p
;
p
++
)
components_len
++
;
/* resolve '.' and '..' */
for
(
pos
=
0
;
pos
<
components_len
;)
{
if
(
strequal
(
components
[
pos
],
"."
)
||
...
...
@@ -231,47 +227,58 @@ char **lxc_normalize_path(const char *path)
return
components
;
}
char
*
lxc_deslashify
(
const
char
*
path
)
/* taken from systemd */
char
*
path_simplify
(
const
char
*
path
)
{
char
*
dup
,
*
p
;
char
*
*
parts
=
NULL
;
size_t
n
,
len
;
__do_free
char
*
path_new
=
NULL
;
char
*
f
,
*
t
;
bool
slash
=
false
,
ignore_slash
=
false
,
absolute
;
dup
=
strdup
(
path
);
if
(
!
dup
)
path_new
=
strdup
(
path
);
if
(
!
path_new
)
return
NULL
;
parts
=
lxc_normalize_path
(
dup
);
if
(
!
parts
)
{
free
(
dup
);
return
NULL
;
if
(
is_empty_string
(
path_new
))
return
move_ptr
(
path_new
);
absolute
=
abspath
(
path_new
);
f
=
path_new
;
if
(
*
f
==
'.'
&&
IN_SET
(
f
[
1
],
0
,
'/'
))
{
ignore_slash
=
true
;
f
++
;
}
/* We'll end up here if path == "///" or path == "". */
if
(
!*
parts
)
{
len
=
strlen
(
dup
);
if
(
!
len
)
{
lxc_free_array
((
void
**
)
parts
,
free
);
return
dup
;
}
for
(
t
=
path_new
;
*
f
;
f
++
)
{
n
=
strcspn
(
dup
,
"/"
);
if
(
n
==
len
)
{
free
(
dup
)
;
lxc_free_array
((
void
**
)
parts
,
free
);
if
(
*
f
==
'/'
)
{
slash
=
true
;
continue
;
}
p
=
strdup
(
"/"
);
if
(
!
p
)
return
NULL
;
if
(
slash
)
{
if
(
*
f
==
'.'
&&
IN_SET
(
f
[
1
],
0
,
'/'
)
)
continue
;
return
p
;
slash
=
false
;
if
(
ignore_slash
)
ignore_slash
=
false
;
else
*
(
t
++
)
=
'/'
;
}
*
(
t
++
)
=
*
f
;
}
if
(
t
==
path_new
)
{
if
(
absolute
)
*
(
t
++
)
=
'/'
;
else
*
(
t
++
)
=
'.'
;
}
p
=
lxc_string_join
(
"/"
,
(
const
char
**
)
parts
,
*
dup
==
'/'
);
free
(
dup
);
lxc_free_array
((
void
**
)
parts
,
free
);
return
p
;
*
t
=
0
;
return
move_ptr
(
path_new
);
}
char
*
lxc_append_paths
(
const
char
*
first
,
const
char
*
second
)
...
...
src/lxc/string_utils.h
View file @
21e9bead
...
...
@@ -196,4 +196,6 @@ static inline const char *fdstr(int fd)
(__iterator = __it); \
__iterator = __it = strtok_r(NULL, __separators, &__p))
__hidden
extern
char
*
path_simplify
(
const
char
*
path
);
#endif
/* __LXC_STRING_UTILS_H */
src/tests/lxc-test-utils.c
View file @
21e9bead
...
...
@@ -43,12 +43,12 @@
#include "macro.h"
#include "utils.h"
void
test_
lxc_deslash
ify
(
void
)
void
test_
path_simpl
ify
(
void
)
{
char
*
s
=
"/A///B//C/D/E/"
;
char
*
t
;
t
=
lxc_deslash
ify
(
s
);
t
=
path_simpl
ify
(
s
);
if
(
!
t
)
exit
(
EXIT_FAILURE
);
...
...
@@ -57,7 +57,7 @@ void test_lxc_deslashify(void)
s
=
"/A"
;
t
=
lxc_deslash
ify
(
s
);
t
=
path_simpl
ify
(
s
);
if
(
!
t
)
exit
(
EXIT_FAILURE
);
...
...
@@ -65,7 +65,7 @@ void test_lxc_deslashify(void)
free
(
t
);
s
=
""
;
t
=
lxc_deslash
ify
(
s
);
t
=
path_simpl
ify
(
s
);
if
(
!
t
)
exit
(
EXIT_FAILURE
);
...
...
@@ -74,7 +74,7 @@ void test_lxc_deslashify(void)
s
=
"//"
;
t
=
lxc_deslash
ify
(
s
);
t
=
path_simpl
ify
(
s
);
if
(
!
t
)
exit
(
EXIT_FAILURE
);
...
...
@@ -598,7 +598,7 @@ int main(int argc, char *argv[])
{
test_lxc_string_replace
();
test_lxc_string_in_array
();
test_
lxc_deslash
ify
();
test_
path_simpl
ify
();
test_detect_ramfs_rootfs
();
test_lxc_safe_uint
();
test_lxc_safe_int
();
...
...
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