Bug #4500

warning: implicit declaration of function 'fdatasync' for OS X

Added by Benoit Daloze about 4 years ago. Updated about 4 years ago.

[ruby-core:35493]
Status:Closed
Priority:Normal
Assignee:Motohiro KOSAKI
ruby -v:ruby 1.9.3dev (2011-03-01 trunk 31001) [x86_64-darwin10.6.0] Backport:

Description

=begin
While compiling ruby, this warning appears on OS X:

compiling io.c
io.c: In function 'rb_io_fdatasync':
io.c:1433: warning: implicit declaration of function 'fdatasync'

This is a regression caused by the revert (r30821) of r30725: configure.in: Mac OS X wrongly reports it has fdatasync(3).

While fdatasync is defined, there is no header for it.
Apparently, it works as expected:

fh = File.open('test.txt', 'w')
fh.write('DATA')
fh.fdatasync # if this line is commented, nothing is written to the file
exit!

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
--- a/configure.in
+++ b/configure.in
@@ -940,6 +940,7 @@ AS_CASE(["$target_os"],
fi
ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
ac_cv_lib_crypt_crypt=no
+ 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,
[AC_TRY_RUN([
#include
diff --git a/io.c b/io.c
index 064d1a2..e5241b3 100644
--- a/io.c
+++ b/io.c
@@ -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).
*/

static VALUE

=end

Associated revisions

Revision 31232
Added by Motohiro KOSAKI about 4 years ago

  • configure.in: disable fdatasync again on Mac OS X. [Bug #4500]

Revision 31232
Added by Motohiro KOSAKI about 4 years ago

  • configure.in: disable fdatasync again on Mac OS X. [Bug #4500]

History

#1 Updated by Motohiro KOSAKI about 4 years ago

  • Status changed from Open to Assigned
  • Assignee set to Motohiro KOSAKI

=begin
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.

Thanks.
=end

#2 Updated by Motohiro KOSAKI about 4 years ago

  • Status changed from Assigned to Closed

=begin

=end

Also available in: Atom PDF