]> err.no Git - util-linux/commitdiff
Fix fallocate configure check
authorLaMont Jones <lamont@debian.org>
Fri, 14 May 2010 10:07:10 +0000 (04:07 -0600)
committerLaMont Jones <lamont@debian.org>
Fri, 14 May 2010 10:07:10 +0000 (04:07 -0600)
Addresses-Debian-Bug: 581358
Signed-off-by: LaMont Jones <lamont@debian.org>
Conflicts:

configure.ac

configure.ac

index 1f824f40c37bb473533d3c0039a88466fc73390e..2a7fd356310b65a1c5261ae3e793971062e7b4c2 100644 (file)
@@ -580,7 +580,41 @@ UTIL_CHECK_SYSCALL([ioprio_get],
 
 dnl fallocate could be available as libc function or as syscall only
 UTIL_CHECK_SYSCALL([fallocate])
-AC_CHECK_FUNCS([fallocate])
+
+dnl check for valid fallocate() function
+dnl with 32 bits glibc 2.10, fallocate() exists but not fallocate64()
+dnl when _FILE_OFFSET_BITS==64, fallocate() is redirect to fallocate64()
+dnl and program can't be linked.
+dnl AC_CHECK_FUNC can't catch such errors since it's redefining
+dnl function prototype.
+AC_CHECK_HEADERS([fcntl.h linux/falloc.h sys/types.h unistd.h])
+AC_MSG_CHECKING([for valid fallocate() function])
+AC_LINK_IFELSE([
+AC_LANG_PROGRAM([[
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_LINUX_FALLOC_H
+# include <linux/falloc.h>
+#endif
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+]],[[
+   long ret;
+
+   ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0xfffffffful, 0xfffffffful);
+
+   if (ret != 0) {
+      return 1;
+   }
+   ]])],[
+AC_MSG_RESULT([yes])
+AC_DEFINE(HAVE_FALLOCATE,1,[Have valid fallocate() function])],[
+AC_MSG_RESULT([no])])
 
 dnl unshare could be available as libc function or as syscall only
 UTIL_CHECK_SYSCALL([unshare])