]> granicus.if.org Git - xz/commitdiff
xz: Use pipe2() if available.
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 22 Feb 2015 17:38:48 +0000 (19:38 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 22 Feb 2015 17:38:48 +0000 (19:38 +0200)
configure.ac
src/xz/file_io.c

index 0efaaecc64eef9bafe71cdde4dfdd6dd675fdcd4..c8fdb5e4127e58385cbd0953556f478f304e6f8c 100644 (file)
@@ -626,8 +626,8 @@ gl_GETOPT
 # Find the best function to set timestamps.
 AC_CHECK_FUNCS([futimens futimes futimesat utimes utime], [break])
 
-# This is nice to have but not mandatory.
-AC_CHECK_FUNCS([posix_fadvise])
+# These are nice to have but not mandatory.
+AC_CHECK_FUNCS([posix_fadvise pipe2])
 
 TUKLIB_PROGNAME
 TUKLIB_INTEGER
index 9bd515ddc894455aff411f1f6783e6160ed51bc3..20f512a25a9973b23fae73c691878a3b87dc709e 100644 (file)
@@ -82,7 +82,13 @@ io_init(void)
        // we are root.
        warn_fchown = geteuid() == 0;
 
-       // Create a pipe for the self-pipe trick.
+       // Create a pipe for the self-pipe trick. If pipe2() is available,
+       // we can avoid the fcntl() calls.
+#      ifdef HAVE_PIPE2
+       if (pipe2(user_abort_pipe, O_NONBLOCK))
+               message_fatal(_("Error creating a pipe: %s"),
+                               strerror(errno));
+#      else
        if (pipe(user_abort_pipe))
                message_fatal(_("Error creating a pipe: %s"),
                                strerror(errno));
@@ -95,6 +101,7 @@ io_init(void)
                        message_fatal(_("Error creating a pipe: %s"),
                                        strerror(errno));
        }
+#      endif
 #endif
 
 #ifdef __DJGPP__