Revert "xz: O_SEARCH cannot be used for fsync()"

This reverts commit 4014e2479c.

POSIX-conforming O_SEARCH should allow fsync().
This commit is contained in:
Lasse Collin 2025-01-07 21:34:33 +02:00
parent 4014e2479c
commit ea92eae122
No known key found for this signature in database
GPG Key ID: 38EE757D69184620
1 changed files with 11 additions and 10 deletions

View 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),