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:
Lasse Collin 2013-06-28 18:09:47 +03:00
parent 4a08a6e4c6
commit a616fdad34

View File

@ -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));