ruby-brs 1.1.0 → 1.1.5

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.
@@ -2,7 +2,6 @@
2
2
  // Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  #include "brs_ext/buffer.h"
5
- #include "brs_ext/common.h"
6
5
  #include "brs_ext/io.h"
7
6
  #include "brs_ext/option.h"
8
7
  #include "brs_ext/stream/compressor.h"
@@ -5,10 +5,7 @@
5
5
 
6
6
  #include <brotli/decode.h>
7
7
  #include <brotli/encode.h>
8
- #include <stdbool.h>
9
- #include <stdlib.h>
10
8
 
11
- #include "brs_ext/common.h"
12
9
  #include "brs_ext/error.h"
13
10
  #include "ruby.h"
14
11
 
@@ -7,7 +7,6 @@
7
7
  #include <brotli/decode.h>
8
8
  #include <brotli/encode.h>
9
9
  #include <stdbool.h>
10
- #include <stdint.h>
11
10
  #include <stdlib.h>
12
11
 
13
12
  #include "brs_ext/common.h"
@@ -22,8 +21,8 @@ enum {
22
21
  BRS_EXT_OPTION_TYPE_MODE
23
22
  };
24
23
 
25
- typedef uint_fast8_t brs_ext_option_type_t;
26
- typedef uint32_t brs_ext_option_value_t;
24
+ typedef brs_ext_byte_fast_t brs_ext_option_type_t;
25
+ typedef uint32_t brs_ext_option_value_t;
27
26
 
28
27
  typedef struct {
29
28
  bool has_value;
@@ -5,11 +5,8 @@
5
5
 
6
6
  #include <brotli/encode.h>
7
7
  #include <brotli/types.h>
8
- #include <stdint.h>
9
- #include <stdlib.h>
10
8
 
11
9
  #include "brs_ext/buffer.h"
12
- #include "brs_ext/common.h"
13
10
  #include "brs_ext/error.h"
14
11
  #include "brs_ext/option.h"
15
12
  #include "ruby.h"
@@ -21,7 +18,7 @@ static void free_compressor(brs_ext_compressor_t* compressor_ptr)
21
18
  BrotliEncoderDestroyInstance(state_ptr);
22
19
  }
23
20
 
24
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
21
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
25
22
  if (destination_buffer != NULL) {
26
23
  free(destination_buffer);
27
24
  }
@@ -70,7 +67,7 @@ VALUE brs_ext_initialize_compressor(VALUE self, VALUE options)
70
67
  destination_buffer_length = BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR;
71
68
  }
72
69
 
73
- uint8_t* destination_buffer = malloc(destination_buffer_length);
70
+ brs_ext_byte_t* destination_buffer = malloc(destination_buffer_length);
74
71
  if (destination_buffer == NULL) {
75
72
  BrotliEncoderDestroyInstance(state_ptr);
76
73
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -90,13 +87,13 @@ VALUE brs_ext_initialize_compressor(VALUE self, VALUE options)
90
87
  brs_ext_raise_error(BRS_EXT_ERROR_USED_AFTER_CLOSE); \
91
88
  }
92
89
 
93
- #define GET_SOURCE_DATA(source_value) \
94
- Check_Type(source_value, T_STRING); \
95
- \
96
- const char* source = RSTRING_PTR(source_value); \
97
- size_t source_length = RSTRING_LEN(source_value); \
98
- const uint8_t* remaining_source = (const uint8_t*)source; \
99
- size_t remaining_source_length = source_length;
90
+ #define GET_SOURCE_DATA(source_value) \
91
+ Check_Type(source_value, T_STRING); \
92
+ \
93
+ const char* source = RSTRING_PTR(source_value); \
94
+ size_t source_length = RSTRING_LEN(source_value); \
95
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source; \
96
+ size_t remaining_source_length = source_length;
100
97
 
101
98
  VALUE brs_ext_compress(VALUE self, VALUE source_value)
