Project

General

Profile

Actions

Bug #4500

closed

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

Added by Eregon (Benoit Daloze) almost 14 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.3dev (2011-03-01 trunk 31001) [x86_64-darwin10.6.0]
Backport:
[ruby-core:35493]

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 <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 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

Actions

Also available in: Atom PDF

Like0
Like0Like0