mirror of https://git.tukaani.org/xz.git
xz: Fix error detection of fcntl(fd, F_SETFL, flags) calls.
POSIX says that fcntl(fd, F_SETFL, flags) returns -1 on error and "other than -1" on success. This is how it is documented e.g. on OpenBSD too. On Linux, success with F_SETFL is always 0 (at least accorinding to fcntl(2) from man-pages 3.51).
This commit is contained in:
parent
4a08a6e4c6
commit
a616fdad34
|
@ -445,7 +445,7 @@ io_open_src_real(file_pair *pair)
|
||||||
|
|
||||||
flags &= ~O_NONBLOCK;
|
flags &= ~O_NONBLOCK;
|
||||||
|
|
||||||
if (fcntl(pair->src_fd, F_SETFL, flags))
|
if (fcntl(pair->src_fd, F_SETFL, flags) == -1)
|
||||||
goto error_msg;
|
goto error_msg;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -700,7 +700,8 @@ io_open_dest_real(file_pair *pair)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (fcntl(STDOUT_FILENO, F_SETFL,
|
if (fcntl(STDOUT_FILENO, F_SETFL,
|
||||||
stdout_flags & ~O_APPEND))
|
stdout_flags & ~O_APPEND)
|
||||||
|
== -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Disabling O_APPEND succeeded. Mark
|
// Disabling O_APPEND succeeded. Mark
|
||||||
|
@ -750,10 +751,9 @@ io_close_dest(file_pair *pair, bool success)
|
||||||
if (restore_stdout_flags) {
|
if (restore_stdout_flags) {
|
||||||
assert(pair->dest_fd == STDOUT_FILENO);
|
assert(pair->dest_fd == STDOUT_FILENO);
|
||||||
|
|
||||||
const int fail = fcntl(STDOUT_FILENO, F_SETFL, stdout_flags);
|
|
||||||
restore_stdout_flags = false;
|
restore_stdout_flags = false;
|
||||||
|
|
||||||
if (fail) {
|
if (fcntl(STDOUT_FILENO, F_SETFL, stdout_flags) == -1) {
|
||||||
message_error(_("Error restoring the O_APPEND flag "
|
message_error(_("Error restoring the O_APPEND flag "
|
||||||
"to standard output: %s"),
|
"to standard output: %s"),
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
|
Loading…
Reference in New Issue