From: Daan De Meyer Date: Fri, 24 Mar 2023 19:50:48 +0000 (+0100) Subject: chase: Simplify chase_and_open() and chase_and_openat() X-Git-Tag: v254-rc1~862^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F27064%2Fhead;p=thirdparty%2Fsystemd.git chase: Simplify chase_and_open() and chase_and_openat() xopenat() now calls fd_reopen() if an empty path is specified, so let's make use of that to simplify the chase open helpers. --- diff --git a/src/basic/chase.c b/src/basic/chase.c index 17e5dd72b43..c2a914521a0 100644 --- a/src/basic/chase.c +++ b/src/basic/chase.c @@ -571,14 +571,13 @@ int chase_and_open(const char *path, const char *root, ChaseFlags chase_flags, i if (isempty(q)) q = "."; - r = path_extract_filename(q, &fname); - if (r < 0 && r != -EADDRNOTAVAIL) - return r; + if (!FLAGS_SET(chase_flags, CHASE_PARENT)) { + r = path_extract_filename(q, &fname); + if (r < 0 && r != -EADDRNOTAVAIL) + return r; + } - if (FLAGS_SET(chase_flags, CHASE_PARENT) || r == -EADDRNOTAVAIL) - r = fd_reopen(path_fd, open_flags); - else - r = xopenat(path_fd, fname, open_flags|O_NOFOLLOW, mode); + r = xopenat(path_fd, strempty(fname), open_flags|O_NOFOLLOW, mode); if (r < 0) return r; @@ -773,14 +772,13 @@ int chase_and_openat(int dir_fd, const char *path, ChaseFlags chase_flags, int o if (r < 0) return r; - r = path_extract_filename(p, &fname); - if (r < 0 && r != -EADDRNOTAVAIL) - return r; + if (!FLAGS_SET(chase_flags, CHASE_PARENT)) { + r = path_extract_filename(p, &fname); + if (r < 0 && r != -EADDRNOTAVAIL) + return r; + } - if (FLAGS_SET(chase_flags, CHASE_PARENT) || r == -EADDRNOTAVAIL) - r = fd_reopen(path_fd, open_flags); - else - r = xopenat(path_fd, fname, open_flags|O_NOFOLLOW, mode); + r = xopenat(path_fd, strempty(fname), open_flags|O_NOFOLLOW, mode); if (r < 0) return r;