warning: implicit declaration of function 'fdatasync' for OS X
While compiling ruby, this warning appears on OS X:
io.c: In function 'rb_io_fdatasync':
io.c:1433: warning: implicit declaration of function 'fdatasync'
While fdatasync is defined, there is no header for it.
Apparently, it works as expected:
fh = File.open('test.txt', 'w')
fh.fdatasync # if this line is commented, nothing is written to the file
But I think we should not trust functions without prototype.
So I propose the following patch, which also document the behavior of IO#fdatasync accordingly to r30762.
diff --git a/configure.in b/configure.in
index 01e59f9..8a4e97e 100644
@@ -940,6 +940,7 @@ AS_CASE(["$target_os"],
ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
+ ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync()
AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt,
diff --git a/io.c b/io.c
index 064d1a2..e5241b3 100644
@@ -1414,8 +1414,8 @@ rb_io_fsync(VALUE io)
* Immediately writes all buffered data in ios to disk.
- * NotImplementedError is raised
- * if the underlying operating system does not support fdatasync(2).
+ * If the underlying operating system does not support fdatasync(2),
+ * IO#fsync is called instead (which might raise a NotImplementedError).
#1 [ruby-core:35602] Updated by Motohiro KOSAKI over 5 years ago
- Status changed from Open to Assigned
- Assignee set to Motohiro KOSAKI
To be honest, I'm not sure Apple's system function support policy. But I'm sure your suggestions were right in past. Then, I'll commit this proposal as is.