From ea92eae122a3ccefa61087f84fd99b417fc9ee3c Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 7 Jan 2025 21:34:33 +0200 Subject: [PATCH] Revert "xz: O_SEARCH cannot be used for fsync()" This reverts commit 4014e2479c7b0273f15bd0c9c017c5fe859b0d8f. POSIX-conforming O_SEARCH should allow fsync(). --- src/xz/file_io.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/xz/file_io.c b/src/xz/file_io.c index 5048ef22..9958b689 100644 --- a/src/xz/file_io.c +++ b/src/xz/file_io.c @@ -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),