zstd-ruby 1.5.4.0 → 1.5.4.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 +9 -1
- data/ext/zstdruby/extconf.rb +1 -1
- data/ext/zstdruby/main.c +2 -0
- data/ext/zstdruby/skippable_frame.c +63 -0
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20843652df6bf499ef8cbf75a75e9b9c2bf1a445d7dc1ae9fc48faa07e8af768
|
4
|
+
data.tar.gz: 52939d134568bf22f7633a28624ebb1574b72cc33711759c62da8a7971828a57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4eee9c6badff4d9cbd516b94ec5ec488bff58d25a59ec9a6de9e7aa5afcb117b8eb6e69bc319e9dd8a8f69b8c5dbd1504e0001cf7e312b27fad8c0ed63bdcf64
|
7
|
+
data.tar.gz: 518fffdbde3535b6e104d0733529db99db98304b99f3b0cc5d27edfabfe3c5922d05d0e0e4cb7cf1bc051dfb4651a886921b3faf5a61b24dec2a99f472150551
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ See https://github.com/facebook/zstd
|
|
10
10
|
Fork from https://github.com/jarredholman/ruby-zstd.
|
11
11
|
|
12
12
|
## Zstd version
|
13
|
-
v1.5.
|
13
|
+
v1.5.4 (https://github.com/facebook/zstd/tree/v1.5.4)
|
14
14
|
|
15
15
|
## Installation
|
16
16
|
|
@@ -87,6 +87,14 @@ result << stream.decompress(cstr[0, 10])
|
|
87
87
|
result << stream.decompress(cstr[10..-1])
|
88
88
|
```
|
89
89
|
|
90
|
+
### Skippable flame
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
compressed_data_with_skippable_frame = Zstd.write_skippable_frame(compressed_data, "sample data")
|
94
|
+
|
95
|
+
Zstd.read_skippable_frame(compressed_data_with_skippable_frame)
|
96
|
+
# => "sample data"
|
97
|
+
```
|
90
98
|
|
91
99
|
## JRuby
|
92
100
|
This gem does not support JRuby.
|
data/ext/zstdruby/extconf.rb
CHANGED
data/ext/zstdruby/main.c
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include <common.h>
|
2
2
|
VALUE rb_mZstd;
|
3
3
|
void zstd_ruby_init(void);
|
4
|
+
void zstd_ruby_skippable_frame_init(void);
|
4
5
|
void zstd_ruby_streaming_compress_init(void);
|
5
6
|
void zstd_ruby_streaming_decompress_init(void);
|
6
7
|
|
@@ -13,6 +14,7 @@ Init_zstdruby(void)
|
|
13
14
|
|
14
15
|
rb_mZstd = rb_define_module("Zstd");
|
15
16
|
zstd_ruby_init();
|
17
|
+
zstd_ruby_skippable_frame_init();
|
16
18
|
zstd_ruby_streaming_compress_init();
|
17
19
|
zstd_ruby_streaming_decompress_init();
|
18
20
|
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#include <common.h>
|
2
|
+
|
3
|
+
extern VALUE rb_mZstd;
|
4
|
+
|
5
|
+
static VALUE rb_write_skippable_frame(int argc, VALUE *argv, VALUE self)
|
6
|
+
{
|
7
|
+
VALUE input_value;
|
8
|
+
VALUE skip_value;
|
9
|
+
VALUE kwargs;
|
10
|
+
rb_scan_args(argc, argv, "2:", &input_value, &skip_value, &kwargs);
|
11
|
+
|
12
|
+
ID kwargs_keys[1];
|
13
|
+
kwargs_keys[0] = rb_intern("magic_variant");
|
14
|
+
VALUE kwargs_values[1];
|
15
|
+
rb_get_kwargs(kwargs, kwargs_keys, 0, 1, kwargs_values);
|
16
|
+
unsigned magic_variant = (kwargs_values[0] != Qundef) ? (NUM2INT(kwargs_values[0])) : 0;
|
17
|
+
|
18
|
+
StringValue(input_value);
|
19
|
+
StringValue(skip_value);
|
20
|
+
char* input_data = RSTRING_PTR(input_value);
|
21
|
+
size_t input_size = RSTRING_LEN(input_value);
|
22
|
+
char* skip_data = RSTRING_PTR(skip_value);
|
23
|
+
size_t skip_size = RSTRING_LEN(skip_value);
|
24
|
+
|
25
|
+
size_t dst_size = input_size + ZSTD_SKIPPABLEHEADERSIZE + skip_size;
|
26
|
+
VALUE output = rb_str_new(input_data, dst_size);
|
27
|
+
char* output_data = RSTRING_PTR(output);
|
28
|
+
size_t output_size = ZSTD_writeSkippableFrame((void*)output_data, dst_size, (const void*)skip_data, skip_size, magic_variant);
|
29
|
+
if (ZSTD_isError(output_size)) {
|
30
|
+
rb_raise(rb_eRuntimeError, "%s: %s", "write skippable frame failed", ZSTD_getErrorName(output_size));
|
31
|
+
}
|
32
|
+
|
33
|
+
rb_str_resize(output, output_size);
|
34
|
+
return output;
|
35
|
+
}
|
36
|
+
|
37
|
+
static VALUE rb_read_skippable_frame(VALUE self, VALUE input_value)
|
38
|
+
{
|
39
|
+
char* input_data = RSTRING_PTR(input_value);
|
40
|
+
size_t input_size = RSTRING_LEN(input_value);
|
41
|
+
|
42
|
+
if (ZSTD_isSkippableFrame(input_data, input_size) == 0) {
|
43
|
+
return Qnil;
|
44
|
+
}
|
45
|
+
// ref https://github.com/facebook/zstd/blob/321490cd5b9863433b3d44816d04012874e5ecdb/tests/fuzzer.c#L2096
|
46
|
+
size_t const skipLen = 129 * 1024;
|
47
|
+
VALUE output = rb_str_new(NULL, skipLen);
|
48
|
+
char* output_data = RSTRING_PTR(output);
|
49
|
+
unsigned readMagic;
|
50
|
+
size_t output_size = ZSTD_readSkippableFrame((void*)output_data, skipLen, &readMagic, (const void*)input_data, input_size);
|
51
|
+
if (ZSTD_isError(output_size)) {
|
52
|
+
rb_raise(rb_eRuntimeError, "%s: %s", "read skippable frame failed", ZSTD_getErrorName(output_size));
|
53
|
+
}
|
54
|
+
rb_str_resize(output, output_size);
|
55
|
+
return output;
|
56
|
+
}
|
57
|
+
|
58
|
+
void
|
59
|
+
zstd_ruby_skippable_frame_init(void)
|
60
|
+
{
|
61
|
+
rb_define_module_function(rb_mZstd, "write_skippable_frame", rb_write_skippable_frame, -1);
|
62
|
+
rb_define_module_function(rb_mZstd, "read_skippable_frame", rb_read_skippable_frame, 1);
|
63
|
+
}
|
data/lib/zstd-ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zstd-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.4.
|
4
|
+
version: 1.5.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SpringMT
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- ext/zstdruby/libzstd/zstd.h
|
157
157
|
- ext/zstdruby/libzstd/zstd_errors.h
|
158
158
|
- ext/zstdruby/main.c
|
159
|
+
- ext/zstdruby/skippable_frame.c
|
159
160
|
- ext/zstdruby/streaming_compress.c
|
160
161
|
- ext/zstdruby/streaming_compress.h
|
161
162
|
- ext/zstdruby/streaming_decompress.c
|