mirror of https://git.tukaani.org/xz.git
xz: Workaround broken O_SEARCH in musl
Testing with musl 1.2.5 and Linux 6.12, O_SEARCH doesn't result in a file descriptor that works with fsync() although it should work. See the added comment. The same issue affected gzip --synchronous: https://bugs.gnu.org/75405 Thanks to Paul Eggert.
This commit is contained in:
parent
ea92eae122
commit
75d91d6b39
|
@ -69,6 +69,17 @@ static bool warn_fchown;
|
||||||
# define O_NOCTTY 0
|
# define O_NOCTTY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// In musl 1.2.5, O_SEARCH is defined to O_PATH. As of Linux 6.12,
|
||||||
|
// a file descriptor from open("dir", O_SEARCH | O_DIRECTORY) cannot be
|
||||||
|
// used with fsync() (fails with EBADF). musl 1.2.5 doesn't emulate it
|
||||||
|
// using /proc/self/fd. Even if it did, it might need to do it with
|
||||||
|
// fd = open("/proc/...", O_RDONLY); fsync(fd); which fails if the
|
||||||
|
// directory lacks read permission. Since we need a working fsync(),
|
||||||
|
// O_RDONLY imitates O_SEARCH better than O_PATH.
|
||||||
|
#if defined(O_SEARCH) && defined(O_PATH) && O_SEARCH == O_PATH
|
||||||
|
# undef O_SEARCH
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef O_SEARCH
|
#ifndef O_SEARCH
|
||||||
# define O_SEARCH O_RDONLY
|
# define O_SEARCH O_RDONLY
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue