From: Yu Watanabe Date: Mon, 10 Apr 2023 19:50:32 +0000 (+0900) Subject: chase: drop redundant call of delete_trailing_chars() X-Git-Tag: v254-rc1~765 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0d68cd72b602edac05b4ae5d17a65ae828e61ff4;p=thirdparty%2Fsystemd.git chase: drop redundant call of delete_trailing_chars() In that branch, 'root' is a non-root and absolute path. Hence, delete_trailing_chars() does not make the path empty. And, if the path contains redundant slashes at the end, that will be dropped by path_simplify(). --- diff --git a/src/basic/chase.c b/src/basic/chase.c index f62c317026a..e8d38279fdf 100644 --- a/src/basic/chase.c +++ b/src/basic/chase.c @@ -493,18 +493,19 @@ int chase(const char *path, const char *original_root, ChaseFlags flags, char ** return r; /* Simplify the root directory, so that it has no duplicate slashes and nothing at the - * end. While we won't resolve the root path we still simplify it. Note that dropping the - * trailing slash should not change behaviour, since when opening it we specify O_DIRECTORY - * anyway. Moreover at the end of this function after processing everything we'll always turn - * the empty string back to "/". */ - delete_trailing_chars(root, "/"); + * end. While we won't resolve the root path we still simplify it. */ path_simplify(root); + assert(path_is_absolute(root)); + assert(!empty_or_root(root)); + if (flags & CHASE_PREFIX_ROOT) { absolute = path_join(root, path); if (!absolute) return -ENOMEM; } + + flags |= CHASE_AT_RESOLVE_IN_ROOT; } if (!absolute) { @@ -524,9 +525,6 @@ int chase(const char *path, const char *original_root, ChaseFlags flags, char ** if (fd < 0) return -errno; - if (!empty_or_root(root)) - flags |= CHASE_AT_RESOLVE_IN_ROOT; - r = chaseat(fd, path, flags & ~CHASE_PREFIX_ROOT, ret_path ? &p : NULL, ret_fd ? &pfd : NULL); if (r < 0) return r;