]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
Revert "xz: O_SEARCH cannot be used for fsync()"
authorLasse Collin <lasse.collin@tukaani.org>
Tue, 7 Jan 2025 19:34:33 +0000 (21:34 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Wed, 8 Jan 2025 17:20:21 +0000 (19:20 +0200)
This reverts commit 4014e2479c7b0273f15bd0c9c017c5fe859b0d8f.

POSIX-conforming O_SEARCH should allow fsync().

src/xz/file_io.c

index 5048ef220eb6146e8dace1c8eb55c831d00ef97c..9958b6890f19bb0bf74af1c4ce2a486ab9370dc0 100644 (file)
@@ -69,6 +69,10 @@ static bool warn_fchown;
 #      define O_NOCTTY 0
 #endif
 
+#ifndef O_SEARCH
+#      define O_SEARCH O_RDONLY
+#endif
+
 #ifndef O_DIRECTORY
 #      define O_DIRECTORY 0
 #endif
@@ -886,7 +890,7 @@ io_open_dest_real(file_pair *pair)
                        // to a directory. (We opened the source file
                        // already but directories might have been renamed
                        // after the source file was opened.)
-                       pair->dir_fd = open(dir_name, O_RDONLY | O_DIRECTORY
+                       pair->dir_fd = open(dir_name, O_SEARCH | O_DIRECTORY
                                        | O_NOCTTY | O_NONBLOCK);
                        if (pair->dir_fd == -1) {
                                // Since we did open the source file
@@ -896,15 +900,12 @@ io_open_dest_real(file_pair *pair)
                                //
                                // In an odd case, the directory has write
                                // and search permissions but not read
-                               // permission (d-wx------). Then we would be
-                               // able to create a new file and only the
-                               // directory syncing would be impossible. But
-                               // let's be strict about syncing and require
-                               // users to explicitly disable it if they
-                               // don't want it.
-                               //
-                               // NOTE: O_SEARCH doesn't allow fsync().
-                               // musl maps O_SEARCH to O_PATH.
+                               // permission (d-wx------), and O_SEARCH is
+                               // actually O_RDONLY. Then we would be able
+                               // to create a new file and only the directory
+                               // syncing would be impossible. But let's be
+                               // strict about syncing and require users to
+                               // explicitly disable it if they don't want it.
                                message_error(_("%s: Opening the directory "
                                        "failed: %s"),
                                        tuklib_mask_nonprint(dir_name),