From e2b9520e69e52b35348d07eb53a6a88d1397fa3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?X=C4=ABc=C3=B2?= Date: Tue, 6 May 2014 12:56:03 -0700 Subject: [PATCH 1/1] =?UTF-8?q?Compatibility=20for=20Linux=E2=80=99s=20fda?= =?UTF-8?q?tasync().?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configure | 7 +++++++ notmuch-dump.c | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/configure b/configure index 7204812..7bc602d 100755 --- a/configure +++ b/configure @@ -271,6 +271,7 @@ EOF errors=0 libdir_in_ldconfig=0 +have_fdatasync=0 printf "Checking which platform we are on... " uname=`uname` @@ -294,6 +295,7 @@ elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then printf "$uname\n" platform="$uname" linker_resolves_library_dependencies=1 + have_fdatasync=1 printf "Checking for $libdir_expanded in ldconfig... " ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p') @@ -859,6 +861,9 @@ HAVE_D_TYPE = ${have_d_type} # Whether the Xapian version in use supports compaction HAVE_XAPIAN_COMPACT = ${have_xapian_compact} +# Optimized fsync() on Linux +HAVE_FDATASYNC = ${have_fdatasync} + # Whether the getpwuid_r function is standards-compliant # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS # to enable the standards-compliant version -- needed for Solaris) @@ -926,6 +931,7 @@ CONFIGURE_CFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\ -DSTD_GETPWUID=\$(STD_GETPWUID) \\ -DSTD_ASCTIME=\$(STD_ASCTIME) \\ -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\ + -DHAVE_FDATASYNC=\$(HAVE_FDATASYNC) \\ -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER) CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\ @@ -939,6 +945,7 @@ CONFIGURE_CXXFLAGS = -DHAVE_GETLINE=\$(HAVE_GETLINE) \$(GMIME_CFLAGS) \\ -DSTD_GETPWUID=\$(STD_GETPWUID) \\ -DSTD_ASCTIME=\$(STD_ASCTIME) \\ -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\ + -DHAVE_FDATASYNC=\$(HAVE_FDATASYNC) \\ -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER) CONFIGURE_LDFLAGS = \$(GMIME_LDFLAGS) \$(TALLOC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(XAPIAN_LDFLAGS) diff --git a/notmuch-dump.c b/notmuch-dump.c index 2849eab..86b275a 100644 --- a/notmuch-dump.c +++ b/notmuch-dump.c @@ -169,7 +169,11 @@ notmuch_database_dump (notmuch_database_t *notmuch, } if (output_file_name) { +#if HAVE_FDATASYNC ret = fdatasync (outfd); +#else + ret = fsync (outfd); +#endif if (ret) { fprintf (stderr, "Error syncing %s to disk: %s\n", name_for_error, strerror (errno)); -- 1.9.2