ruby-brs 1.1.2 → 1.2.1
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.
- checksums.yaml +4 -4
- data/README.md +103 -82
- data/ext/brs_ext/buffer.c +21 -7
- data/ext/brs_ext/buffer.h +7 -7
- data/ext/brs_ext/error.c +11 -11
- data/ext/brs_ext/error.h +2 -1
- data/ext/brs_ext/gvl.h +24 -0
- data/ext/brs_ext/io.c +240 -122
- data/ext/brs_ext/option.c +37 -27
- data/ext/brs_ext/option.h +37 -29
- data/ext/brs_ext/stream/compressor.c +118 -52
- data/ext/brs_ext/stream/compressor.h +4 -1
- data/ext/brs_ext/stream/decompressor.c +54 -22
- data/ext/brs_ext/stream/decompressor.h +4 -1
- data/ext/brs_ext/string.c +118 -64
- data/ext/extconf.rb +10 -1
- data/lib/brs/file.rb +6 -2
- data/lib/brs/option.rb +16 -4
- data/lib/brs/stream/abstract.rb +6 -9
- data/lib/brs/stream/raw/abstract.rb +6 -2
- data/lib/brs/stream/raw/compressor.rb +3 -7
- data/lib/brs/stream/raw/decompressor.rb +1 -5
- data/lib/brs/stream/reader.rb +72 -52
- data/lib/brs/stream/reader_helpers.rb +1 -1
- data/lib/brs/stream/writer.rb +9 -4
- data/lib/brs/stream/writer_helpers.rb +3 -2
- data/lib/brs/validation.rb +4 -2
- data/lib/brs/version.rb +1 -1
- metadata +62 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7c98f5678a0545688d9a0bb7537d2eb55507559c2f6d61855796983e4b8a763
|
4
|
+
data.tar.gz: 19bbed82c75ecf25c17a7848b97890dfad5387a3d9244b16db2447bb21425c1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7a82e47ac99a515794cc5e56153d10993b5b87fdb9f091dd04a685689dadcee2aec961b2cefbd1fd9531c457cd45af5d0d05af87178642b5bb545fa2f9f9246
|
7
|
+
data.tar.gz: 481e233bfd17fe958a384787b2dd0f469b9017d7005cb9c1b88bdf48cad578767c5003e52b53ce6fcda35635a57339115a6cd21f0768281626df99995ee308ee
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Ruby bindings for brotli library
|
2
2
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
| [](https://ci.appveyor.com/project/andrew-aladev/ruby-brs/branch/master) | [](https://circleci.com/gh/andrew-aladev/ruby-brs/tree/master) | [](https://github.com/andrew-aladev/ruby-brs/actions) | [](https://codecov.io/gh/andrew-aladev/ruby-brs) | [](https://rubygems.org/gems/ruby-brs) |
|
6
6
|
|
7
7
|
See [brotli library](https://github.com/google/brotli).
|
8
8
|
|
@@ -21,6 +21,8 @@ rake gem
|
|
21
21
|
gem install pkg/ruby-brs-*.gem
|
22
22
|
```
|
23
23
|
|
24
|
+
You can also use [overlay](https://github.com/andrew-aladev/overlay) for gentoo.
|
25
|
+
|
24
26
|
## Usage
|
25
27
|
|
26
28
|
There are simple APIs: `String` and `File`. Also you can use generic streaming API: `Stream::Writer` and `Stream::Reader`.
|
@@ -36,9 +38,30 @@ BRS::File.decompress "file.txt.br", "file.txt"
|
|
36
38
|
|
37
39
|
BRS::Stream::Writer.open("file.txt.br") { |writer| writer << "sample string" }
|
38
40
|
puts BRS::Stream::Reader.open("file.txt.br") { |reader| reader.read }
|
41
|
+
|
42
|
+
writer = BRS::Stream::Writer.new output_socket
|
43
|
+
begin
|
44
|
+
bytes_written = writer.write_nonblock "sample string"
|
45
|
+
# handle "bytes_written"
|
46
|
+
rescue IO::WaitWritable
|
47
|
+
# handle wait
|
48
|
+
ensure
|
49
|
+
writer.close
|
50
|
+
end
|
51
|
+
|
52
|
+
reader = BRS::Stream::Reader.new input_socket
|
53
|
+
begin
|
54
|
+
puts reader.read_nonblock(512)
|
55
|
+
rescue IO::WaitReadable
|
56
|
+
# handle wait
|
57
|
+
rescue ::EOFError
|
58
|
+
# handle eof
|
59
|
+
ensure
|
60
|
+
reader.close
|
61
|
+
end
|
39
62
|
```
|
40
63
|
|
41
|
-
You can create and read `tar.br` archives with
|
64
|
+
You can create and read `tar.br` archives with [minitar](https://github.com/halostatue/minitar).
|
42
65
|
|
43
66
|
```ruby
|
44
67
|
require "brs"
|
@@ -60,76 +83,70 @@ BRS::Stream::Reader.open "file.tar.br" do |reader|
|
|
60
83
|
end
|
61
84
|
```
|
62
85
|
|
63
|
-
|
64
|
-
|
65
|
-
Each API supports several options:
|
66
|
-
|
67
|
-
```
|
68
|
-
:source_buffer_length
|
69
|
-
:destination_buffer_length
|
70
|
-
```
|
71
|
-
|
72
|
-
There are internal buffers for compressed and decompressed data.
|
73
|
-
For example you want to use 1 KB as source buffer length for compressor - please use 256 B as destination buffer length.
|
74
|
-
You want to use 256 B as source buffer length for decompressor - please use 1 KB as destination buffer length.
|
75
|
-
|
76
|
-
Values: 0 - infinity, default value: 0.
|
77
|
-
0 means automatic buffer length selection.
|
78
|
-
|
79
|
-
```
|
80
|
-
:mode
|
81
|
-
```
|
82
|
-
|
83
|
-
Values: `BRS::Option::MODES`, default value: `:generic`.
|
86
|
+
You can also use `Content-Encoding: br` with [sinatra](http://sinatrarb.com):
|
84
87
|
|
85
|
-
```
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
Values: `BRS::Option::MIN_QUALITY` - `BRS::Option::MAX_QUALITY`, default value: `BRS::Option::MAX_QUALITY`.
|
88
|
+
```ruby
|
89
|
+
require "brs"
|
90
|
+
require "sinatra"
|
90
91
|
|
91
|
-
|
92
|
-
|
92
|
+
get "/" do
|
93
|
+
headers["Content-Encoding"] = "br"
|
94
|
+
BRS::String.compress "sample string"
|
95
|
+
end
|
93
96
|
```
|
94
97
|
|
95
|
-
|
98
|
+
All functionality (including streaming) can be used inside multiple threads with [parallel](https://github.com/grosser/parallel).
|
99
|
+
This code will provide heavy load for your CPU.
|
96
100
|
|
97
|
-
```
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
Values: `BRS::Option::MIN_LGBLOCK` - `BRS::Option::MAX_LGBLOCK`, default value: none.
|
101
|
+
```ruby
|
102
|
+
require "brs"
|
103
|
+
require "parallel"
|
102
104
|
|
103
|
-
|
104
|
-
|
105
|
+
Parallel.each large_datas do |large_data|
|
106
|
+
BRS::String.compress large_data
|
107
|
+
end
|
105
108
|
```
|
106
109
|
|
107
|
-
|
110
|
+
## Options
|
108
111
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
+
| Option | Values | Default | Description |
|
113
|
+
|------------------------------------|------------|------------|-------------|
|
114
|
+
| `source_buffer_length` | 0 - inf | 0 (auto) | internal buffer length for source data |
|
115
|
+
| `destination_buffer_length` | 0 - inf | 0 (auto) | internal buffer length for description data |
|
116
|
+
| `gvl` | true/false | false | enables global VM lock where possible |
|
117
|
+
| `mode` | `MODES` | `:generic` | compressor mode |
|
118
|
+
| `quality` | 0 - 11 | 11 | compression level |
|
119
|
+
| `lgwin` | 10 - 24 | 22 | compressor window size |
|
120
|
+
| `lgblock` | 16 - 24 | nil (auto) | compressor input block size |
|
121
|
+
| `disable_literal_context_modeling` | true/false | false | disables literal context modeling format |
|
122
|
+
| `disable_ring_buffer_reallocation` | true/false | false | disables ring buffer reallocation |
|
123
|
+
| `size_hint` | 0 - inf | 0 (auto) | size of input (if known) |
|
124
|
+
| `large_window` | true/false | false | enables large window |
|
112
125
|
|
113
|
-
|
126
|
+
There are internal buffers for compressed and decompressed data.
|
127
|
+
For example you want to use 1 KB as `source_buffer_length` for compressor - please use 256 B as `destination_buffer_length`.
|
128
|
+
You want to use 256 B as `source_buffer_length` for decompressor - please use 1 KB as `destination_buffer_length`.
|
114
129
|
|
115
|
-
|
116
|
-
|
117
|
-
|
130
|
+
`gvl` is disabled by default, this mode allows running multiple compressors/decompressors in different threads simultaneously.
|
131
|
+
Please consider enabling `gvl` if you don't want to launch processors in separate threads.
|
132
|
+
If `gvl` is enabled ruby won't waste time on acquiring/releasing VM lock.
|
118
133
|
|
119
|
-
Values: 0 - infinity, default value: 0.
|
120
|
-
It is reasonable to provide size of input (if known) for streaming api.
|
121
134
|
`String` and `File` will set `:size_hint` automaticaly.
|
122
135
|
|
123
|
-
|
124
|
-
:large_window
|
125
|
-
```
|
126
|
-
|
127
|
-
Values: true/false, default value: false.
|
136
|
+
You can also read brotli docs for more info about options.
|
128
137
|
|
129
|
-
|
138
|
+
| Option | Related constants |
|
139
|
+
|-----------|-------------------|
|
140
|
+
| `mode` | `BRS::Option::MODES` = `%i[text font generic]` |
|
141
|
+
| `quality` | `BRS::Option::MIN_QUALITY` = 0, `BRS::Option::MAX_QUALITY` = 11 |
|
142
|
+
| `lgwin` | `BRS::Option::MIN_LGWIN` = 10, `BRS::Option::MAX_LGWIN` = 24 |
|
143
|
+
| `lgblock` | `BRS::Option::MIN_LGBLOCK` = 16, `BRS::Option::MAX_LGBLOCK` = 24 |
|
130
144
|
|
131
145
|
Possible compressor options:
|
132
146
|
```
|
147
|
+
:source_buffer_length
|
148
|
+
:destination_buffer_length
|
149
|
+
:gvl
|
133
150
|
:mode
|
134
151
|
:quality
|
135
152
|
:lgwin
|
@@ -141,6 +158,9 @@ Possible compressor options:
|
|
141
158
|
|
142
159
|
Possible decompressor options:
|
143
160
|
```
|
161
|
+
:source_buffer_length
|
162
|
+
:destination_buffer_length
|
163
|
+
:gvl
|
144
164
|
:disable_ring_buffer_reallocation
|
145
165
|
:large_window
|
146
166
|
```
|
@@ -154,18 +174,6 @@ data = BRS::String.compress "sample string", :quality => 5
|
|
154
174
|
puts BRS::String.decompress(data, :disable_ring_buffer_reallocation => true)
|
155
175
|
```
|
156
176
|
|
157
|
-
HTTP encoding (`Content-Encoding: br`) using default options:
|
158
|
-
|
159
|
-
```ruby
|
160
|
-
require "brs"
|
161
|
-
require "sinatra"
|
162
|
-
|
163
|
-
get "/" do
|
164
|
-
headers["Content-Encoding"] = "br"
|
165
|
-
BRS::String.compress "sample string"
|
166
|
-
end
|
167
|
-
```
|
168
|
-
|
169
177
|
## String
|
170
178
|
|
171
179
|
String maintains destination buffer only, so it accepts `destination_buffer_length` option only.
|
@@ -190,7 +198,7 @@ File maintains both source and destination buffers, it accepts both `source_buff
|
|
190
198
|
|
191
199
|
## Stream::Writer
|
192
200
|
|
193
|
-
Its behaviour is similar to builtin [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib
|
201
|
+
Its behaviour is similar to builtin [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipWriter.html).
|
194
202
|
|
195
203
|
Writer maintains destination buffer only, so it accepts `destination_buffer_length` option only.
|
196
204
|
|
@@ -228,7 +236,7 @@ Set another encodings, `nil` is just for compatibility with `IO`.
|
|
228
236
|
#tell
|
229
237
|
```
|
230
238
|
|
231
|
-
See [`IO`](https://ruby-doc.org/core
|
239
|
+
See [`IO`](https://ruby-doc.org/core/IO.html) docs.
|
232
240
|
|
233
241
|
```
|
234
242
|
#write(*objects)
|
@@ -238,7 +246,7 @@ See [`IO`](https://ruby-doc.org/core-2.7.0/IO.html) docs.
|
|
238
246
|
#closed?
|
239
247
|
```
|
240
248
|
|
241
|
-
See [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib
|
249
|
+
See [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipWriter.html) docs.
|
242
250
|
|
243
251
|
```
|
244
252
|
#write_nonblock(object, *options)
|
@@ -252,6 +260,9 @@ Special asynchronous methods missing in `Zlib::GzipWriter`.
|
|
252
260
|
So it is possible to have asynchronous variants for these synchronous methods.
|
253
261
|
Behaviour is the same as `IO#write_nonblock` method.
|
254
262
|
|
263
|
+
All nonblock operations for file will raise `EBADF` error on Windows.
|
264
|
+
Setting file into nonblocking mode is [not available on Windows](https://github.com/ruby/ruby/blob/master/win32/win32.c#L4388).
|
265
|
+
|
255
266
|
```
|
256
267
|
#<<(object)
|
257
268
|
#print(*objects)
|
@@ -260,11 +271,11 @@ Behaviour is the same as `IO#write_nonblock` method.
|
|
260
271
|
#puts(*objects)
|
261
272
|
```
|
262
273
|
|
263
|
-
Typical helpers, see [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib
|
274
|
+
Typical helpers, see [`Zlib::GzipWriter`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipWriter.html) docs.
|
264
275
|
|
265
276
|
## Stream::Reader
|
266
277
|
|
267
|
-
Its behaviour is similar to builtin [`Zlib::GzipReader`](https://ruby-doc.org/stdlib
|
278
|
+
Its behaviour is similar to builtin [`Zlib::GzipReader`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipReader.html).
|
268
279
|
|
269
280
|
Reader maintains both source and destination buffers, it accepts both `source_buffer_length` and `destination_buffer_length` options.
|
270
281
|
|
@@ -299,7 +310,7 @@ Set another encodings.
|
|
299
310
|
#tell
|
300
311
|
```
|
301
312
|
|
302
|
-
See [`IO`](https://ruby-doc.org/core
|
313
|
+
See [`IO`](https://ruby-doc.org/core/IO.html) docs.
|
303
314
|
|
304
315
|
```
|
305
316
|
#read(bytes_to_read = nil, out_buffer = nil)
|
@@ -309,14 +320,14 @@ See [`IO`](https://ruby-doc.org/core-2.7.0/IO.html) docs.
|
|
309
320
|
#closed?
|
310
321
|
```
|
311
322
|
|
312
|
-
See [`Zlib::GzipReader`](https://ruby-doc.org/stdlib
|
323
|
+
See [`Zlib::GzipReader`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipReader.html) docs.
|
313
324
|
|
314
325
|
```
|
315
326
|
#readpartial(bytes_to_read = nil, out_buffer = nil)
|
316
327
|
#read_nonblock(bytes_to_read, out_buffer = nil, *options)
|
317
328
|
```
|
318
329
|
|
319
|
-
See [`IO`](https://ruby-doc.org/core
|
330
|
+
See [`IO`](https://ruby-doc.org/core/IO.html) docs.
|
320
331
|
|
321
332
|
```
|
322
333
|
#getbyte
|
@@ -339,16 +350,26 @@ See [`IO`](https://ruby-doc.org/core-2.7.0/IO.html) docs.
|
|
339
350
|
#ungetline(line)
|
340
351
|
```
|
341
352
|
|
342
|
-
Typical helpers, see [`Zlib::GzipReader`](https://ruby-doc.org/stdlib
|
353
|
+
Typical helpers, see [`Zlib::GzipReader`](https://ruby-doc.org/stdlib/libdoc/zlib/rdoc/Zlib/GzipReader.html) docs.
|
354
|
+
|
355
|
+
## Thread safety
|
356
|
+
|
357
|
+
`:gvl` option is disabled by default, you can use bindings effectively in multiple threads.
|
358
|
+
Please be careful: bindings are not thread safe.
|
359
|
+
You should lock all shared data between threads.
|
360
|
+
|
361
|
+
For example: you should not use same compressor/decompressor inside multiple threads.
|
362
|
+
Please verify that you are using each processor inside single thread at the same time.
|
363
|
+
|
364
|
+
## Operating systems
|
365
|
+
|
366
|
+
GNU/Linux, FreeBSD, OSX, Windows (MinGW).
|
343
367
|
|
344
368
|
## CI
|
345
369
|
|
346
|
-
See universal test script [scripts/ci_test.sh](scripts/ci_test.sh) for CI.
|
347
370
|
Please visit [scripts/test-images](scripts/test-images).
|
348
|
-
|
349
|
-
|
350
|
-
Cirrus CI uses `x86_64-pc-linux-gnu` image, Circle CI - `x86_64-gentoo-linux-musl` image.
|
371
|
+
See universal test script [scripts/ci_test.sh](scripts/ci_test.sh) for CI.
|
351
372
|
|
352
373
|
## License
|
353
374
|
|
354
|
-
MIT license, see LICENSE and AUTHORS.
|
375
|
+
MIT license, see [LICENSE](LICENSE) and [AUTHORS](AUTHORS).
|
data/ext/brs_ext/buffer.c
CHANGED
@@ -10,10 +10,11 @@ VALUE brs_ext_create_string_buffer(VALUE length)
|
|
10
10
|
return rb_str_new(NULL, NUM2SIZET(length));
|
11
11
|
}
|
12
12
|
|
13
|
-
VALUE brs_ext_resize_string_buffer(VALUE
|
13
|
+
VALUE brs_ext_resize_string_buffer(VALUE buffer_args)
|
14
14
|
{
|
15
|
-
VALUE buffer = rb_ary_entry(
|
16
|
-
VALUE length = rb_ary_entry(
|
15
|
+
VALUE buffer = rb_ary_entry(buffer_args, 0);
|
16
|
+
VALUE length = rb_ary_entry(buffer_args, 1);
|
17
|
+
|
17
18
|
return rb_str_resize(buffer, NUM2SIZET(length));
|
18
19
|
}
|
19
20
|
|
@@ -21,8 +22,21 @@ void brs_ext_buffer_exports(VALUE root_module)
|
|
21
22
|
{
|
22
23
|
VALUE module = rb_define_module_under(root_module, "Buffer");
|
23
24
|
|
24
|
-
rb_define_const(
|
25
|
-
|
26
|
-
|
27
|
-
rb_define_const(
|
25
|
+
rb_define_const(
|
26
|
+
module, "DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR", SIZET2NUM(BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR));
|
27
|
+
|
28
|
+
rb_define_const(
|
29
|
+
module,
|
30
|
+
"DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR",
|
31
|
+
SIZET2NUM(BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR));
|
32
|
+
|
33
|
+
rb_define_const(
|
34
|
+
module,
|
35
|
+
"DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR",
|
36
|
+
SIZET2NUM(BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR));
|
37
|
+
|
38
|
+
rb_define_const(
|
39
|
+
module,
|
40
|
+
"DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR",
|
41
|
+
SIZET2NUM(BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR));
|
28
42
|
}
|
data/ext/brs_ext/buffer.h
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
|
7
7
|
#include "ruby.h"
|
8
8
|
|
9
|
-
#define BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR
|
9
|
+
#define BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR (1 << 18) // 256 KB
|
10
10
|
#define BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR (1 << 16) // 64 KB
|
11
11
|
|
12
|
-
#define BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR
|
12
|
+
#define BRS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR (1 << 16) // 64 KB
|
13
13
|
#define BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR (1 << 18) // 256 KB
|
14
14
|
|
15
15
|
VALUE brs_ext_create_string_buffer(VALUE length);
|
@@ -17,12 +17,12 @@ VALUE brs_ext_create_string_buffer(VALUE length);
|
|
17
17
|
#define BRS_EXT_CREATE_STRING_BUFFER(buffer, length, exception) \
|
18
18
|
VALUE buffer = rb_protect(brs_ext_create_string_buffer, SIZET2NUM(length), &exception);
|
19
19
|
|
20
|
-
VALUE brs_ext_resize_string_buffer(VALUE
|
20
|
+
VALUE brs_ext_resize_string_buffer(VALUE buffer_args);
|
21
21
|
|
22
|
-
#define BRS_EXT_RESIZE_STRING_BUFFER(buffer, length, exception)
|
23
|
-
VALUE
|
24
|
-
buffer
|
25
|
-
RB_GC_GUARD(
|
22
|
+
#define BRS_EXT_RESIZE_STRING_BUFFER(buffer, length, exception) \
|
23
|
+
VALUE buffer_args = rb_ary_new_from_args(2, buffer, SIZET2NUM(length)); \
|
24
|
+
buffer = rb_protect(brs_ext_resize_string_buffer, buffer_args, &exception); \
|
25
|
+
RB_GC_GUARD(buffer_args);
|
26
26
|
|
27
27
|
void brs_ext_buffer_exports(VALUE root_module);
|
28
28
|
|
data/ext/brs_ext/error.c
CHANGED
@@ -39,7 +39,7 @@ brs_ext_result_t brs_ext_get_decompressor_error(BrotliDecoderErrorCode error_cod
|
|
39
39
|
}
|
40
40
|
}
|
41
41
|
|
42
|
-
static inline NORETURN(void
|
42
|
+
static inline NORETURN(void raise_error(const char* name, const char* description))
|
43
43
|
{
|
44
44
|
VALUE module = rb_define_module(BRS_EXT_MODULE_NAME);
|
45
45
|
VALUE error = rb_const_get(module, rb_intern(name));
|
@@ -50,28 +50,28 @@ void brs_ext_raise_error(brs_ext_result_t ext_result)
|
|
50
50
|
{
|
51
51
|
switch (ext_result) {
|
52
52
|
case BRS_EXT_ERROR_ALLOCATE_FAILED:
|
53
|
-
|
53
|
+
raise_error("AllocateError", "allocate error");
|
54
54
|
case BRS_EXT_ERROR_VALIDATE_FAILED:
|
55
|
-
|
55
|
+
raise_error("ValidateError", "validate error");
|
56
56
|
|
57
57
|
case BRS_EXT_ERROR_USED_AFTER_CLOSE:
|
58
|
-
|
58
|
+
raise_error("UsedAfterCloseError", "used after closed");
|
59
59
|
case BRS_EXT_ERROR_NOT_ENOUGH_SOURCE_BUFFER:
|
60
|
-
|
60
|
+
raise_error("NotEnoughSourceBufferError", "not enough source buffer");
|
61
61
|
case BRS_EXT_ERROR_NOT_ENOUGH_DESTINATION_BUFFER:
|
62
|
-
|
62
|
+
raise_error("NotEnoughDestinationBufferError", "not enough destination buffer");
|
63
63
|
case BRS_EXT_ERROR_DECOMPRESSOR_CORRUPTED_SOURCE:
|
64
|
-
|
64
|
+
raise_error("DecompressorCorruptedSourceError", "decompressor received corrupted source");
|
65
65
|
|
66
66
|
case BRS_EXT_ERROR_ACCESS_IO:
|
67
|
-
|
67
|
+
raise_error("AccessIOError", "failed to access IO");
|
68
68
|
case BRS_EXT_ERROR_READ_IO:
|
69
|
-
|
69
|
+
raise_error("ReadIOError", "failed to read IO");
|
70
70
|
case BRS_EXT_ERROR_WRITE_IO:
|
71
|
-
|
71
|
+
raise_error("WriteIOError", "failed to write IO");
|
72
72
|
|
73
73
|
default:
|
74
74
|
// BRS_EXT_ERROR_UNEXPECTED
|
75
|
-
|
75
|
+
raise_error("UnexpectedError", "unexpected error");
|
76
76
|
}
|
77
77
|
}
|