[#35446] [Ruby 1.9 - Bug #4477][Open] Kernel:exec and backtick (`) don't work for certain system commands — Joachim Wuttke <j.wuttke@...>

10 messages 2011/03/07

[#35476] [Ruby 1.9 - Bug #4489][Open] [PATCH] Encodings with /-(unix|dos|mac)\Z/ — "James M. Lawrence" <quixoticsycophant@...>

20 messages 2011/03/10

[#35552] [Ruby 1.9 - Feature #4523][Open] Kernel#require to return the path of the loaded file — Alex Young <alex@...>

14 messages 2011/03/24

[#35565] [Ruby 1.9 - Feature #4531][Open] [PATCH 0/7] use poll() instead of select() in certain cases — Eric Wong <normalperson@...>

33 messages 2011/03/28

[#35566] [Ruby 1.9 - Feature #4532][Open] [PATCH] add IO#pread and IO#pwrite methods — Eric Wong <normalperson@...>

12 messages 2011/03/28

[#35586] [Ruby 1.9 - Feature #4538][Open] [PATCH (cleanup)] avoid unnecessary select() calls before doing I/O — Eric Wong <normalperson@...>

9 messages 2011/03/29

[ruby-core:35493] [Ruby 1.9 - Bug #4500][Open] warning: implicit declaration of function 'fdatasync' for OS X

From: Benoit Daloze <redmine@...>
Date: 2011-03-13 19:21:45 UTC
List: ruby-core #35493
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

In This Thread

Prev Next