102
99
  {
@@ -130,8 +127,8 @@ VALUE brs_ext_flush_compressor(VALUE self)
130
127
 
131
128
  BrotliEncoderState* state_ptr = compressor_ptr->state_ptr;
132
129
 
133
- const uint8_t* remaining_source = NULL;
134
- size_t remaining_source_length = 0;
130
+ const brs_ext_byte_t* remaining_source = NULL;
131
+ size_t remaining_source_length = 0;
135
132
 
136
133
  BROTLI_BOOL result = BrotliEncoderCompressStream(
137
134
  state_ptr,
@@ -156,8 +153,8 @@ VALUE brs_ext_finish_compressor(VALUE self)
156
153
 
157
154
  BrotliEncoderState* state_ptr = compressor_ptr->state_ptr;
158
155
 
159
- const uint8_t* remaining_source = NULL;
160
- size_t remaining_source_length = 0;
156
+ const brs_ext_byte_t* remaining_source = NULL;
157
+ size_t remaining_source_length = 0;
161
158
 
162
159
  BROTLI_BOOL result = BrotliEncoderCompressStream(
163
160
  state_ptr,
@@ -180,9 +177,9 @@ VALUE brs_ext_compressor_read_result(VALUE self)
180
177
  GET_COMPRESSOR(self);
181
178
  DO_NOT_USE_AFTER_CLOSE(compressor_ptr);
182
179
 
183
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
184
- size_t destination_buffer_length = compressor_ptr->destination_buffer_length;
185
- size_t remaining_destination_buffer_length = compressor_ptr->remaining_destination_buffer_length;
180
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
181
+ size_t destination_buffer_length = compressor_ptr->destination_buffer_length;
182
+ size_t remaining_destination_buffer_length = compressor_ptr->remaining_destination_buffer_length;
186
183
 
187
184
  const char* result = (const char*)destination_buffer;
188
185
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
@@ -207,7 +204,7 @@ VALUE brs_ext_compressor_close(VALUE self)
207
204
  compressor_ptr->state_ptr = NULL;
208
205
  }
209
206
 
210
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
207
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
211
208
  if (destination_buffer != NULL) {
212
209
  free(destination_buffer);
213
210
 
@@ -5,16 +5,16 @@
5
5
  #define BRS_EXT_STREAM_COMPRESSOR_H
6
6
 
7
7
  #include <brotli/encode.h>
8
- #include <stdint.h>
9
8
  #include <stdlib.h>
10
9
 
10
+ #include "brs_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
13
  typedef struct {
14
14
  BrotliEncoderState* state_ptr;
15
- uint8_t* destination_buffer;
15
+ brs_ext_byte_t* destination_buffer;
16
16
  size_t destination_buffer_length;
17
- uint8_t* remaining_destination_buffer;
17
+ brs_ext_byte_t* remaining_destination_buffer;
18
18
  size_t remaining_destination_buffer_length;
19
19
  } brs_ext_compressor_t;
20
20
 
@@ -4,11 +4,8 @@
4
4
  #include "brs_ext/stream/decompressor.h"
5
5
 
6
6
  #include <brotli/decode.h>
7
- #include <stdint.h>
8
- #include <stdlib.h>
9
7
 
10
8
  #include "brs_ext/buffer.h"
11
- #include "brs_ext/common.h"
12
9
  #include "brs_ext/error.h"
13
10
  #include "brs_ext/option.h"
14
11
  #include "ruby.h"
@@ -20,7 +17,7 @@ static void free_decompressor(brs_ext_decompressor_t* decompressor_ptr)
20
17
  BrotliDecoderDestroyInstance(state_ptr);
21
18
  }
22
19
 
23
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
20
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
24
21
  if (destination_buffer != NULL) {
25
22
  free(destination_buffer);
26
23
  }
@@ -69,7 +66,7 @@ VALUE brs_ext_initialize_decompressor(VALUE self, VALUE options)
69
66
  destination_buffer_length = BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR;
70
67
  }
71
68
 
72
- uint8_t* destination_buffer = malloc(destination_buffer_length);
69
+ brs_ext_byte_t* destination_buffer = malloc(destination_buffer_length);
73
70
  if (destination_buffer == NULL) {
74
71
  BrotliDecoderDestroyInstance(state_ptr);
75
72
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -89,13 +86,13 @@ VALUE brs_ext_initialize_decompressor(VALUE self, VALUE options)
89
86
  brs_ext_raise_error(BRS_EXT_ERROR_USED_AFTER_CLOSE); \
90
87
  }
91
88
 
92
- #define GET_SOURCE_DATA(source_value) \
93
- Check_Type(source_value, T_STRING); \
94
- \
95
- const char* source = RSTRING_PTR(source_value); \
96
- size_t source_length = RSTRING_LEN(source_value); \
97
- const uint8_t* remaining_source = (const uint8_t*)source; \
98
- size_t remaining_source_length = source_length;
89
+ #define GET_SOURCE_DATA(source_value) \
90
+ Check_Type(source_value, T_STRING); \
91
+ \
92
+ const char* source = RSTRING_PTR(source_value); \
93
+ size_t source_length = RSTRING_LEN(source_value); \
94
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source; \
95
+ size_t remaining_source_length = source_length;
99
96
 
100
97
  VALUE brs_ext_decompress(VALUE self, VALUE source_value)
101
98
  {
@@ -128,9 +125,9 @@ VALUE brs_ext_decompressor_read_result(VALUE self)
128
125
  GET_DECOMPRESSOR(self);
129
126
  DO_NOT_USE_AFTER_CLOSE(decompressor_ptr);
130
127
 
131
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
132
- size_t destination_buffer_length = decompressor_ptr->destination_buffer_length;
133
- size_t remaining_destination_buffer_length = decompressor_ptr->remaining_destination_buffer_length;
128
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
129
+ size_t destination_buffer_length = decompressor_ptr->destination_buffer_length;
130
+ size_t remaining_destination_buffer_length = decompressor_ptr->remaining_destination_buffer_length;
134
131
 
135
132
  const char* result = (const char*)destination_buffer;
136
133
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
@@ -155,7 +152,7 @@ VALUE brs_ext_decompressor_close(VALUE self)
155
152
  decompressor_ptr->state_ptr = NULL;
156
153
  }
157
154
 
158
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
155
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
159
156
  if (destination_buffer != NULL) {
160
157
  free(destination_buffer);
161
158
 
@@ -5,16 +5,16 @@
5
5
  #define BRS_EXT_STREAM_DECOMPRESSOR_H
6
6
 
7
7
  #include <brotli/decode.h>
8
- #include <stdint.h>
9
8
  #include <stdlib.h>
10
9
 
10
+ #include "brs_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
13
  typedef struct {
14
14
  BrotliDecoderState* state_ptr;
15
- uint8_t* destination_buffer;
15
+ brs_ext_byte_t* destination_buffer;
16
16
  size_t destination_buffer_length;
17
- uint8_t* remaining_destination_buffer;
17
+ brs_ext_byte_t* remaining_destination_buffer;
18
18
  size_t remaining_destination_buffer_length;
19
19
  } brs_ext_decompressor_t;
20
20
 
@@ -6,11 +6,9 @@
6
6
  #include <brotli/decode.h>
7
7
  #include <brotli/encode.h>
8
8
  #include <brotli/types.h>
9
- #include <stdint.h>
10
9
  #include <stdlib.h>
11
10
 
12
11
  #include "brs_ext/buffer.h"
13
- #include "brs_ext/common.h"
14
12
  #include "brs_ext/error.h"
15
13
  #include "brs_ext/macro.h"
16
14
  #include "brs_ext/option.h"
@@ -57,15 +55,15 @@ static inline brs_ext_result_t compress(
57
55
  BROTLI_BOOL result;
58
56
  brs_ext_result_t ext_result;
59
57
 
60
- const uint8_t* remaining_source = (const uint8_t*)source;
61
- size_t remaining_source_length = source_length;
58
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source;
59
+ size_t remaining_source_length = source_length;
62
60
 
63
61
  size_t destination_length = 0;
64
62
  size_t remaining_destination_buffer_length = destination_buffer_length;
65
63
 
66
64
  while (true) {
67
- uint8_t* remaining_destination_buffer = (uint8_t*)RSTRING_PTR(destination_value) + destination_length;
68
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
65
+ brs_ext_byte_t* remaining_destination_buffer = (brs_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length;
66
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
69
67
 
70
68
  result = BrotliEncoderCompressStream(
71
69
  state_ptr,
@@ -159,15 +157,15 @@ static inline brs_ext_result_t decompress(
159
157
  BrotliDecoderResult result;
160
158
  brs_ext_result_t ext_result;
161
159
 
162
- const uint8_t* remaining_source = (const uint8_t*)source;
163
- size_t remaining_source_length = source_length;
160
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source;
161
+ size_t remaining_source_length = source_length;
164
162
 
165
163
  size_t destination_length = 0;
166
164
  size_t remaining_destination_buffer_length = destination_buffer_length;
167
165
 
168
166
  while (true) {
169
- uint8_t* remaining_destination_buffer = (uint8_t*)RSTRING_PTR(destination_value) + destination_length;
170
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
167
+ brs_ext_byte_t* remaining_destination_buffer = (brs_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length;
168
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
171
169
 
172
170
  result = BrotliDecoderDecompressStream(
173
171
  state_ptr,
@@ -61,7 +61,20 @@ $srcs = %w[
61
61
  .map { |name| "src/#{extension_name}/#{name}.c" }
62
62
  .freeze
63
63
 
64
+ # Removing library duplicates.
65
+ $libs = $libs.split(%r{\s})
66
+ .reject(&:empty?)
67
+ .sort
68
+ .uniq
69
+ .join " "
70
+
71
+ if ENV["CI"] || ENV["COVERAGE"]
72
+ $CFLAGS << " --coverage"
73
+ $LDFLAGS << " --coverage"
74
+ end
75
+
64
76
  $CFLAGS << " -Wno-declaration-after-statement"
77
+
65
78
  $VPATH << "$(srcdir)/#{extension_name}:$(srcdir)/#{extension_name}/stream"
66
79
  # rubocop:enable Style/GlobalVars
67
80
 
@@ -22,6 +22,8 @@ module BRS
22
22
  open_files(source, destination) do |source_io, destination_io|
23
23
  BRS._native_compress_io source_io, destination_io, options
24
24
  end
25
+
26
+ nil
25
27
  end
26
28
 
27
29
  def self.decompress(source, destination, options = {})
@@ -33,6 +35,8 @@ module BRS
33
35
  open_files(source, destination) do |source_io, destination_io|
34
36
  BRS._native_decompress_io source_io, destination_io, options
35
37
  end
38
+
39
+ nil
36
40
  end
37
41
 
38
42
  private_class_method def self.open_files(source, destination, &_block)
@@ -17,23 +17,19 @@ module BRS
17
17
 
18
18
  include Delegates
19
19
 
20
- attr_reader :io
21
- attr_reader :stat
22
- attr_reader :external_encoding
23
- attr_reader :internal_encoding
24
- attr_reader :transcode_options
25
- attr_reader :pos
20
+ attr_reader :io, :stat, :external_encoding, :internal_encoding, :transcode_options, :pos
21
+
26
22
  alias tell pos
27
23
 
28
- def initialize(io, external_encoding: nil, internal_encoding: nil, transcode_options: {})
24
+ def initialize(io, options = {})
29
25
  @raw_stream = create_raw_stream
30
26
 
31
27
  Validation.validate_io io
32
28
  @io = io
33
29
 
34
- @stat = Stat.new @io.stat
30
+ @stat = Stat.new @io.stat if @io.respond_to? :stat
35
31
 
36
- set_encoding external_encoding, internal_encoding, transcode_options
32
+ set_encoding options[:external_encoding], options[:internal_encoding], options[:transcode_options]
37
33
  reset_buffer
38
34
  reset_io_advise
39
35
 
@@ -50,8 +46,8 @@ module BRS
50
46
 
51
47
  protected def reset_io_advise
52
48
  # Both compressor and decompressor need sequential io access.
53
- @io.advise :sequential
54
- rescue ::Errno::ESPIPE # rubocop:disable Lint/HandleExceptions
49
+ @io.advise :sequential if @io.respond_to? :advise
50
+ rescue ::Errno::ESPIPE
55
51
  # ok
56
52
  end
57
53
 
@@ -126,7 +122,8 @@ module BRS
126
122
  def rewind
127
123
  @raw_stream = create_raw_stream
128
124
 
129
- @io.rewind
125
+ @io.rewind if @io.respond_to? :rewind
126
+
130
127
  reset_buffer
131
128
  reset_io_advise
132
129
 
@@ -19,11 +19,13 @@ module BRS
19
19
 
20
20
  def flush(&writer)
21
21
  write_result(&writer)
22
+
23
+ nil
22
24
  end
23
25
 
24
- protected def flush_destination_buffer(&writer)
26
+ protected def more_destination(&writer)
25
27
  result_bytesize = write_result(&writer)
26
- raise NotEnoughDestinationError, "not enough destination" if result_bytesize == 0
28
+ raise NotEnoughDestinationError, "not enough destination" if result_bytesize.zero?
27
29
  end
28
30
 
29
31
  protected def write_result(&_writer)
@@ -44,6 +46,8 @@ module BRS
44
46
 
45
47
  @native_stream.close
46
48
  @is_closed = true
49
+
50
+ nil
47
51
  end
48
52
 
49
53
  def closed?
@@ -39,13 +39,15 @@ module BRS
39
39
 
40
40
  if need_more_destination
41
41
  source = source.byteslice bytes_written, source.bytesize - bytes_written
42
- flush_destination_buffer(&writer)
42
+ more_destination(&writer)
43
43
  next
44
44
  end
45
45
 
46
46
  unless bytes_written == source.bytesize
47
+ # :nocov:
47
48
  # Compressor write should eat all provided "source" without remainder.
48
49
  raise UnexpectedError, "unexpected error"
50
+ # :nocov:
49
51
  end
50
52
 
51
53
  break
@@ -63,7 +65,7 @@ module BRS
63
65
  need_more_destination = @native_stream.flush
64
66
 
65
67
  if need_more_destination
66
- flush_destination_buffer(&writer)
68
+ more_destination(&writer)
67
69
  next
68
70
  end
69
71
 
@@ -71,8 +73,6 @@ module BRS
71
73
  end
72
74
 
73
75
  super
74
-
75
- nil
76
76
  end
77
77
 
78
78
  def close(&writer)
@@ -84,7 +84,7 @@ module BRS
84
84
  need_more_destination = @native_stream.finish
85
85
 
86
86
  if need_more_destination
87
- flush_destination_buffer(&writer)
87
+ more_destination(&writer)
88
88
  next
89
89
  end
90
90
 
@@ -92,8 +92,6 @@ module BRS
92
92
  end
93
93
 
94
94
  super
95
-
96
- nil
97
95
  end
98
96
  end
99
97
  end