zlib 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|