From a616fdad34b48b2932ef03fb87309dcc8b829527 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Fri, 28 Jun 2013 18:09:47 +0300 Subject: [PATCH] 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). --- src/xz/file_io.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/xz/file_io.c b/src/xz/file_io.c index df758fdf..e0f44d03 100644 --- a/src/xz/file_io.c +++ b/src/xz/file_io.c @@ -445,7 +445,7 @@ io_open_src_real(file_pair *pair) flags &= ~O_NONBLOCK; - if (fcntl(pair->src_fd, F_SETFL, flags)) + if (fcntl(pair->src_fd, F_SETFL, flags) == -1) goto error_msg; } #endif @@ -700,7 +700,8 @@ io_open_dest_real(file_pair *pair) return false; if (fcntl(STDOUT_FILENO, F_SETFL, - stdout_flags & ~O_APPEND)) + stdout_flags & ~O_APPEND) + == -1) return false; // Disabling O_APPEND succeeded. Mark @@ -750,10 +751,9 @@ io_close_dest(file_pair *pair, bool success) if (restore_stdout_flags) { assert(pair->dest_fd == STDOUT_FILENO); - const int fail = fcntl(STDOUT_FILENO, F_SETFL, stdout_flags); restore_stdout_flags = false; - if (fail) { + if (fcntl(STDOUT_FILENO, F_SETFL, stdout_flags) == -1) { message_error(_("Error restoring the O_APPEND flag " "to standard output: %s"), strerror(errno));