]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sync-util: port fsync_directory_of_file() to fd_is_opath()
authorLennart Poettering <lennart@poettering.net>
Fri, 17 Feb 2023 09:32:18 +0000 (10:32 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 17 Feb 2023 11:50:01 +0000 (20:50 +0900)
As suggested here:

https://github.com/systemd/systemd/pull/26450#pullrequestreview-1302922404

src/basic/sync-util.c

index 52c8c417dee310b857bf8ab582a05217dd187e2b..a17ab2c890a9949035a64a0cd5d99ab65f922548 100644 (file)
@@ -27,16 +27,12 @@ int fsync_directory_of_file(int fd) {
 
         } else if (!S_ISREG(st.st_mode)) { /* Regular files are OK regardless if O_PATH or not, for all other
                                             * types check O_PATH flag */
-                int flags;
-
-                flags = fcntl(fd, F_GETFL);
-                if (flags < 0)
-                        return -errno;
-
-                if (!FLAGS_SET(flags, O_PATH)) /* If O_PATH this refers to the inode in the fs, in which case
-                                                * we can sensibly do what is requested. Otherwise this refers
-                                                * to a socket, fifo or device node, where the concept of a
-                                                * containing directory doesn't make too much sense. */
+                r = fd_is_opath(fd);
+                if (r < 0)
+                        return r;
+                if (!r) /* If O_PATH this refers to the inode in the fs, in which case we can sensibly do
+                         * what is requested. Otherwise this refers to a socket, fifo or device node, where
+                         * the concept of a containing directory doesn't make too much sense. */
                         return -ENOTTY;
         }