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:
parent
2c0b73f16a
commit
2176130373
4 changed files with 45 additions and 2 deletions
|
@ -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
11
io.c
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue