1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

io.c: Backport #2267 [ruby-core:26300]; Fix problem with IO so that the file position is correct after a direct write on BSDish platforms like OS X.

test/ruby/test_io.rb: Added a test for the fix.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@28393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
wyhaines 2010-06-22 20:10:13 +00:00
parent 2c0b73f16a
commit 2176130373
4 changed files with 45 additions and 2 deletions

View file

@ -1,6 +1,11 @@
Wed Jun 23 04:26:00 Kirk Haines <khaines@ruby-lang.org>
* io.c: Backport #2267 [ruby-core:26300]; Fix problem with IO so that the file position is correct after a direct write on BSDish platforms like OS X.
* test/ruby/test_io.rb: Added a test for the fix.
Wed Jun 23 02:07:00 Kirk Haines <khaines@ruby-lang.org> Wed Jun 23 02:07:00 Kirk Haines <khaines@ruby-lang.org>
* object.c: Backport #2364 [ruby-core:26733]; Allow result of to_f to be NaN to permit conversion from BigDecimal('NaN') to Float. * object.c: Backport #2364 [ruby-core:26733]; Allow result of to_f to be NaN to permit conversion from BigDecimal('NaN') to Float. r28392
Tue Jun 22 04:29:00 Kirk Haines <khaines@ruby-lang.org> Tue Jun 22 04:29:00 Kirk Haines <khaines@ruby-lang.org>

11
io.c
View file

@ -36,6 +36,14 @@
# define USE_SETVBUF # define USE_SETVBUF
#endif #endif
#ifndef BSD_STDIO
# if defined(__MACH__) || defined(__DARWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
# define BSD_STDIO 1
# else
# define BSD_STDIO 0
# endif
#endif
#ifdef __QNXNTO__ #ifdef __QNXNTO__
#include "unix.h" #include "unix.h"
#endif #endif
@ -472,6 +480,9 @@ io_fwrite(str, fptr)
TRAP_BEG; TRAP_BEG;
r = write(fileno(f), RSTRING(str)->ptr+offset, l); r = write(fileno(f), RSTRING(str)->ptr+offset, l);
TRAP_END; TRAP_END;
#if BSD_STDIO
fseeko(f, lseek(fileno(f), (off_t)0, SEEK_CUR), SEEK_SET);
#endif
if (r == n) return len; if (r == n) return len;
if (0 <= r) { if (0 <= r) {
offset += r; offset += r;

View file

@ -1,6 +1,33 @@
require 'test/unit' require 'test/unit'
require 'tempfile'
class TestIO < Test::Unit::TestCase class TestIO < Test::Unit::TestCase
def make_tempfile
t = Tempfile.new("foo")
t.binmode
t.puts "foo"
t.puts "bar"
t.puts "baz"
t.close
t
end
def test_pos
t = make_tempfile
open(t.path, IO::RDWR|IO::CREAT|IO::TRUNC, 0600) do |f|
f.write "Hello"
assert_equal(5, f.pos)
end
open(t.path, IO::RDWR|IO::CREAT|IO::TRUNC, 0600) do |f|
f.sync = true
f.read
f.write "Hello"
assert_equal(5, f.pos)
end
end
def test_gets_rs def test_gets_rs
r, w = IO.pipe r, w = IO.pipe
w.print "\377xyz" w.print "\377xyz"

View file

@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2010-06-23" #define RUBY_RELEASE_DATE "2010-06-23"
#define RUBY_VERSION_CODE 186 #define RUBY_VERSION_CODE 186
#define RUBY_RELEASE_CODE 20100623 #define RUBY_RELEASE_CODE 20100623
#define RUBY_PATCHLEVEL 417 #define RUBY_PATCHLEVEL 418
#define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8 #define RUBY_VERSION_MINOR 8