From: Benoit Daloze <redmine@...> Date: 2011-03-14T04:21:45+09:00 Subject: [ruby-core:35493] [Ruby 1.9 - Bug #4500][Open] warning: implicit declaration of function 'fdatasync' for OS X Issue #4500 has been reported by Benoit Daloze. ---------------------------------------- Bug #4500: warning: implicit declaration of function 'fdatasync' for OS X http://redmine.ruby-lang.org/issues/4500 Author: Benoit Daloze Status: Open Priority: Normal Assignee: Category: build Target version: 1.9.x ruby -v: ruby 1.9.3dev (2011-03-01 trunk 31001) [x86_64-darwin10.6.0] 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 <stdio.h> 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 <em>ios</em> to disk. * - * <code>NotImplementedError</code> is raised - * if the underlying operating system does not support <em>fdatasync(2)</em>. + * If the underlying operating system does not support <em>fdatasync(2)</em>, + * <code>IO#fsync</code> is called instead (which might raise a <code>NotImplementedError</code>). */ static VALUE -- http://redmine.ruby-lang.org