ext/extzstd_stream.c in extzstd-0.2 vs ext/extzstd_stream.c in extzstd-0.3
- old
+ new
@@ -143,11 +143,11 @@
RSTRING_GETMEM(predict, predictp, predictsize);
}
if (extzstd_params_p(params)) {
ZSTD_parameters *paramsp = extzstd_getparams(params);
- size_t s = ZSTD_initCStream_advanced(p->context, predictp, predictsize, *paramsp, 0);
+ size_t s = ZSTD_initCStream_advanced(p->context, predictp, predictsize, *paramsp, -1);
extzstd_check_error(s);
} else {
size_t s = ZSTD_initCStream_usingDict(p->context, predictp, predictsize, aux_num2int(params, 1));
extzstd_check_error(s);
}
@@ -164,11 +164,11 @@
/*
* ZSTDLIB_API size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
*/
struct encoder *p = encoder_context(self);
- rb_check_type(src, RUBY_T_STRING);
+ src = rb_String(src);
ZSTD_inBuffer input = { RSTRING_PTR(src), RSTRING_LEN(src), 0 };
while (input.pos < input.size) {
p->destbuf = aux_str_buf_recycle(p->destbuf, ZSTD_CStreamOutSize() * 2);
rb_str_set_len(p->destbuf, 0);
@@ -461,11 +461,11 @@
case 2:
{
if (NIL_P(argv[0])) {
*size = -1;
- if (argc == 1) {
+ if (argc == 1 || NIL_P(argv[1])) {
*buf = rb_str_buf_new(EXT_READ_GROWUP_SIZE);
} else {
rb_check_type(argv[1], RUBY_T_STRING);
*buf = aux_str_modify_expand(argv[1], EXT_READ_GROWUP_SIZE);
rb_str_set_len(*buf, 0);
@@ -477,11 +477,11 @@
rb_raise(rb_eArgError,
"``size'' is negative or too large (%"PRIdPTR")",
(intptr_t)*size);
}
- if (argc == 1) {
+ if (argc == 1 || NIL_P(argv[1])) {
*buf = rb_str_buf_new(*size);
} else {
rb_check_type(argv[1], RUBY_T_STRING);
*buf = aux_str_modify_expand(argv[1], *size);
rb_str_set_len(*buf, 0);
@@ -552,10 +552,17 @@
{
return (decoder_context(self)->reached_eof == 0 ? Qfalse : Qtrue);
}
static VALUE
+dec_close(VALUE self)
+{
+ decoder_context(self)->reached_eof = 1;
+ return Qnil;
+}
+
+static VALUE
dec_reset(VALUE self)
{
/*
* ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
*/
@@ -574,10 +581,17 @@
size_t s = ZSTD_sizeof_DStream(decoder_context(self)->context);
extzstd_check_error(s);
return SIZET2NUM(s);
}
+static VALUE
+dec_pos(VALUE self)
+{
+ decoder_context(self); /* check only */
+ return INT2FIX(0);
+}
+
static void
init_decoder(void)
{
cStreamDecoder = rb_define_class_under(extzstd_mZstd, "Decoder", rb_cObject);
rb_define_alloc_func(cStreamDecoder, dec_alloc);
@@ -585,11 +599,13 @@
rb_define_const(cStreamDecoder, "OUTSIZE", SIZET2NUM(ZSTD_DStreamOutSize()));
rb_define_method(cStreamDecoder, "initialize", dec_init, -1);
rb_define_method(cStreamDecoder, "read", dec_read, -1);
rb_define_method(cStreamDecoder, "eof", dec_eof, 0);
rb_define_alias(cStreamDecoder, "eof?", "eof");
+ rb_define_method(cStreamDecoder, "close", dec_close, 0);
rb_define_method(cStreamDecoder, "reset", dec_reset, 0);
rb_define_method(cStreamDecoder, "sizeof", dec_sizeof, 0);
+ rb_define_method(cStreamDecoder, "pos", dec_pos, 0);
}
/*
* initialize for extzstd_stream.c
*/