Fix the mac host build of e2fsprogs
Mac OS doesn't support the O_DIRECT flag, so use the F_NOCACHE
option of fcntl() instead. Fix taken from the libext2 project
on soruceforge.
Change-Id: I1e88a95e53f1bbbd8dbcfc7aa43a27443dfd6807
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 1df1fdd..5bf2c92 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -428,6 +428,7 @@
struct unix_private_data *data = NULL;
errcode_t retval;
int open_flags;
+ int f_nocache = 0;
struct stat st;
#ifdef __linux__
struct utsname ut;
@@ -464,7 +465,11 @@
if (flags & IO_FLAG_EXCLUSIVE)
open_flags |= O_EXCL;
if (flags & IO_FLAG_DIRECT_IO)
+#if !defined(O_DIRECT) && defined(F_NOCACHE)
+ f_nocache = F_NOCACHE;
+#else
open_flags |= O_DIRECT;
+#endif
data->flags = flags;
#ifdef HAVE_OPEN64
@@ -477,6 +482,13 @@
goto cleanup;
}
+ if (f_nocache) {
+ if (fcntl(data->dev, f_nocache, 1) < 0) {
+ retval = errno;
+ goto cleanup;
+ }
+ }
+
#ifdef BLKSSZGET
if (flags & IO_FLAG_DIRECT_IO) {
if (ioctl(data->dev, BLKSSZGET, &data->align) != 0)