dovecot-1.1: Test if posix_fallocate() works already in configure.

dovecot at dovecot.org dovecot at dovecot.org
Sun Oct 5 13:49:35 EEST 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/12565ef10d1c
changeset: 7903:12565ef10d1c
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Oct 05 13:48:15 2008 +0300
description:
Test if posix_fallocate() works already in configure.

diffstat:

1 file changed, 30 insertions(+), 10 deletions(-)
configure.in |   40 ++++++++++++++++++++++++++++++----------

diffs (51 lines):

diff -r 0fa3d8c5247d -r 12565ef10d1c configure.in
--- a/configure.in	Sun Oct 05 13:47:15 2008 +0300
+++ b/configure.in	Sun Oct 05 13:48:15 2008 +0300
@@ -650,17 +650,37 @@ AC_TRY_COMPILE([
 ])
 
 dnl * Old glibcs have broken posix_fallocate(). Make sure not to use it.
-AC_TRY_LINK([
-  #define _XOPEN_SOURCE 600
-  #include <stdlib.h>
-  #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7)
-    possibly broken posix_fallocate
-  #endif
-], [
-  posix_fallocate(0, 0, 0);
-], [
+dnl * It may also be broken in AIX.
+AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
+  AC_TRY_RUN([
+    #define _XOPEN_SOURCE 600
+    #include <stdio.h>
+    #include <stdlib.h>
+    #include <fcntl.h>
+    #include <unistd.h>
+    #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7)
+      possibly broken posix_fallocate
+    #endif
+    int main() {
+      int fd = creat("conftest.temp", 0600);
+      int ret;
+      if (fd == -1) {
+	perror("creat()");
+	return 2;
+      }
+      ret = posix_fallocate(fd, 1024, 1024) < 0 ? 1 : 0;
+      unlink("conftest.temp");
+      return ret;
+    }
+  ], [
+    i_cv_posix_fallocate_works=yes
+  ], [
+    i_cv_posix_fallocate_works=no
+  ])
+])
+if test $i_cv_posix_fallocate_works = yes; then
   AC_DEFINE(HAVE_POSIX_FALLOCATE,, Define if you have a working posix_fallocate())
-])
+fi
 
 dnl * OS specific options
 case "$host_os" in


More information about the dovecot-cvs mailing list