From: LaMont Jones Date: Fri, 14 May 2010 10:07:10 +0000 (-0600) Subject: Fix fallocate configure check X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=585260ff4c7361bb59817f989ae9b4079e37e6ed;p=util-linux Fix fallocate configure check Addresses-Debian-Bug: 581358 Signed-off-by: LaMont Jones Conflicts: configure.ac --- diff --git a/configure.ac b/configure.ac index 1f824f40..2a7fd356 100644 --- a/configure.ac +++ b/configure.ac @@ -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 +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_LINUX_FALLOC_H +# include +#endif +#ifdef HAVE_FCNTL_H +# include +#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])