zlib 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/zlib/zlib.c +72 -94
- data/zlib.gemspec +3 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c89a988315358942a700fcaad47423267840ffe6
|
4
|
+
data.tar.gz: '0967f4982f0a1c36f43815420f05e6ef674c1252'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e1a0fee0c0f38e9fccf904f70b3f3d71753ce537bf7bee59aa390d57e548588ecc2d5253b13904e7c61c4983475e8603759e51f6bd0bed1795c7f852f9dc2aa
|
7
|
+
data.tar.gz: 92b5a9d994aa80fa3b7fc15064b3753e604ba024f37ed6258772c7e38ea84aeadb49fd2ea9054707cff0c564d873aa3cf836f46c174ce2e4adaee1e7539fd395
|
data/README.md
CHANGED
@@ -37,4 +37,4 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/z
|
|
37
37
|
|
38
38
|
## License
|
39
39
|
|
40
|
-
The gem is available as open source under the terms of the [
|
40
|
+
The gem is available as open source under the terms of the [2-Clause BSD License](https://opensource.org/licenses/BSD-2-Clause).
|
data/ext/zlib/zlib.c
CHANGED
@@ -72,6 +72,7 @@ struct zstream_run_args;
|
|
72
72
|
static void zstream_init(struct zstream*, const struct zstream_funcs*);
|
73
73
|
static void zstream_expand_buffer(struct zstream*);
|
74
74
|
static void zstream_expand_buffer_into(struct zstream*, unsigned long);
|
75
|
+
static int zstream_expand_buffer_non_stream(struct zstream *z);
|
75
76
|
static void zstream_append_buffer(struct zstream*, const Bytef*, long);
|
76
77
|
static VALUE zstream_detach_buffer(struct zstream*);
|
77
78
|
static VALUE zstream_shift_buffer(struct zstream*, long);
|
@@ -527,7 +528,6 @@ rb_zlib_crc_table(VALUE obj)
|
|
527
528
|
struct zstream {
|
528
529
|
unsigned long flags;
|
529
530
|
VALUE buf;
|
530
|
-
long buf_filled;
|
531
531
|
VALUE input;
|
532
532
|
z_stream stream;
|
533
533
|
const struct zstream_funcs {
|
@@ -550,6 +550,7 @@ struct zstream {
|
|
550
550
|
#define ZSTREAM_IS_FINISHED(z) ((z)->flags & ZSTREAM_FLAG_FINISHED)
|
551
551
|
#define ZSTREAM_IS_CLOSING(z) ((z)->flags & ZSTREAM_FLAG_CLOSING)
|
552
552
|
#define ZSTREAM_IS_GZFILE(z) ((z)->flags & ZSTREAM_FLAG_GZFILE)
|
553
|
+
#define ZSTREAM_BUF_FILLED(z) (NIL_P((z)->buf) ? 0 : RSTRING_LEN((z)->buf))
|
553
554
|
|
554
555
|
#define ZSTREAM_EXPAND_BUFFER_OK 0
|
555
556
|
|
@@ -599,7 +600,6 @@ zstream_init(struct zstream *z, const struct zstream_funcs *func)
|
|
599
600
|
{
|
600
601
|
z->flags = 0;
|
601
602
|
z->buf = Qnil;
|
602
|
-
z->buf_filled = 0;
|
603
603
|
z->input = Qnil;
|
604
604
|
z->stream.zalloc = zlib_mem_alloc;
|
605
605
|
z->stream.zfree = zlib_mem_free;
|
@@ -624,11 +624,11 @@ zstream_expand_buffer(struct zstream *z)
|
|
624
624
|
}
|
625
625
|
|
626
626
|
if (!ZSTREAM_IS_GZFILE(z) && rb_block_given_p()) {
|
627
|
-
|
627
|
+
long buf_filled = ZSTREAM_BUF_FILLED(z);
|
628
|
+
if (buf_filled >= ZSTREAM_AVAIL_OUT_STEP_MAX) {
|
628
629
|
int state = 0;
|
629
630
|
VALUE self = (VALUE)z->stream.opaque;
|
630
631
|
|
631
|
-
rb_str_resize(z->buf, z->buf_filled);
|
632
632
|
rb_obj_reveal(z->buf, rb_cString);
|
633
633
|
OBJ_INFECT(z->buf, self);
|
634
634
|
|
@@ -644,23 +644,11 @@ zstream_expand_buffer(struct zstream *z)
|
|
644
644
|
}
|
645
645
|
else {
|
646
646
|
zstream_expand_buffer_into(z,
|
647
|
-
ZSTREAM_AVAIL_OUT_STEP_MAX -
|
647
|
+
ZSTREAM_AVAIL_OUT_STEP_MAX - buf_filled);
|
648
648
|
}
|
649
649
|
}
|
650
650
|
else {
|
651
|
-
|
652
|
-
z->stream.avail_out = ZSTREAM_AVAIL_OUT_STEP_MAX;
|
653
|
-
}
|
654
|
-
else {
|
655
|
-
long inc = z->buf_filled / 2;
|
656
|
-
if (inc < ZSTREAM_AVAIL_OUT_STEP_MIN) {
|
657
|
-
inc = ZSTREAM_AVAIL_OUT_STEP_MIN;
|
658
|
-
}
|
659
|
-
rb_str_resize(z->buf, z->buf_filled + inc);
|
660
|
-
z->stream.avail_out = (inc < ZSTREAM_AVAIL_OUT_STEP_MAX) ?
|
661
|
-
(int)inc : ZSTREAM_AVAIL_OUT_STEP_MAX;
|
662
|
-
}
|
663
|
-
z->stream.next_out = (Bytef*)RSTRING_PTR(z->buf) + z->buf_filled;
|
651
|
+
zstream_expand_buffer_non_stream(z);
|
664
652
|
}
|
665
653
|
}
|
666
654
|
|
@@ -670,15 +658,14 @@ zstream_expand_buffer_into(struct zstream *z, unsigned long size)
|
|
670
658
|
if (NIL_P(z->buf)) {
|
671
659
|
/* I uses rb_str_new here not rb_str_buf_new because
|
672
660
|
rb_str_buf_new makes a zero-length string. */
|
673
|
-
z->buf =
|
674
|
-
z->buf_filled = 0;
|
661
|
+
z->buf = rb_str_buf_new(size);
|
675
662
|
z->stream.next_out = (Bytef*)RSTRING_PTR(z->buf);
|
676
663
|
z->stream.avail_out = MAX_UINT(size);
|
677
664
|
rb_obj_hide(z->buf);
|
678
665
|
}
|
679
666
|
else if (z->stream.avail_out != size) {
|
680
|
-
|
681
|
-
z->stream.next_out = (Bytef*)
|
667
|
+
rb_str_modify_expand(z->buf, size);
|
668
|
+
z->stream.next_out = (Bytef*)RSTRING_END(z->buf);
|
682
669
|
z->stream.avail_out = MAX_UINT(size);
|
683
670
|
}
|
684
671
|
}
|
@@ -695,34 +682,24 @@ zstream_expand_buffer_protect(void *ptr)
|
|
695
682
|
}
|
696
683
|
|
697
684
|
static int
|
698
|
-
|
685
|
+
zstream_expand_buffer_non_stream(struct zstream *z)
|
699
686
|
{
|
700
|
-
|
701
|
-
long inc, len;
|
687
|
+
long inc, len = ZSTREAM_BUF_FILLED(z);
|
702
688
|
|
703
|
-
if (
|
689
|
+
if (rb_str_capacity(z->buf) - len >= ZSTREAM_AVAIL_OUT_STEP_MAX) {
|
704
690
|
z->stream.avail_out = ZSTREAM_AVAIL_OUT_STEP_MAX;
|
705
691
|
}
|
706
692
|
else {
|
707
|
-
inc =
|
693
|
+
inc = len / 2;
|
708
694
|
if (inc < ZSTREAM_AVAIL_OUT_STEP_MIN) {
|
709
695
|
inc = ZSTREAM_AVAIL_OUT_STEP_MIN;
|
710
696
|
}
|
711
697
|
|
712
|
-
|
713
|
-
|
714
|
-
new_str = ruby_xrealloc(RSTRING(z->buf)->as.heap.ptr, len + 1);
|
715
|
-
|
716
|
-
/* from rb_str_resize */
|
717
|
-
RSTRING(z->buf)->as.heap.ptr = new_str;
|
718
|
-
RSTRING(z->buf)->as.heap.ptr[len] = '\0'; /* sentinel */
|
719
|
-
RSTRING(z->buf)->as.heap.len =
|
720
|
-
RSTRING(z->buf)->as.heap.aux.capa = len;
|
721
|
-
|
698
|
+
rb_str_modify_expand(z->buf, inc);
|
722
699
|
z->stream.avail_out = (inc < ZSTREAM_AVAIL_OUT_STEP_MAX) ?
|
723
700
|
(int)inc : ZSTREAM_AVAIL_OUT_STEP_MAX;
|
724
701
|
}
|
725
|
-
z->stream.next_out = (Bytef*)
|
702
|
+
z->stream.next_out = (Bytef*)RSTRING_END(z->buf);
|
726
703
|
|
727
704
|
return ZSTREAM_EXPAND_BUFFER_OK;
|
728
705
|
}
|
@@ -733,15 +710,14 @@ zstream_append_buffer(struct zstream *z, const Bytef *src, long len)
|
|
733
710
|
if (NIL_P(z->buf)) {
|
734
711
|
z->buf = rb_str_buf_new(len);
|
735
712
|
rb_str_buf_cat(z->buf, (const char*)src, len);
|
736
|
-
z->buf_filled = len;
|
737
713
|
z->stream.next_out = (Bytef*)RSTRING_PTR(z->buf);
|
738
714
|
z->stream.avail_out = 0;
|
739
715
|
rb_obj_hide(z->buf);
|
740
716
|
return;
|
741
717
|
}
|
742
718
|
|
743
|
-
if (
|
744
|
-
|
719
|
+
if ((long)rb_str_capacity(z->buf) < ZSTREAM_BUF_FILLED(z) + len) {
|
720
|
+
rb_str_modify_expand(z->buf, len);
|
745
721
|
z->stream.avail_out = 0;
|
746
722
|
}
|
747
723
|
else {
|
@@ -752,9 +728,8 @@ zstream_append_buffer(struct zstream *z, const Bytef *src, long len)
|
|
752
728
|
z->stream.avail_out = 0;
|
753
729
|
}
|
754
730
|
}
|
755
|
-
|
756
|
-
z->
|
757
|
-
z->stream.next_out = (Bytef*)RSTRING_PTR(z->buf) + z->buf_filled;
|
731
|
+
rb_str_cat(z->buf, (const char *)src, len);
|
732
|
+
z->stream.next_out = (Bytef*)RSTRING_END(z->buf);
|
758
733
|
}
|
759
734
|
|
760
735
|
#define zstream_append_buffer2(z,v) \
|
@@ -777,14 +752,12 @@ zstream_detach_buffer(struct zstream *z)
|
|
777
752
|
}
|
778
753
|
else {
|
779
754
|
dst = z->buf;
|
780
|
-
rb_str_resize(dst, z->buf_filled);
|
781
755
|
rb_obj_reveal(dst, rb_cString);
|
782
756
|
}
|
783
757
|
|
784
758
|
OBJ_INFECT(dst, self);
|
785
759
|
|
786
760
|
z->buf = Qnil;
|
787
|
-
z->buf_filled = 0;
|
788
761
|
z->stream.next_out = 0;
|
789
762
|
z->stream.avail_out = 0;
|
790
763
|
|
@@ -800,18 +773,20 @@ static VALUE
|
|
800
773
|
zstream_shift_buffer(struct zstream *z, long len)
|
801
774
|
{
|
802
775
|
VALUE dst;
|
803
|
-
|
776
|
+
char *bufptr;
|
777
|
+
long buflen = ZSTREAM_BUF_FILLED(z);
|
804
778
|
|
805
|
-
if (
|
779
|
+
if (buflen <= len) {
|
806
780
|
return zstream_detach_buffer(z);
|
807
781
|
}
|
808
782
|
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
783
|
+
bufptr = RSTRING_PTR(z->buf);
|
784
|
+
dst = rb_str_new(bufptr, len);
|
785
|
+
buflen -= len;
|
786
|
+
memmove(bufptr, bufptr + len, buflen);
|
787
|
+
rb_str_set_len(z->buf, buflen);
|
788
|
+
z->stream.next_out = (Bytef*)RSTRING_END(z->buf);
|
789
|
+
buflen = (long)rb_str_capacity(z->buf) - ZSTREAM_BUF_FILLED(z);
|
815
790
|
if (buflen > ZSTREAM_AVAIL_OUT_STEP_MAX) {
|
816
791
|
buflen = ZSTREAM_AVAIL_OUT_STEP_MAX;
|
817
792
|
}
|
@@ -823,13 +798,17 @@ zstream_shift_buffer(struct zstream *z, long len)
|
|
823
798
|
static void
|
824
799
|
zstream_buffer_ungets(struct zstream *z, const Bytef *b, unsigned long len)
|
825
800
|
{
|
826
|
-
|
801
|
+
char *bufptr;
|
802
|
+
long filled;
|
803
|
+
|
804
|
+
if (NIL_P(z->buf) || (long)rb_str_capacity(z->buf) <= ZSTREAM_BUF_FILLED(z)) {
|
827
805
|
zstream_expand_buffer_into(z, len);
|
828
806
|
}
|
829
807
|
|
830
|
-
|
831
|
-
memmove(
|
832
|
-
|
808
|
+
RSTRING_GETMEM(z->buf, bufptr, filled);
|
809
|
+
memmove(bufptr + len, bufptr, filled);
|
810
|
+
memmove(bufptr, b, len);
|
811
|
+
rb_str_set_len(z->buf, filled + len);
|
833
812
|
if (z->stream.avail_out > 0) {
|
834
813
|
if (len > z->stream.avail_out) len = z->stream.avail_out;
|
835
814
|
z->stream.next_out+=len;
|
@@ -840,17 +819,8 @@ zstream_buffer_ungets(struct zstream *z, const Bytef *b, unsigned long len)
|
|
840
819
|
static void
|
841
820
|
zstream_buffer_ungetbyte(struct zstream *z, int c)
|
842
821
|
{
|
843
|
-
|
844
|
-
|
845
|
-
}
|
846
|
-
|
847
|
-
memmove(RSTRING_PTR(z->buf) + 1, RSTRING_PTR(z->buf), z->buf_filled);
|
848
|
-
RSTRING_PTR(z->buf)[0] = (char)c;
|
849
|
-
z->buf_filled++;
|
850
|
-
if (z->stream.avail_out > 0) {
|
851
|
-
z->stream.next_out++;
|
852
|
-
z->stream.avail_out--;
|
853
|
-
}
|
822
|
+
Bytef cc = (Bytef)c;
|
823
|
+
zstream_buffer_ungets(z, &cc, 1);
|
854
824
|
}
|
855
825
|
|
856
826
|
static void
|
@@ -927,7 +897,6 @@ zstream_reset(struct zstream *z)
|
|
927
897
|
}
|
928
898
|
z->flags = ZSTREAM_FLAG_READY;
|
929
899
|
z->buf = Qnil;
|
930
|
-
z->buf_filled = 0;
|
931
900
|
z->stream.next_out = 0;
|
932
901
|
z->stream.avail_out = 0;
|
933
902
|
zstream_reset_input(z);
|
@@ -968,7 +937,7 @@ zstream_run_func(void *ptr)
|
|
968
937
|
while (!args->interrupt) {
|
969
938
|
n = z->stream.avail_out;
|
970
939
|
err = z->func->run(&z->stream, flush);
|
971
|
-
z->
|
940
|
+
rb_str_set_len(z->buf, ZSTREAM_BUF_FILLED(z) + (n - z->stream.avail_out));
|
972
941
|
|
973
942
|
if (err == Z_STREAM_END) {
|
974
943
|
z->flags &= ~ZSTREAM_FLAG_IN_STREAM;
|
@@ -997,7 +966,7 @@ zstream_run_func(void *ptr)
|
|
997
966
|
(void *)z);
|
998
967
|
}
|
999
968
|
else {
|
1000
|
-
state =
|
969
|
+
state = zstream_expand_buffer_non_stream(z);
|
1001
970
|
}
|
1002
971
|
|
1003
972
|
if (state) {
|
@@ -1577,7 +1546,6 @@ rb_deflate_init_copy(VALUE self, VALUE orig)
|
|
1577
1546
|
}
|
1578
1547
|
z1->input = NIL_P(z2->input) ? Qnil : rb_str_dup(z2->input);
|
1579
1548
|
z1->buf = NIL_P(z2->buf) ? Qnil : rb_str_dup(z2->buf);
|
1580
|
-
z1->buf_filled = z2->buf_filled;
|
1581
1549
|
z1->flags = z2->flags;
|
1582
1550
|
|
1583
1551
|
return self;
|
@@ -1761,23 +1729,26 @@ rb_deflate_params(VALUE obj, VALUE v_level, VALUE v_strategy)
|
|
1761
1729
|
int level, strategy;
|
1762
1730
|
int err;
|
1763
1731
|
uInt n;
|
1732
|
+
long filled;
|
1764
1733
|
|
1765
1734
|
level = ARG_LEVEL(v_level);
|
1766
1735
|
strategy = ARG_STRATEGY(v_strategy);
|
1767
1736
|
|
1768
1737
|
n = z->stream.avail_out;
|
1769
1738
|
err = deflateParams(&z->stream, level, strategy);
|
1770
|
-
|
1739
|
+
filled = n - z->stream.avail_out;
|
1771
1740
|
while (err == Z_BUF_ERROR) {
|
1772
1741
|
rb_warning("deflateParams() returned Z_BUF_ERROR");
|
1773
1742
|
zstream_expand_buffer(z);
|
1743
|
+
rb_str_set_len(z->buf, RSTRING_LEN(z->buf) + filled);
|
1774
1744
|
n = z->stream.avail_out;
|
1775
1745
|
err = deflateParams(&z->stream, level, strategy);
|
1776
|
-
|
1746
|
+
filled = n - z->stream.avail_out;
|
1777
1747
|
}
|
1778
1748
|
if (err != Z_OK) {
|
1779
1749
|
raise_zlib_error(err, z->stream.msg);
|
1780
1750
|
}
|
1751
|
+
rb_str_set_len(z->buf, RSTRING_LEN(z->buf) + filled);
|
1781
1752
|
|
1782
1753
|
return Qnil;
|
1783
1754
|
}
|
@@ -2230,7 +2201,7 @@ struct gzfile {
|
|
2230
2201
|
#define GZFILE_FLAG_FOOTER_FINISHED (ZSTREAM_FLAG_UNUSED << 2)
|
2231
2202
|
|
2232
2203
|
#define GZFILE_IS_FINISHED(gz) \
|
2233
|
-
(ZSTREAM_IS_FINISHED(&(gz)->z) && (gz)->z
|
2204
|
+
(ZSTREAM_IS_FINISHED(&(gz)->z) && ZSTREAM_BUF_FILLED(&(gz)->z) == 0)
|
2234
2205
|
|
2235
2206
|
#define GZFILE_READ_SIZE 2048
|
2236
2207
|
|
@@ -2356,7 +2327,7 @@ gzfile_write_raw(struct gzfile *gz)
|
|
2356
2327
|
{
|
2357
2328
|
VALUE str;
|
2358
2329
|
|
2359
|
-
if (gz->z
|
2330
|
+
if (ZSTREAM_BUF_FILLED(&gz->z) > 0) {
|
2360
2331
|
str = zstream_detach_buffer(&gz->z);
|
2361
2332
|
OBJ_TAINT(str); /* for safe */
|
2362
2333
|
rb_funcall(gz->io, id_write, 1, str);
|
@@ -2689,9 +2660,9 @@ gzfile_read_more(struct gzfile *gz)
|
|
2689
2660
|
Z_SYNC_FLUSH);
|
2690
2661
|
RB_GC_GUARD(str);
|
2691
2662
|
}
|
2692
|
-
if (gz->z
|
2663
|
+
if (ZSTREAM_BUF_FILLED(&gz->z) > 0) break;
|
2693
2664
|
}
|
2694
|
-
return gz->z
|
2665
|
+
return ZSTREAM_BUF_FILLED(&gz->z);
|
2695
2666
|
}
|
2696
2667
|
|
2697
2668
|
static void
|
@@ -2732,7 +2703,7 @@ gzfile_fill(struct gzfile *gz, long len)
|
|
2732
2703
|
rb_raise(rb_eArgError, "negative length %ld given", len);
|
2733
2704
|
if (len == 0)
|
2734
2705
|
return 0;
|
2735
|
-
while (!ZSTREAM_IS_FINISHED(&gz->z) && gz->z
|
2706
|
+
while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) < len) {
|
2736
2707
|
gzfile_read_more(gz);
|
2737
2708
|
}
|
2738
2709
|
if (GZFILE_IS_FINISHED(gz)) {
|
@@ -2741,7 +2712,7 @@ gzfile_fill(struct gzfile *gz, long len)
|
|
2741
2712
|
}
|
2742
2713
|
return -1;
|
2743
2714
|
}
|
2744
|
-
return len < gz->z
|
2715
|
+
return len < ZSTREAM_BUF_FILLED(&gz->z) ? len : ZSTREAM_BUF_FILLED(&gz->z);
|
2745
2716
|
}
|
2746
2717
|
|
2747
2718
|
static VALUE
|
@@ -2776,7 +2747,7 @@ gzfile_readpartial(struct gzfile *gz, long len, VALUE outbuf)
|
|
2776
2747
|
return outbuf;
|
2777
2748
|
}
|
2778
2749
|
}
|
2779
|
-
while (!ZSTREAM_IS_FINISHED(&gz->z) && gz->z
|
2750
|
+
while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) == 0) {
|
2780
2751
|
gzfile_read_more(gz);
|
2781
2752
|
}
|
2782
2753
|
if (GZFILE_IS_FINISHED(gz)) {
|
@@ -2830,7 +2801,7 @@ gzfile_getc(struct gzfile *gz)
|
|
2830
2801
|
int len;
|
2831
2802
|
|
2832
2803
|
len = rb_enc_mbmaxlen(gz->enc);
|
2833
|
-
while (!ZSTREAM_IS_FINISHED(&gz->z) && gz->z
|
2804
|
+
while (!ZSTREAM_IS_FINISHED(&gz->z) && ZSTREAM_BUF_FILLED(&gz->z) < len) {
|
2834
2805
|
gzfile_read_more(gz);
|
2835
2806
|
}
|
2836
2807
|
if (GZFILE_IS_FINISHED(gz)) {
|
@@ -2848,7 +2819,7 @@ gzfile_getc(struct gzfile *gz)
|
|
2848
2819
|
gz->cbuf = ALLOC_N(char, GZFILE_CBUF_CAPA);
|
2849
2820
|
}
|
2850
2821
|
ss = sp = (const unsigned char*)RSTRING_PTR(gz->z.buf);
|
2851
|
-
se = sp + gz->z
|
2822
|
+
se = sp + ZSTREAM_BUF_FILLED(&gz->z);
|
2852
2823
|
ds = dp = (unsigned char *)gz->cbuf;
|
2853
2824
|
de = (unsigned char *)ds + GZFILE_CBUF_CAPA;
|
2854
2825
|
(void)rb_econv_convert(gz->ec, &sp, se, &dp, de, ECONV_PARTIAL_INPUT|ECONV_AFTER_OUTPUT);
|
@@ -3422,7 +3393,14 @@ static VALUE
|
|
3422
3393
|
rb_gzfile_total_out(VALUE obj)
|
3423
3394
|
{
|
3424
3395
|
struct gzfile *gz = get_gzfile(obj);
|
3425
|
-
|
3396
|
+
uLong total_out = gz->z.stream.total_out;
|
3397
|
+
long buf_filled = ZSTREAM_BUF_FILLED(&gz->z);
|
3398
|
+
|
3399
|
+
if (total_out >= (uLong)buf_filled) {
|
3400
|
+
return rb_uint2inum(total_out - buf_filled);
|
3401
|
+
} else {
|
3402
|
+
return LONG2FIX(-(buf_filled - (long)total_out));
|
3403
|
+
}
|
3426
3404
|
}
|
3427
3405
|
|
3428
3406
|
/*
|
@@ -3996,7 +3974,7 @@ gzreader_skip_linebreaks(struct gzfile *gz)
|
|
3996
3974
|
char *p;
|
3997
3975
|
int n;
|
3998
3976
|
|
3999
|
-
while (gz->z
|
3977
|
+
while (ZSTREAM_BUF_FILLED(&gz->z) == 0) {
|
4000
3978
|
if (GZFILE_IS_FINISHED(gz)) return;
|
4001
3979
|
gzfile_read_more(gz);
|
4002
3980
|
}
|
@@ -4004,10 +3982,10 @@ gzreader_skip_linebreaks(struct gzfile *gz)
|
|
4004
3982
|
p = RSTRING_PTR(gz->z.buf);
|
4005
3983
|
|
4006
3984
|
while (n++, *(p++) == '\n') {
|
4007
|
-
if (n >= gz->z
|
3985
|
+
if (n >= ZSTREAM_BUF_FILLED(&gz->z)) {
|
4008
3986
|
str = zstream_detach_buffer(&gz->z);
|
4009
3987
|
gzfile_calc_crc(gz, str);
|
4010
|
-
while (gz->z
|
3988
|
+
while (ZSTREAM_BUF_FILLED(&gz->z) == 0) {
|
4011
3989
|
if (GZFILE_IS_FINISHED(gz)) return;
|
4012
3990
|
gzfile_read_more(gz);
|
4013
3991
|
}
|
@@ -4031,7 +4009,7 @@ static long
|
|
4031
4009
|
gzreader_charboundary(struct gzfile *gz, long n)
|
4032
4010
|
{
|
4033
4011
|
char *s = RSTRING_PTR(gz->z.buf);
|
4034
|
-
char *e = s + gz->z
|
4012
|
+
char *e = s + ZSTREAM_BUF_FILLED(&gz->z);
|
4035
4013
|
char *p = rb_enc_left_char_head(s, s + n, e, gz->enc);
|
4036
4014
|
long l = p - s;
|
4037
4015
|
if (l < n) {
|
@@ -4126,9 +4104,9 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
|
|
4126
4104
|
gzreader_skip_linebreaks(gz);
|
4127
4105
|
}
|
4128
4106
|
|
4129
|
-
while (gz->z
|
4107
|
+
while (ZSTREAM_BUF_FILLED(&gz->z) < rslen) {
|
4130
4108
|
if (ZSTREAM_IS_FINISHED(&gz->z)) {
|
4131
|
-
if (gz->z
|
4109
|
+
if (ZSTREAM_BUF_FILLED(&gz->z) > 0) gz->lineno++;
|
4132
4110
|
return gzfile_read(gz, rslen);
|
4133
4111
|
}
|
4134
4112
|
gzfile_read_more(gz);
|
@@ -4138,13 +4116,13 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
|
|
4138
4116
|
n = rslen;
|
4139
4117
|
for (;;) {
|
4140
4118
|
long filled;
|
4141
|
-
if (n > gz->z
|
4119
|
+
if (n > ZSTREAM_BUF_FILLED(&gz->z)) {
|
4142
4120
|
if (ZSTREAM_IS_FINISHED(&gz->z)) break;
|
4143
4121
|
gzfile_read_more(gz);
|
4144
4122
|
p = RSTRING_PTR(gz->z.buf) + n - rslen;
|
4145
4123
|
}
|
4146
4124
|
if (!rspara) rscheck(rsptr, rslen, rs);
|
4147
|
-
filled = gz->z
|
4125
|
+
filled = ZSTREAM_BUF_FILLED(&gz->z);
|
4148
4126
|
if (limit > 0 && filled >= limit) {
|
4149
4127
|
filled = limit;
|
4150
4128
|
}
|
@@ -4161,7 +4139,7 @@ gzreader_gets(int argc, VALUE *argv, VALUE obj)
|
|
4161
4139
|
p++, n++;
|
4162
4140
|
}
|
4163
4141
|
}
|
4164
|
-
if (maxlen > 1 && n == limit && (gz->z
|
4142
|
+
if (maxlen > 1 && n == limit && (ZSTREAM_BUF_FILLED(&gz->z) > n || !ZSTREAM_IS_FINISHED(&gz->z))) {
|
4165
4143
|
n = gzreader_charboundary(gz, n);
|
4166
4144
|
}
|
4167
4145
|
|
data/zlib.gemspec
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
Gem::Specification.new do |spec|
|
3
4
|
spec.name = "zlib"
|
4
|
-
spec.version = "0.0
|
5
|
+
spec.version = "0.1.0"
|
6
|
+
spec.date = '2017-09-13'
|
5
7
|
spec.authors = ["Yukihiro Matsumoto", "UENO Katsuhiro"]
|
6
8
|
spec.email = ["matz@ruby-lang.org", nil]
|
7
9
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yukihiro Matsumoto
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
version: '0'
|
94
94
|
requirements: []
|
95
95
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.6.
|
96
|
+
rubygems_version: 2.6.13
|
97
97
|
signing_key:
|
98
98
|
specification_version: 4
|
99
99
|
summary: Ruby interface for the zlib compression/decompression library
|