bzip2-ruby-rb20 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +17 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +94 -0
- data/Gemfile +3 -0
- data/README.md +69 -0
- data/Rakefile +35 -0
- data/bzip2-ruby.gemspec +21 -0
- data/ext/bzip2/bzip2.c +250 -0
- data/ext/bzip2/common.c +55 -0
- data/ext/bzip2/common.h +76 -0
- data/ext/bzip2/extconf.rb +21 -0
- data/ext/bzip2/reader.c +1032 -0
- data/ext/bzip2/reader.h +35 -0
- data/ext/bzip2/writer.c +453 -0
- data/ext/bzip2/writer.h +22 -0
- data/lib/bzip2.rb +13 -0
- data/lib/bzip2/internals.rb +13 -0
- data/lib/bzip2/reader.rb +27 -0
- data/lib/bzip2/version.rb +3 -0
- data/lib/bzip2/writer.rb +64 -0
- data/spec/reader_spec.rb +261 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/writer_spec.rb +134 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d53fed8813747479d6f28b31d519c2e160266f73
|
4
|
+
data.tar.gz: d35d85059cfd805ca21b56c13f8f0d8c98a6647d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f932725f330c2524e9639ca0f808902035e392e6f9471212b235dd6f0cdaff53d70b388464e8b4c02c564b1c65b0de9af594341e53c7c77995bda893ee1797f
|
7
|
+
data.tar.gz: 7969c3049e2e1fbff585adddf83ac952157a903ac93ee294e7cc00ce26d5219b977d3d8174d1bba13e09f08e8f62446d5b43336793fca86e8356869e59f9ef9f
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--no-private
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
## 0.2.7 2010-11-16
|
2
|
+
|
3
|
+
* Add documentation for an overview of the Bzip2 module
|
4
|
+
* Document the class methods on Bzip2 and get them to show up in yarddoc
|
5
|
+
* Remove the ConfigError class because searching for it showed no instances of its usage
|
6
|
+
* Add a Usage section to the README and a bit about adding it to a Gemfile
|
7
|
+
* Improve the reader_spec.rb by making it more resilient in lots of places and a bit more descriptive/terse in
|
8
|
+
* Add a lot more documentation for the Reader class and also touch up the Writer class a bit
|
9
|
+
* Make the Writer specs more descriptive by giving them some doc strings.
|
10
|
+
* Wrap up documentation of the Bzip2::Writer class.
|
11
|
+
* Add lib/bzip2-ruby.rb so it's not always necessary to specify to require 'bzip2' in Gemfiles and such
|
12
|
+
* Start documenting the Bzip2::Writer class
|
13
|
+
* Fix a few compiler warnings
|
14
|
+
* Removed some dead code
|
15
|
+
* Fix for ruby 1.9 compatibility.
|
16
|
+
* Fix segfault when exiting in ruby 1.9
|
17
|
+
* Follow the newer conventions of rspec
|
18
|
+
* Migrate to using Bundler instead of Jeweler
|
19
|
+
* use malloc/free instead of ruby_xmalloc/ruby_xfree
|
20
|
+
|
21
|
+
## 0.2.6 2009-10-6
|
22
|
+
|
23
|
+
* Updated to support Ruby 1.8.5
|
24
|
+
|
25
|
+
## 0.2.5 2009-06-07
|
26
|
+
|
27
|
+
* initial conversion of original tests over to rspec
|
28
|
+
|
29
|
+
## 0.2.4 2009-05-02
|
30
|
+
|
31
|
+
* renamed BZ2 module/namespace to Bzip2
|
32
|
+
|
33
|
+
## 0.2.3 2009-05-02
|
34
|
+
|
35
|
+
* renamed gem to bzip2-ruby from bz2
|
36
|
+
* initial conversion to jeweler
|
37
|
+
* bundling gemspec
|
38
|
+
* README and file structure organization updates
|
39
|
+
* updated Init_*() ruby initializer function to match new gem name
|
40
|
+
|
41
|
+
## 0.2.2 2008-12-22
|
42
|
+
|
43
|
+
* 1 major enhancement:
|
44
|
+
* Gemify bz2 library from http://moulon.inra.fr/ruby/bz2.html
|
45
|
+
* All credit goes to Guy Decoux <ts@moulon.inra.fr>
|
46
|
+
|
47
|
+
## 0.2.1
|
48
|
+
|
49
|
+
* replaced rb_proc_new() with bz_proc_new() for 1.6
|
50
|
+
(Thanks "Akinori MUSHA" <knu@iDaemons.org>)
|
51
|
+
|
52
|
+
## 0.1.9
|
53
|
+
|
54
|
+
* corrected BZ_FINISH_OK (Thanks Rudi Cilibrasi <Rudi.Cilibrasi@cwi.nl>)
|
55
|
+
|
56
|
+
## 0.1.6
|
57
|
+
|
58
|
+
* adapted for 1.8.0 (ihi)
|
59
|
+
* modified ::new
|
60
|
+
* BZ2::Writer#finish (same than #flush)
|
61
|
+
|
62
|
+
## 0.1.5
|
63
|
+
|
64
|
+
* corrected extconf.rb
|
65
|
+
* added close!
|
66
|
+
* replaced close(false) by #finish
|
67
|
+
* corrected #flush
|
68
|
+
|
69
|
+
## 0.1.4
|
70
|
+
|
71
|
+
* corrected bz_iv
|
72
|
+
* #to_io
|
73
|
+
* corrected ::Reader#close
|
74
|
+
|
75
|
+
## 0.1.3
|
76
|
+
|
77
|
+
* corrected #lineno
|
78
|
+
* corrected ::Writer::new(nil)
|
79
|
+
* taint result
|
80
|
+
|
81
|
+
## 0.1.2
|
82
|
+
|
83
|
+
* better (???) interface for #read
|
84
|
+
* finalize for objects which respond to #closed?
|
85
|
+
|
86
|
+
## 0.1.1
|
87
|
+
|
88
|
+
* better interface for T_FILE
|
89
|
+
* corrected bug with gc (buf)
|
90
|
+
* Reader#lineno, Reader#lineno=, Reader#ungets
|
91
|
+
* corrected Reader#unused
|
92
|
+
* taint check in #initialize
|
93
|
+
* BZ2::bzip2, BZ2::bunzip2
|
94
|
+
* too many exceptions
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Ruby C bindings to libbzip2
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
First make sure you’ve got Gemcutter in your sources list:
|
6
|
+
|
7
|
+
`gem sources -a http://gemcutter.org`
|
8
|
+
|
9
|
+
Then go ahead and install it as usual:
|
10
|
+
|
11
|
+
`sudo gem install bzip2-ruby`
|
12
|
+
|
13
|
+
You may need to specify:
|
14
|
+
|
15
|
+
`--with-bz2-dir=<include file directory for libbzip2>`
|
16
|
+
|
17
|
+
Or in a Gemfile
|
18
|
+
|
19
|
+
`gem 'bzip2-ruby'`
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
The full documentation is hosted on [rdoc.info](http://rdoc.info/github/brianmario/bzip2-ruby/master/frames).
|
24
|
+
|
25
|
+
Here's a quick overview, hower:
|
26
|
+
|
27
|
+
``` ruby
|
28
|
+
require 'bzip2'
|
29
|
+
|
30
|
+
# Quick shortcuts
|
31
|
+
data = Bzip2.compress 'string'
|
32
|
+
Bzip2.uncompress data
|
33
|
+
|
34
|
+
# Creating a bz2 compressed file
|
35
|
+
writer = Bzip2::Writer.new File.open('file')
|
36
|
+
writer << 'data1'
|
37
|
+
writer.puts 'data2'
|
38
|
+
writer.print 'data3'
|
39
|
+
writer.printf '%s', 'data4'
|
40
|
+
writer.close
|
41
|
+
|
42
|
+
Bzip2::Writer.open('file'){ |f| f << data }
|
43
|
+
|
44
|
+
# Reading a bz2 compressed file
|
45
|
+
reader = Bzip2::Reader.new File.open('file')
|
46
|
+
reader.gets # => "data1data2\n"
|
47
|
+
reader.read # => 'data3data4'
|
48
|
+
|
49
|
+
reader.readline # => raises Bzip2::EOZError
|
50
|
+
|
51
|
+
Bzip2::Reader.open('file'){ |f| puts f.read }
|
52
|
+
```
|
53
|
+
|
54
|
+
## Copying
|
55
|
+
|
56
|
+
```
|
57
|
+
This extension module is copyrighted free software by Guy Decoux
|
58
|
+
You can redistribute it and/or modify it under the same term as Ruby.
|
59
|
+
Guy Decoux <ts@moulon.inra.fr>
|
60
|
+
```
|
61
|
+
|
62
|
+
## Modifications from origin version
|
63
|
+
|
64
|
+
* Switch to Jeweler
|
65
|
+
* Renamed BZ2 module/namespace to Bzip2
|
66
|
+
* Renamed compiled binary from "bz2" to "bzip2"
|
67
|
+
* Renamed gem from "bz2" to "bzip2-ruby"
|
68
|
+
* Converted original tests to rspec
|
69
|
+
* 1.9 compatibility
|
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
# rspec
|
5
|
+
begin
|
6
|
+
require 'rspec'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
|
9
|
+
desc "Run all examples with RCov"
|
10
|
+
RSpec::Core::RakeTask.new('spec:rcov') do |t|
|
11
|
+
t.rcov = true
|
12
|
+
end
|
13
|
+
RSpec::Core::RakeTask.new('spec') do |t|
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
task :default => :spec
|
18
|
+
rescue LoadError
|
19
|
+
puts "rspec, or one of its dependencies, is not available. Install it with: sudo gem install rspec"
|
20
|
+
end
|
21
|
+
|
22
|
+
# rake-compiler
|
23
|
+
require 'rake' unless defined? Rake
|
24
|
+
|
25
|
+
gem 'rake-compiler', '>= 0.7.5'
|
26
|
+
require "rake/extensiontask"
|
27
|
+
|
28
|
+
Rake::ExtensionTask.new('bzip2') do |ext|
|
29
|
+
ext.cross_compile = true
|
30
|
+
ext.cross_platform = ['x86-mingw32', 'x86-mswin32-60']
|
31
|
+
|
32
|
+
ext.lib_dir = File.join 'lib', 'bzip2'
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::Task[:spec].prerequisites << :compile
|
data/bzip2-ruby.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require './lib/bzip2/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'bzip2-ruby-rb20'
|
5
|
+
s.version = Bzip2::VERSION
|
6
|
+
s.authors = ['Guy Decoux', 'Brian Lopezs']
|
7
|
+
s.date = Time.now.utc.strftime("%Y-%m-%d")
|
8
|
+
s.email = ['seniorlopez@gmail.com']
|
9
|
+
s.extensions = ['ext/bzip2/extconf.rb']
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.homepage = 'http://github.com/brianmario/bzip2-ruby'
|
12
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
13
|
+
s.require_paths = ['lib']
|
14
|
+
s.rubygems_version = %q{1.4.2}
|
15
|
+
s.summary = 'Ruby C bindings to libbzip2.'
|
16
|
+
s.test_files = `git ls-files spec`.split("\n")
|
17
|
+
|
18
|
+
# tests
|
19
|
+
s.add_development_dependency 'rake-compiler', ">= 0.7.5"
|
20
|
+
s.add_development_dependency 'rspec', ">= 2.0.0"
|
21
|
+
end
|
data/ext/bzip2/bzip2.c
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
#include <bzlib.h>
|
3
|
+
|
4
|
+
#include "common.h"
|
5
|
+
#include "reader.h"
|
6
|
+
#include "writer.h"
|
7
|
+
|
8
|
+
VALUE bz_cWriter, bz_cReader, bz_cInternal;
|
9
|
+
VALUE bz_eError, bz_eEOZError;
|
10
|
+
|
11
|
+
VALUE bz_internal_ary;
|
12
|
+
|
13
|
+
ID id_new, id_write, id_open, id_flush, id_read;
|
14
|
+
ID id_closed, id_close, id_str;
|
15
|
+
|
16
|
+
void bz_internal_finalize(VALUE data) {
|
17
|
+
VALUE elem;
|
18
|
+
int closed, i;
|
19
|
+
struct bz_iv *bziv;
|
20
|
+
struct bz_file *bzf;
|
21
|
+
|
22
|
+
for (i = 0; i < RARRAY_LEN(bz_internal_ary); i++) {
|
23
|
+
elem = RARRAY_PTR(bz_internal_ary)[i];
|
24
|
+
Data_Get_Struct(elem, struct bz_iv, bziv);
|
25
|
+
if (bziv->bz2) {
|
26
|
+
RDATA(bziv->bz2)->dfree = free;
|
27
|
+
if (TYPE(bziv->io) == T_FILE) {
|
28
|
+
RFILE(bziv->io)->fptr->finalize = bziv->finalize;
|
29
|
+
} else if (TYPE(bziv->io) == T_DATA) {
|
30
|
+
RDATA(bziv->io)->dfree = bziv->finalize;
|
31
|
+
}
|
32
|
+
Data_Get_Struct(bziv->bz2, struct bz_file, bzf);
|
33
|
+
closed = bz_writer_internal_flush(bzf);
|
34
|
+
if (bzf->flags & BZ2_RB_CLOSE) {
|
35
|
+
bzf->flags &= ~BZ2_RB_CLOSE;
|
36
|
+
if (!closed && rb_respond_to(bzf->io, id_close)) {
|
37
|
+
rb_funcall2(bzf->io, id_close, 0, 0);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
/*
|
45
|
+
* call-seq:
|
46
|
+
* compress(str)
|
47
|
+
*
|
48
|
+
* Shortcut for compressing just a string.
|
49
|
+
*
|
50
|
+
* Bzip2.uncompress Bzip2.compress('data') # => 'data'
|
51
|
+
*
|
52
|
+
* @param [String] str the string to compress
|
53
|
+
* @return [String] +str+ compressed with bz2
|
54
|
+
*/
|
55
|
+
VALUE bz_compress(VALUE self, VALUE str) {
|
56
|
+
VALUE bz2, argv[1] = {Qnil};
|
57
|
+
|
58
|
+
str = rb_str_to_str(str);
|
59
|
+
bz2 = rb_funcall2(bz_cWriter, id_new, 1, argv);
|
60
|
+
if (OBJ_TAINTED(str)) {
|
61
|
+
struct bz_file *bzf;
|
62
|
+
Data_Get_Struct(bz2, struct bz_file, bzf);
|
63
|
+
OBJ_TAINT(bzf->io);
|
64
|
+
}
|
65
|
+
bz_writer_write(bz2, str);
|
66
|
+
return bz_writer_close(bz2);
|
67
|
+
}
|
68
|
+
|
69
|
+
/*
|
70
|
+
* Returns the io stream underlying this stream. If the strem was constructed
|
71
|
+
* with a file, that is returned. Otherwise, an empty string is returned.
|
72
|
+
*
|
73
|
+
* @return [File, String] similar to whatever the stream was constructed with
|
74
|
+
* @raise [IOError] if the stream has been closed
|
75
|
+
*/
|
76
|
+
VALUE bz_to_io(VALUE obj) {
|
77
|
+
struct bz_file *bzf;
|
78
|
+
|
79
|
+
Get_BZ2(obj, bzf);
|
80
|
+
return bzf->io;
|
81
|
+
}
|
82
|
+
|
83
|
+
VALUE bz_str_read(int argc, VALUE *argv, VALUE obj) {
|
84
|
+
struct bz_str *bzs;
|
85
|
+
VALUE res, len;
|
86
|
+
int count;
|
87
|
+
|
88
|
+
Data_Get_Struct(obj, struct bz_str, bzs);
|
89
|
+
rb_scan_args(argc, argv, "01", &len);
|
90
|
+
if (NIL_P(len)) {
|
91
|
+
count = (int) RSTRING_LEN(bzs->str);
|
92
|
+
} else {
|
93
|
+
count = NUM2INT(len);
|
94
|
+
if (count < 0) {
|
95
|
+
rb_raise(rb_eArgError, "negative length %d given", count);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
if (!count || bzs->pos == -1) {
|
99
|
+
return Qnil;
|
100
|
+
}
|
101
|
+
if ((bzs->pos + count) >= RSTRING_LEN(bzs->str)) {
|
102
|
+
res = rb_str_new(RSTRING_PTR(bzs->str) + bzs->pos,
|
103
|
+
RSTRING_LEN(bzs->str) - bzs->pos);
|
104
|
+
bzs->pos = -1;
|
105
|
+
} else {
|
106
|
+
res = rb_str_new(RSTRING_PTR(bzs->str) + bzs->pos, count);
|
107
|
+
bzs->pos += count;
|
108
|
+
}
|
109
|
+
return res;
|
110
|
+
}
|
111
|
+
|
112
|
+
/*
|
113
|
+
* call-seq:
|
114
|
+
* uncompress(data)
|
115
|
+
* Decompress a string of bz2 compressed data.
|
116
|
+
*
|
117
|
+
* Bzip2.uncompress Bzip2.compress('asdf') # => 'asdf'
|
118
|
+
*
|
119
|
+
* @param [String] data bz2 compressed data
|
120
|
+
* @return [String] +data+ as uncompressed bz2 data
|
121
|
+
* @raise [Bzip2::Error] if +data+ is not valid bz2 data
|
122
|
+
*/
|
123
|
+
VALUE bz_uncompress(VALUE self, VALUE data) {
|
124
|
+
VALUE bz2, nilv = Qnil, argv[1];
|
125
|
+
|
126
|
+
argv[0] = rb_str_to_str(data);
|
127
|
+
bz2 = rb_funcall2(bz_cReader, id_new, 1, argv);
|
128
|
+
return bz_reader_read(1, &nilv, bz2);
|
129
|
+
}
|
130
|
+
|
131
|
+
/*
|
132
|
+
* Internally allocates data,
|
133
|
+
*
|
134
|
+
* @see Bzip2::Writer#initialize
|
135
|
+
* @see Bzip2::Reader#initialize
|
136
|
+
* @private
|
137
|
+
*/
|
138
|
+
VALUE bz_s_new(int argc, VALUE *argv, VALUE obj) {
|
139
|
+
VALUE res = rb_funcall2(obj, rb_intern("allocate"), 0, 0);
|
140
|
+
rb_obj_call_init(res, argc, argv);
|
141
|
+
return res;
|
142
|
+
}
|
143
|
+
|
144
|
+
void Init_bzip2() {
|
145
|
+
VALUE bz_mBzip2, bz_mBzip2Singleton;
|
146
|
+
|
147
|
+
bz_internal_ary = rb_ary_new();
|
148
|
+
rb_global_variable(&bz_internal_ary);
|
149
|
+
rb_set_end_proc(bz_internal_finalize, Qnil);
|
150
|
+
|
151
|
+
id_new = rb_intern("new");
|
152
|
+
id_write = rb_intern("write");
|
153
|
+
id_open = rb_intern("open");
|
154
|
+
id_flush = rb_intern("flush");
|
155
|
+
id_read = rb_intern("read");
|
156
|
+
id_close = rb_intern("close");
|
157
|
+
id_closed = rb_intern("closed?");
|
158
|
+
id_str = rb_intern("to_str");
|
159
|
+
|
160
|
+
bz_mBzip2 = rb_define_module("Bzip2");
|
161
|
+
bz_eError = rb_define_class_under(bz_mBzip2, "Error", rb_eIOError);
|
162
|
+
bz_eEOZError = rb_define_class_under(bz_mBzip2, "EOZError", bz_eError);
|
163
|
+
|
164
|
+
bz_mBzip2Singleton = rb_singleton_class(bz_mBzip2);
|
165
|
+
rb_define_singleton_method(bz_mBzip2, "compress", bz_compress, 1);
|
166
|
+
rb_define_singleton_method(bz_mBzip2, "uncompress", bz_uncompress, 1);
|
167
|
+
rb_define_alias(bz_mBzip2Singleton, "bzip2", "compress");
|
168
|
+
rb_define_alias(bz_mBzip2Singleton, "decompress", "uncompress");
|
169
|
+
rb_define_alias(bz_mBzip2Singleton, "bunzip2", "uncompress");
|
170
|
+
|
171
|
+
/*
|
172
|
+
Writer
|
173
|
+
*/
|
174
|
+
bz_cWriter = rb_define_class_under(bz_mBzip2, "Writer", rb_cData);
|
175
|
+
#if HAVE_RB_DEFINE_ALLOC_FUNC
|
176
|
+
rb_define_alloc_func(bz_cWriter, bz_writer_s_alloc);
|
177
|
+
#else
|
178
|
+
rb_define_singleton_method(bz_cWriter, "allocate", bz_writer_s_alloc, 0);
|
179
|
+
#endif
|
180
|
+
rb_define_singleton_method(bz_cWriter, "new", bz_s_new, -1);
|
181
|
+
rb_define_singleton_method(bz_cWriter, "open", bz_writer_s_open, -1);
|
182
|
+
rb_define_method(bz_cWriter, "initialize", bz_writer_init, -1);
|
183
|
+
rb_define_method(bz_cWriter, "write", bz_writer_write, 1);
|
184
|
+
rb_define_method(bz_cWriter, "putc", bz_writer_putc, 1);
|
185
|
+
rb_define_method(bz_cWriter, "puts", rb_io_puts, -1);
|
186
|
+
rb_define_method(bz_cWriter, "print", rb_io_print, -1);
|
187
|
+
rb_define_method(bz_cWriter, "printf", rb_io_printf, -1);
|
188
|
+
rb_define_method(bz_cWriter, "<<", rb_io_addstr, 1);
|
189
|
+
rb_define_method(bz_cWriter, "flush", bz_writer_flush, 0);
|
190
|
+
rb_define_method(bz_cWriter, "close", bz_writer_close, 0);
|
191
|
+
rb_define_method(bz_cWriter, "close!", bz_writer_close_bang, 0);
|
192
|
+
rb_define_method(bz_cWriter, "closed?", bz_writer_closed, 0);
|
193
|
+
rb_define_method(bz_cWriter, "to_io", bz_to_io, 0);
|
194
|
+
rb_define_alias(bz_cWriter, "finish", "flush");
|
195
|
+
rb_define_alias(bz_cWriter, "closed", "closed?");
|
196
|
+
|
197
|
+
/*
|
198
|
+
Reader
|
199
|
+
*/
|
200
|
+
bz_cReader = rb_define_class_under(bz_mBzip2, "Reader", rb_cData);
|
201
|
+
rb_include_module(bz_cReader, rb_mEnumerable);
|
202
|
+
#if HAVE_RB_DEFINE_ALLOC_FUNC
|
203
|
+
rb_define_alloc_func(bz_cReader, bz_reader_s_alloc);
|
204
|
+
#else
|
205
|
+
rb_define_singleton_method(bz_cReader, "allocate", bz_reader_s_alloc, 0);
|
206
|
+
#endif
|
207
|
+
rb_define_singleton_method(bz_cReader, "new", bz_s_new, -1);
|
208
|
+
rb_define_singleton_method(bz_cReader, "open", bz_reader_s_open, -1);
|
209
|
+
rb_define_singleton_method(bz_cReader, "foreach", bz_reader_s_foreach, -1);
|
210
|
+
rb_define_singleton_method(bz_cReader, "readlines", bz_reader_s_readlines, -1);
|
211
|
+
rb_define_method(bz_cReader, "initialize", bz_reader_init, -1);
|
212
|
+
rb_define_method(bz_cReader, "read", bz_reader_read, -1);
|
213
|
+
rb_define_method(bz_cReader, "unused", bz_reader_unused, 0);
|
214
|
+
rb_define_method(bz_cReader, "unused=", bz_reader_set_unused, 1);
|
215
|
+
rb_define_method(bz_cReader, "ungetc", bz_reader_ungetc, 1);
|
216
|
+
rb_define_method(bz_cReader, "ungets", bz_reader_ungets, 1);
|
217
|
+
rb_define_method(bz_cReader, "getc", bz_reader_getc, 0);
|
218
|
+
rb_define_method(bz_cReader, "gets", bz_reader_gets_m, -1);
|
219
|
+
rb_define_method(bz_cReader, "readchar", bz_reader_readchar, 0);
|
220
|
+
rb_define_method(bz_cReader, "readline", bz_reader_readline, -1);
|
221
|
+
rb_define_method(bz_cReader, "readlines", bz_reader_readlines, -1);
|
222
|
+
rb_define_method(bz_cReader, "each", bz_reader_each_line, -1);
|
223
|
+
rb_define_method(bz_cReader, "each_byte", bz_reader_each_byte, 0);
|
224
|
+
rb_define_method(bz_cReader, "close", bz_reader_close, 0);
|
225
|
+
rb_define_method(bz_cReader, "close!", bz_reader_close_bang, 0);
|
226
|
+
rb_define_method(bz_cReader, "finish", bz_reader_finish, 0);
|
227
|
+
rb_define_method(bz_cReader, "closed?", bz_reader_closed, 0);
|
228
|
+
rb_define_method(bz_cReader, "eoz?", bz_reader_eoz, 0);
|
229
|
+
rb_define_method(bz_cReader, "eof?", bz_reader_eof, 0);
|
230
|
+
rb_define_method(bz_cReader, "lineno", bz_reader_lineno, 0);
|
231
|
+
rb_define_method(bz_cReader, "lineno=", bz_reader_set_lineno, 1);
|
232
|
+
rb_define_method(bz_cReader, "to_io", bz_to_io, 0);
|
233
|
+
rb_define_alias(bz_cReader, "each_line", "each");
|
234
|
+
rb_define_alias(bz_cReader, "closed", "closed?");
|
235
|
+
rb_define_alias(bz_cReader, "eoz", "eoz?");
|
236
|
+
rb_define_alias(bz_cReader, "eof", "eof?");
|
237
|
+
|
238
|
+
/*
|
239
|
+
Internal
|
240
|
+
*/
|
241
|
+
bz_cInternal = rb_define_class_under(bz_mBzip2, "InternalStr", rb_cData);
|
242
|
+
#if HAVE_RB_DEFINE_ALLOC_FUNC
|
243
|
+
rb_undef_alloc_func(bz_cInternal);
|
244
|
+
#else
|
245
|
+
rb_undef_method(CLASS_OF(bz_cInternal), "allocate");
|
246
|
+
#endif
|
247
|
+
rb_undef_method(CLASS_OF(bz_cInternal), "new");
|
248
|
+
rb_undef_method(bz_cInternal, "initialize");
|
249
|
+
rb_define_method(bz_cInternal, "read", bz_str_read, -1);
|
250
|
+
}
|