]> granicus.if.org Git - xz/commitdiff
xz: Fix error detection of fcntl(fd, F_SETFL, flags) calls.
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 28 Jun 2013 15:09:47 +0000 (18:09 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 28 Jun 2013 15:09:47 +0000 (18:09 +0300)
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

index df758fdf8c6624b7de91ab5738ed255f64543a6a..e0f44d03d8f75acc143cbe9d2a47fe6845cdcbc4 100644 (file)
@@ -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));