summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-22 04:50:29 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-22 04:50:29 +0000
commita7dedc272e6e987ed53c468204f9ab0edca4ab2c (patch)
tree2cbb3cde9982b1e609b02f94f35560f67e8f3b5e
parent5d30ddec179c9c3174a2266c4ce1c91093c931ee (diff)
* io.c (rb_io_fdatasync): new method IO#fdatasync.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--configure.in4
-rw-r--r--io.c29
-rw-r--r--version.h4
4 files changed, 37 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index a4ee56d48c..3b5383f6d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Mon Jun 22 13:50:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_fdatasync): new method IO#fdatasync.
+
Sun Jun 21 22:33:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
* load.c (Init_load): $: must be readonly. [ruby-dev:38690]
diff --git a/configure.in b/configure.in
index cb680b910c..b273dc9f6a 100644
--- a/configure.in
+++ b/configure.in
@@ -1076,9 +1076,9 @@ AC_REPLACE_FUNCS(dup2 memmove strerror\
strchr strstr crypt flock vsnprintf\
isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \
strlcpy strlcat)
-AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd eaccess\
+AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot getcwd eaccess\
truncate ftruncate chsize times utimes utimensat fcntl lockf lstat\
- link symlink readlink readdir_r\
+ link symlink readlink readdir_r fsync fdatasync\
setitimer setruid seteuid setreuid setresuid setproctitle socketpair\
setrgid setegid setregid setresgid issetugid pause lchown lchmod\
getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
diff --git a/io.c b/io.c
index 47c31a1a30..660fb14cc0 100644
--- a/io.c
+++ b/io.c
@@ -1319,6 +1319,34 @@ rb_io_fsync(VALUE io)
#define rb_io_fsync rb_f_notimplement
#endif
+#ifdef HAVE_FDATASYNC
+/*
+ * call-seq:
+ * ios.fdatasync => 0 or nil
+ *
+ * Immediately writes all buffered data in <em>ios</em> to disk.
+ * Returns <code>nil</code> if the underlying operating system does not
+ * support <em>fdatasync(2)</em>.
+ */
+
+static VALUE
+rb_io_fdatasync(VALUE io)
+{
+ rb_io_t *fptr;
+
+ io = GetWriteIO(io);
+ GetOpenFile(io, fptr);
+
+ if (io_fflush(fptr) < 0)
+ rb_sys_fail(0);
+ if (fdatasync(fptr->fd) < 0)
+ rb_sys_fail_path(fptr->pathv);
+ return INT2FIX(0);
+}
+#else
+#define rb_io_fdatasync rb_f_notimplement
+#endif
+
/*
* call-seq:
* ios.fileno => fixnum
@@ -8781,6 +8809,7 @@ Init_IO(void)
rb_define_method(rb_cIO, "to_io", rb_io_to_io, 0);
rb_define_method(rb_cIO, "fsync", rb_io_fsync, 0);
+ rb_define_method(rb_cIO, "fdatasync", rb_io_fdatasync, 0);
rb_define_method(rb_cIO, "sync", rb_io_sync, 0);
rb_define_method(rb_cIO, "sync=", rb_io_set_sync, 1);
diff --git a/version.h b/version.h
index 95b22369d3..469ead9474 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.2"
-#define RUBY_RELEASE_DATE "2009-06-21"
+#define RUBY_RELEASE_DATE "2009-06-22"
#define RUBY_PATCHLEVEL -1
#define RUBY_BRANCH_NAME "trunk"
@@ -8,7 +8,7 @@
#define RUBY_VERSION_TEENY 1
#define RUBY_RELEASE_YEAR 2009
#define RUBY_RELEASE_MONTH 6
-#define RUBY_RELEASE_DAY 21
+#define RUBY_RELEASE_DAY 22
#include "ruby/version.h"