io-extra 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -0
- data/Rakefile +20 -17
- data/examples/example_pread.rb +24 -0
- data/ext/extconf.rb +1 -1
- data/ext/io/extra.c +5 -5
- data/io-extra.gemspec +2 -2
- data/test/test_io_extra.rb +8 -8
- metadata +13 -12
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 1.2.4 - 22-Mar-2011
|
2
|
+
* Use NUM2OFFT where appropriate. Fixes potential 32 vs 64 bit issues. Thanks
|
3
|
+
go to Eric Wong for the spot and patch.
|
4
|
+
* Added an example program for IO.pread, and a corresponding Rake task.
|
5
|
+
* Config substituted with RbConfig, since the former is apparently going to
|
6
|
+
deprecated in 1.9. Thanks go to Eric Wong for the spot and patch.
|
7
|
+
|
1
8
|
== 1.2.3 - 25-Oct-2010
|
2
9
|
* Documentation updates to the README.
|
3
10
|
* Updates to the Rakefile, including archive tasks, a default task, and
|
data/Rakefile
CHANGED
@@ -2,33 +2,29 @@ require 'rake'
|
|
2
2
|
require 'rake/clean'
|
3
3
|
require 'rake/testtask'
|
4
4
|
require 'rbconfig'
|
5
|
+
include RbConfig
|
5
6
|
|
6
|
-
|
7
|
+
CLEAN.include(
|
8
|
+
'**/*.gem', # Gem files
|
9
|
+
'**/*.rbc', # Rubinius
|
10
|
+
'**/*.o', # C object file
|
11
|
+
'**/*.log', # Ruby extension build log
|
12
|
+
'**/Makefile', # C Makefile
|
13
|
+
'**/conftest.dSYM', # OS X build directory
|
14
|
+
"**/*.#{CONFIG['DLEXT']}" # C shared object
|
15
|
+
)
|
16
|
+
|
17
|
+
if File::ALT_SEPARATOR
|
7
18
|
STDERR.puts 'Not supported on this platform. Exiting.'
|
8
19
|
exit(-1)
|
9
20
|
end
|
10
21
|
|
11
|
-
desc "Clean the build files for the io-extra source"
|
12
|
-
task :clean do
|
13
|
-
Dir['*.gem'].each{ |f| File.delete(f) }
|
14
|
-
Dir['**/*.rbc'].each{ |f| File.delete(f) } # Rubinius
|
15
|
-
rm_rf('io') if File.exists?('io')
|
16
|
-
|
17
|
-
Dir.chdir('ext') do
|
18
|
-
sh 'make distclean' if File.exists?('extra.o')
|
19
|
-
rm_rf('extra/extra.c') if File.exists?('extra.c')
|
20
|
-
rm_rf('conftest.dSYM') if File.exists?('conftest.dSYM') # OS X
|
21
|
-
build_file = File.join(Dir.pwd, 'io', 'extra.' + Config::CONFIG['DLEXT'])
|
22
|
-
File.delete(build_file) if File.exists?(build_file)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
22
|
desc "Build the io-extra library (but don't install it)"
|
27
23
|
task :build => [:clean] do
|
28
24
|
Dir.chdir('ext') do
|
29
25
|
ruby 'extconf.rb'
|
30
26
|
sh 'make'
|
31
|
-
build_file = File.join(Dir.pwd, 'extra.' +
|
27
|
+
build_file = File.join(Dir.pwd, 'extra.' + CONFIG['DLEXT'])
|
32
28
|
Dir.mkdir('io') unless File.exists?('io')
|
33
29
|
FileUtils.cp(build_file, 'io')
|
34
30
|
end
|
@@ -80,6 +76,13 @@ task :example => [:build] do
|
|
80
76
|
ruby '-Iext examples/example_io_extra.rb'
|
81
77
|
end
|
82
78
|
|
79
|
+
namespace :example do
|
80
|
+
desc "Run the IO.pread example program."
|
81
|
+
task :pread do
|
82
|
+
ruby '-Iext examples/example_io_extra.rb'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
83
86
|
Rake::TestTask.new do |t|
|
84
87
|
task :test => :build
|
85
88
|
t.libs << 'ext'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
########################################################################
|
2
|
+
# example_pread.rb
|
3
|
+
#
|
4
|
+
# Example program demonstrating the use of IO.pread.
|
5
|
+
########################################################################
|
6
|
+
require 'io/extra'
|
7
|
+
require 'tmpdir'
|
8
|
+
|
9
|
+
# Create a temporary file with a little data in it.
|
10
|
+
file = File.join(Dir.tmpdir, 'pread_test.txt')
|
11
|
+
File.open(file, 'w'){ |fh| 100.times{ |n| fh.puts "Hello: #{n}" } }
|
12
|
+
|
13
|
+
# Read from the file using pread.
|
14
|
+
begin
|
15
|
+
fh = File.open(file)
|
16
|
+
|
17
|
+
puts "Handle position before read: #{fh.pos}"
|
18
|
+
puts IO.pread(fh.fileno, 18, 0)
|
19
|
+
|
20
|
+
puts "Handle position after read: #{fh.pos}"
|
21
|
+
puts IO.pread(fh.fileno, 18, 0)
|
22
|
+
ensure
|
23
|
+
fh.close
|
24
|
+
end
|
data/ext/extconf.rb
CHANGED
data/ext/io/extra.c
CHANGED
@@ -324,7 +324,7 @@ static VALUE io_set_directio(VALUE self, VALUE v_advice){
|
|
324
324
|
static VALUE s_io_pread(VALUE klass, VALUE v_fd, VALUE v_nbyte, VALUE v_offset){
|
325
325
|
int fd = NUM2INT(v_fd);
|
326
326
|
size_t nbyte = NUM2ULONG(v_nbyte);
|
327
|
-
off_t offset =
|
327
|
+
off_t offset = NUM2OFFT(v_offset);
|
328
328
|
VALUE str = rb_str_new(NULL, nbyte);
|
329
329
|
ssize_t nread = pread(fd, RSTRING_PTR(str), nbyte, offset);
|
330
330
|
|
@@ -349,7 +349,7 @@ static VALUE s_io_pread(VALUE klass, VALUE v_fd, VALUE v_nbyte, VALUE v_offset){
|
|
349
349
|
static VALUE s_io_pread_ptr(VALUE klass, VALUE v_fd, VALUE v_nbyte, VALUE v_offset){
|
350
350
|
int fd = NUM2INT(v_fd);
|
351
351
|
size_t nbyte = NUM2ULONG(v_nbyte);
|
352
|
-
off_t offset =
|
352
|
+
off_t offset = NUM2OFFT(v_offset);
|
353
353
|
uintptr_t* vector = malloc(nbyte + 1);
|
354
354
|
|
355
355
|
if(pread(fd, vector, nbyte, offset) == -1)
|
@@ -378,7 +378,7 @@ static VALUE s_io_pwrite(VALUE klass, VALUE v_fd, VALUE v_buf, VALUE v_offset){
|
|
378
378
|
NUM2INT(v_fd),
|
379
379
|
RSTRING_PTR(v_buf),
|
380
380
|
RSTRING_LEN(v_buf),
|
381
|
-
|
381
|
+
NUM2OFFT(v_offset)
|
382
382
|
);
|
383
383
|
|
384
384
|
if(result == -1)
|
@@ -544,6 +544,6 @@ void Init_extra(){
|
|
544
544
|
rb_define_singleton_method(rb_cIO, "writev", s_io_writev, 2);
|
545
545
|
#endif
|
546
546
|
|
547
|
-
/* 1.2.
|
548
|
-
rb_define_const(rb_cIO, "EXTRA_VERSION", rb_str_new2("1.2.
|
547
|
+
/* 1.2.4: The version of this library. This a string. */
|
548
|
+
rb_define_const(rb_cIO, "EXTRA_VERSION", rb_str_new2("1.2.4"));
|
549
549
|
}
|
data/io-extra.gemspec
CHANGED
@@ -2,13 +2,13 @@ require 'rubygems'
|
|
2
2
|
require 'rbconfig'
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
|
-
if
|
5
|
+
if RbConfig::CONFIG['host_os'] =~ /mswin|dos|win32|cygwin|mingw/i
|
6
6
|
STDERR.puts 'Not supported on this platform. Exiting.'
|
7
7
|
exit(-1)
|
8
8
|
end
|
9
9
|
|
10
10
|
spec.name = 'io-extra'
|
11
|
-
spec.version = '1.2.
|
11
|
+
spec.version = '1.2.4'
|
12
12
|
spec.author = 'Daniel J. Berger'
|
13
13
|
spec.license = 'Artistic 2.0'
|
14
14
|
spec.email = 'djberg96@gmail.com'
|
data/test/test_io_extra.rb
CHANGED
@@ -18,19 +18,19 @@ class TC_IO_Extra < Test::Unit::TestCase
|
|
18
18
|
@fh = File.open(@file, 'w+')
|
19
19
|
@fh.puts "The quick brown fox jumped over the lazy dog's back"
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def test_version
|
23
|
-
assert_equal('1.2.
|
23
|
+
assert_equal('1.2.4', IO::EXTRA_VERSION)
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_direct_constant
|
27
|
-
omit_unless(
|
27
|
+
omit_unless(RbConfig::CONFIG['host_os'] =~ /linux/i, 'Linux-only')
|
28
28
|
assert_equal(040000, IO::DIRECT)
|
29
29
|
assert_equal(040000, File::DIRECT)
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_open_direct
|
33
|
-
omit_unless(
|
33
|
+
omit_unless(RbConfig::CONFIG['host_os'] =~ /linux/i, 'Linux-only')
|
34
34
|
assert_nothing_raised do
|
35
35
|
fh = File.open(@fh.path, IO::RDWR|IO::DIRECT)
|
36
36
|
fh.close
|
@@ -38,20 +38,20 @@ class TC_IO_Extra < Test::Unit::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_directio
|
41
|
-
omit_if(
|
41
|
+
omit_if(RbConfig::CONFIG['host_os'] =~ /darwin/i, 'unsupported')
|
42
42
|
assert_respond_to(@fh, :directio?)
|
43
43
|
assert_nothing_raised{ @fh.directio? }
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_directio_set
|
47
|
-
omit_if(
|
47
|
+
omit_if(RbConfig::CONFIG['host_os'] =~ /darwin/i, 'unsupported')
|
48
48
|
assert_respond_to(@fh, :directio=)
|
49
49
|
assert_raises(StandardError){ @fh.directio = 99 }
|
50
50
|
assert_nothing_raised{ @fh.directio = IO::DIRECTIO_ON }
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_constants
|
54
|
-
omit_if(
|
54
|
+
omit_if(RbConfig::CONFIG['host_os'] =~ /darwin/i, 'unsupported')
|
55
55
|
assert_not_nil(IO::DIRECTIO_ON)
|
56
56
|
assert_not_nil(IO::DIRECTIO_OFF)
|
57
57
|
end
|
@@ -61,7 +61,7 @@ class TC_IO_Extra < Test::Unit::TestCase
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_fdwalk
|
64
|
-
omit_if(
|
64
|
+
omit_if(RbConfig::CONFIG['host_os'] =~ /darwin/i, 'unsupported')
|
65
65
|
assert_respond_to(IO, :fdwalk)
|
66
66
|
assert_nothing_raised{ IO.fdwalk(0){ } }
|
67
67
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: io-extra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 4
|
10
|
+
version: 1.2.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel J. Berger
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-03-22 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -46,16 +46,17 @@ extra_rdoc_files:
|
|
46
46
|
- MANIFEST
|
47
47
|
- ext/io/extra.c
|
48
48
|
files:
|
49
|
-
-
|
49
|
+
- Rakefile
|
50
|
+
- README
|
50
51
|
- doc/io_extra.txt
|
52
|
+
- io-extra.gemspec
|
53
|
+
- CHANGES
|
51
54
|
- examples/example_io_extra.rb
|
55
|
+
- examples/example_pread.rb
|
56
|
+
- test/test_io_extra.rb
|
57
|
+
- MANIFEST
|
52
58
|
- ext/extconf.rb
|
53
59
|
- ext/io/extra.c
|
54
|
-
- io-extra.gemspec
|
55
|
-
- MANIFEST
|
56
|
-
- Rakefile
|
57
|
-
- README
|
58
|
-
- test/test_io_extra.rb
|
59
60
|
has_rdoc: true
|
60
61
|
homepage: http://www.rubyforge.org/projects/shards
|
61
62
|
licenses:
|
@@ -88,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
89
|
requirements: []
|
89
90
|
|
90
91
|
rubyforge_project: shards
|
91
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.6.2
|
92
93
|
signing_key:
|
93
94
|
specification_version: 3
|
94
95
|
summary: Adds extra methods to the IO class.
|