@@ -87,24 +87,24 @@ static VALUE rb_compress_using_dict(int argc, VALUE *argv, VALUE self)
87
87
88
88
static VALUE decompress_buffered (ZSTD_DCtx * dctx , const char * input_data , size_t input_size )
89
89
{
90
- VALUE output_string = rb_str_new (NULL , 0 );
91
- ZSTD_outBuffer output = { NULL , 0 , 0 };
92
-
93
90
ZSTD_inBuffer input = { input_data , input_size , 0 };
91
+ VALUE result = rb_str_new (0 , 0 );
92
+
94
93
while (input .pos < input .size ) {
94
+ ZSTD_outBuffer output = { NULL , 0 , 0 };
95
95
output .size += ZSTD_DStreamOutSize ();
96
- rb_str_resize ( output_string , output .size );
96
+ VALUE output_string = rb_str_new ( NULL , output .size );
97
97
output .dst = RSTRING_PTR (output_string );
98
98
99
99
size_t ret = zstd_stream_decompress (dctx , & output , & input , false);
100
100
if (ZSTD_isError (ret )) {
101
101
ZSTD_freeDCtx (dctx );
102
102
rb_raise (rb_eRuntimeError , "%s: %s" , "ZSTD_decompressStream failed" , ZSTD_getErrorName (ret ));
103
103
}
104
+ rb_str_cat (result , output .dst , output .pos );
104
105
}
105
- rb_str_resize (output_string , output .pos );
106
106
ZSTD_freeDCtx (dctx );
107
- return output_string ;
107
+ return result ;
108
108
}
109
109
110
110
static VALUE rb_decompress (int argc , VALUE * argv , VALUE self )
@@ -134,7 +134,7 @@ static VALUE rb_decompress(int argc, VALUE *argv, VALUE self)
134
134
VALUE output = rb_str_new (NULL , uncompressed_size );
135
135
char * output_data = RSTRING_PTR (output );
136
136
137
- size_t const decompress_size = zstd_decompress (dctx , output_data , uncompressed_size , input_data , input_size , false);
137
+ size_t const decompress_size = zstd_decompress (dctx , output_data , uncompressed_size , input_data , input_size , false);
138
138
if (ZSTD_isError (decompress_size )) {
139
139
rb_raise (rb_eRuntimeError , "%s: %s" , "decompress error" , ZSTD_getErrorName (decompress_size ));
140
140
}
0 commit comments