@@ -6,7 +6,14 @@ static VALUE rb_write_skippable_frame(int argc, VALUE *argv, VALUE self)
6
6
{
7
7
VALUE input_value ;
8
8
VALUE skip_value ;
9
- rb_scan_args (argc , argv , "2" , & input_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 ;
10
17
11
18
StringValue (input_value );
12
19
StringValue (skip_value );
@@ -18,7 +25,7 @@ static VALUE rb_write_skippable_frame(int argc, VALUE *argv, VALUE self)
18
25
size_t dst_size = input_size + ZSTD_SKIPPABLEHEADERSIZE + skip_size ;
19
26
VALUE output = rb_str_new (input_data , dst_size );
20
27
char * output_data = RSTRING_PTR (output );
21
- size_t output_size = ZSTD_writeSkippableFrame ((void * )output_data , dst_size , (const void * )skip_data , skip_size , ( unsigned ) 0 );
28
+ size_t output_size = ZSTD_writeSkippableFrame ((void * )output_data , dst_size , (const void * )skip_data , skip_size , magic_variant );
22
29
if (ZSTD_isError (output_size )) {
23
30
rb_raise (rb_eRuntimeError , "%s: %s" , "write skippable frame failed" , ZSTD_getErrorName (output_size ));
24
31
}
@@ -39,7 +46,8 @@ static VALUE rb_read_skippable_frame(VALUE self, VALUE input_value)
39
46
size_t const skipLen = 129 * 1024 ;
40
47
VALUE output = rb_str_new (NULL , skipLen );
41
48
char * output_data = RSTRING_PTR (output );
42
- size_t output_size = ZSTD_readSkippableFrame ((void * )output_data , skipLen , (unsigned int * )0 , (const void * )input_data , input_size );
49
+ unsigned readMagic ;
50
+ size_t output_size = ZSTD_readSkippableFrame ((void * )output_data , skipLen , & readMagic , (const void * )input_data , input_size );
43
51
if (ZSTD_isError (output_size )) {
44
52
rb_raise (rb_eRuntimeError , "%s: %s" , "read skippable frame failed" , ZSTD_getErrorName (output_size ));
45
53
}
0 commit comments