mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-06-09 21:41:19 +00:00
tools: lxc_deslashify() handle special cases
Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
This commit is contained in:
parent
30498b9e1d
commit
c56a9652d7
@ -282,7 +282,7 @@ static void exec_criu(struct criu_opts *opts)
|
||||
}
|
||||
}
|
||||
|
||||
if (!lxc_deslashify(path)) {
|
||||
if (!lxc_deslashify(&path)) {
|
||||
ERROR("failed to deslashify %s", path);
|
||||
free(path);
|
||||
goto err;
|
||||
|
@ -716,21 +716,40 @@ char **lxc_normalize_path(const char *path)
|
||||
return components;
|
||||
}
|
||||
|
||||
bool lxc_deslashify(char *path)
|
||||
bool lxc_deslashify(char **path)
|
||||
{
|
||||
char **parts = NULL, *path2;
|
||||
char *p;
|
||||
char **parts = NULL;
|
||||
size_t n, len;
|
||||
|
||||
parts = lxc_normalize_path(path);
|
||||
parts = lxc_normalize_path(*path);
|
||||
if (!parts)
|
||||
return false;
|
||||
|
||||
path2 = lxc_string_join("/", (const char **) parts, *path == '/');
|
||||
lxc_free_array((void **) parts, free);
|
||||
if (!path2)
|
||||
/* We'll end up here if path == "///" or path == "". */
|
||||
if (!*parts) {
|
||||
len = strlen(*path);
|
||||
if (!len)
|
||||
return true;
|
||||
n = strcspn(*path, "/");
|
||||
if (n == len) {
|
||||
p = strdup("/");
|
||||
if (!p)
|
||||
return false;
|
||||
free(*path);
|
||||
*path = p;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
p = lxc_string_join("/", (const char **)parts, **path == '/');
|
||||
lxc_free_array((void **)parts, free);
|
||||
if (!p)
|
||||
return false;
|
||||
|
||||
strncpy(path, path2, strlen(path));
|
||||
free(path2);
|
||||
free(*path);
|
||||
*path = p;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -249,7 +249,7 @@ extern char *lxc_string_join(const char *sep, const char **parts, bool use_as_pr
|
||||
*/
|
||||
extern char **lxc_normalize_path(const char *path);
|
||||
/* remove multiple slashes from the path, e.g. ///foo//bar -> /foo/bar */
|
||||
extern bool lxc_deslashify(char *path);
|
||||
extern bool lxc_deslashify(char **path);
|
||||
extern char *lxc_append_paths(const char *first, const char *second);
|
||||
/* Note: the following two functions use strtok(), so they will never
|
||||
* consider an empty element, even if two delimiters are next to
|
||||
|
Loading…
Reference in New Issue
Block a user