]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
chase: Simplify chase_and_open() and chase_and_openat() 27064/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 24 Mar 2023 19:50:48 +0000 (20:50 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 30 Mar 2023 07:04:14 +0000 (09:04 +0200)
xopenat() now calls fd_reopen() if an empty path is specified, so
let's make use of that to simplify the chase open helpers.

src/basic/chase.c

index 17e5dd72b436d3c617fc7e7c40303e81ebb32794..c2a914521a0facdc8c27c7e31870816244367084 100644 (file)
@@ -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;