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 */