xz: Use posix_fadvise() if it is available.
authorLasse Collin <lasse.collin@tukaani.org>
Tue, 5 Apr 2011 12:27:26 +0000 (15:27 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 5 Apr 2011 12:27:26 +0000 (15:27 +0300)
configure.ac
src/xz/file_io.c

index 35720fe..720315f 100644 (file)
@@ -517,6 +517,9 @@ 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])
+
 TUKLIB_PROGNAME
 TUKLIB_INTEGER
 TUKLIB_PHYSMEM
index 09edcca..56acf3b 100644 (file)
@@ -294,6 +294,10 @@ io_open_src_real(file_pair *pair)
 #ifdef TUKLIB_DOSLIKE
                setmode(STDIN_FILENO, O_BINARY);
 #endif
+#ifdef HAVE_POSIX_FADVISE
+               // It will fail if stdin is a pipe and that's fine.
+               (void)posix_fadvise(STDIN_FILENO, 0, 0, POSIX_FADV_SEQUENTIAL);
+#endif
                return false;
        }
 
@@ -497,6 +501,17 @@ io_open_src_real(file_pair *pair)
        }
 #endif
 
+#ifdef HAVE_POSIX_FADVISE
+       const int fadvise_ret = posix_fadvise(
+                       pair->src_fd, 0, 0, POSIX_FADV_SEQUENTIAL);
+
+       // It shouldn't fail, but if it does anyway, it doesn't matter.
+       // Check it with an assertion so that if something gets messed
+       // up in the future, it will get caught when debugging is enabled.
+       assert(fadvise_ret == 0);
+       (void)fadvise_ret;
+#endif
+
        return false;
 
 error_msg: