extlz4 0.2.5 → 0.3.4
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/HISTORY.ja.md +16 -1
- data/README.md +49 -51
- data/Rakefile +22 -0
- data/bin/extlz4 +1 -1
- data/contrib/lz4/LICENSE +2 -1
- data/contrib/lz4/Makefile.inc +111 -0
- data/contrib/lz4/NEWS +97 -0
- data/contrib/lz4/README.md +41 -36
- data/contrib/lz4/build/README.md +55 -0
- data/contrib/lz4/build/VS2010/datagen/datagen.vcxproj +169 -0
- data/contrib/lz4/build/VS2010/frametest/frametest.vcxproj +176 -0
- data/contrib/lz4/build/VS2010/fullbench/fullbench.vcxproj +176 -0
- data/contrib/lz4/build/VS2010/fullbench-dll/fullbench-dll.vcxproj +180 -0
- data/contrib/lz4/build/VS2010/fuzzer/fuzzer.vcxproj +173 -0
- data/contrib/lz4/build/VS2010/liblz4/liblz4.vcxproj +175 -0
- data/contrib/lz4/build/VS2010/liblz4-dll/liblz4-dll.rc +51 -0
- data/contrib/lz4/build/VS2010/liblz4-dll/liblz4-dll.vcxproj +179 -0
- data/contrib/lz4/build/VS2010/lz4/lz4.rc +51 -0
- data/contrib/lz4/build/VS2010/lz4/lz4.vcxproj +189 -0
- data/contrib/lz4/build/VS2010/lz4.sln +98 -0
- data/contrib/lz4/build/VS2017/datagen/datagen.vcxproj +173 -0
- data/contrib/lz4/build/VS2017/frametest/frametest.vcxproj +180 -0
- data/contrib/lz4/build/VS2017/fullbench/fullbench.vcxproj +180 -0
- data/contrib/lz4/build/VS2017/fullbench-dll/fullbench-dll.vcxproj +184 -0
- data/contrib/lz4/build/VS2017/fuzzer/fuzzer.vcxproj +177 -0
- data/contrib/lz4/build/VS2017/liblz4/liblz4.vcxproj +179 -0
- data/contrib/lz4/build/VS2017/liblz4-dll/liblz4-dll.rc +51 -0
- data/contrib/lz4/build/VS2017/liblz4-dll/liblz4-dll.vcxproj +183 -0
- data/contrib/lz4/build/VS2017/lz4/lz4.rc +51 -0
- data/contrib/lz4/build/VS2017/lz4/lz4.vcxproj +175 -0
- data/contrib/lz4/build/VS2017/lz4.sln +103 -0
- data/contrib/lz4/build/VS2022/datagen/datagen.vcxproj +173 -0
- data/contrib/lz4/build/VS2022/frametest/frametest.vcxproj +180 -0
- data/contrib/lz4/build/VS2022/fullbench/fullbench.vcxproj +180 -0
- data/contrib/lz4/build/VS2022/fullbench-dll/fullbench-dll.vcxproj +184 -0
- data/contrib/lz4/build/VS2022/fuzzer/fuzzer.vcxproj +177 -0
- data/contrib/lz4/build/VS2022/liblz4/liblz4.vcxproj +179 -0
- data/contrib/lz4/build/VS2022/liblz4-dll/liblz4-dll.rc +51 -0
- data/contrib/lz4/build/VS2022/liblz4-dll/liblz4-dll.vcxproj +183 -0
- data/contrib/lz4/build/VS2022/lz4.sln +103 -0
- data/contrib/lz4/build/cmake/CMakeLists.txt +273 -0
- data/contrib/lz4/build/cmake/lz4Config.cmake.in +2 -0
- data/contrib/lz4/lib/LICENSE +1 -1
- data/contrib/lz4/lib/README.md +111 -15
- data/contrib/lz4/lib/liblz4-dll.rc.in +35 -0
- data/contrib/lz4/lib/liblz4.pc.in +3 -3
- data/contrib/lz4/lib/lz4.c +1891 -733
- data/contrib/lz4/lib/lz4.h +597 -234
- data/contrib/lz4/lib/lz4file.c +311 -0
- data/contrib/lz4/lib/lz4file.h +93 -0
- data/contrib/lz4/lib/lz4frame.c +896 -493
- data/contrib/lz4/lib/lz4frame.h +408 -107
- data/contrib/lz4/lib/lz4frame_static.h +5 -112
- data/contrib/lz4/lib/lz4hc.c +1039 -301
- data/contrib/lz4/lib/lz4hc.h +264 -123
- data/contrib/lz4/lib/xxhash.c +376 -240
- data/contrib/lz4/lib/xxhash.h +128 -93
- data/contrib/lz4/ossfuzz/Makefile +79 -0
- data/contrib/lz4/ossfuzz/compress_frame_fuzzer.c +48 -0
- data/contrib/lz4/ossfuzz/compress_fuzzer.c +58 -0
- data/contrib/lz4/ossfuzz/compress_hc_fuzzer.c +64 -0
- data/contrib/lz4/ossfuzz/decompress_frame_fuzzer.c +75 -0
- data/contrib/lz4/ossfuzz/decompress_fuzzer.c +78 -0
- data/contrib/lz4/ossfuzz/fuzz.h +48 -0
- data/contrib/lz4/ossfuzz/fuzz_data_producer.c +77 -0
- data/contrib/lz4/ossfuzz/fuzz_data_producer.h +36 -0
- data/contrib/lz4/ossfuzz/fuzz_helpers.h +95 -0
- data/contrib/lz4/ossfuzz/lz4_helpers.c +51 -0
- data/contrib/lz4/ossfuzz/lz4_helpers.h +13 -0
- data/contrib/lz4/ossfuzz/ossfuzz.sh +23 -0
- data/contrib/lz4/ossfuzz/round_trip_frame_fuzzer.c +43 -0
- data/contrib/lz4/ossfuzz/round_trip_frame_uncompressed_fuzzer.c +134 -0
- data/contrib/lz4/ossfuzz/round_trip_fuzzer.c +117 -0
- data/contrib/lz4/ossfuzz/round_trip_hc_fuzzer.c +44 -0
- data/contrib/lz4/ossfuzz/round_trip_stream_fuzzer.c +302 -0
- data/contrib/lz4/ossfuzz/standaloneengine.c +74 -0
- data/contrib/lz4/ossfuzz/travisoss.sh +26 -0
- data/ext/blockapi.c +13 -48
- data/ext/extlz4.c +2 -0
- data/ext/extlz4.h +17 -0
- data/ext/frameapi.c +3 -14
- data/ext/hashargs.c +9 -3
- data/ext/hashargs.h +1 -1
- data/ext/lz4_amalgam.c +0 -23
- data/gemstub.rb +5 -16
- data/lib/extlz4/oldstream.rb +1 -1
- data/lib/extlz4.rb +51 -3
- data/test/common.rb +2 -2
- metadata +84 -16
- data/contrib/lz4/circle.yml +0 -38
- data/contrib/lz4/lib/lz4opt.h +0 -356
- data/lib/extlz4/version.rb +0 -3
data/ext/blockapi.c
CHANGED
@@ -32,7 +32,7 @@ aux_LZ4_compress_fast_continue_nogvl(va_list *vp)
|
|
32
32
|
static int
|
33
33
|
aux_LZ4_compress_fast_continue(void *context, const char *src, char *dest, int srcsize, int destsize, int acceleration)
|
34
34
|
{
|
35
|
-
return (int)aux_thread_call_without_gvl(
|
35
|
+
return (int)(intptr_t)aux_thread_call_without_gvl(
|
36
36
|
aux_LZ4_compress_fast_continue_nogvl, NULL,
|
37
37
|
context, src, dest, srcsize, destsize, acceleration);
|
38
38
|
}
|
@@ -54,7 +54,7 @@ static int
|
|
54
54
|
aux_LZ4_compressHC_continue(void *context, const char *src, char *dest, int srcsize, int destsize, int acceleration__ignored__)
|
55
55
|
{
|
56
56
|
(void)acceleration__ignored__;
|
57
|
-
return (int)aux_thread_call_without_gvl(
|
57
|
+
return (int)(intptr_t)aux_thread_call_without_gvl(
|
58
58
|
aux_LZ4_compressHC_continue_nogvl, NULL,
|
59
59
|
context, src, dest, srcsize, destsize);
|
60
60
|
}
|
@@ -76,7 +76,7 @@ aux_LZ4_decompress_safe_continue_nogvl(va_list *vp)
|
|
76
76
|
static int
|
77
77
|
aux_LZ4_decompress_safe_continue(LZ4_streamDecode_t *context, const char *src, char *dest, int srcsize, int maxsize)
|
78
78
|
{
|
79
|
-
return (int)aux_thread_call_without_gvl(
|
79
|
+
return (int)(intptr_t)aux_thread_call_without_gvl(
|
80
80
|
aux_LZ4_decompress_safe_continue_nogvl, NULL,
|
81
81
|
context, src, dest, srcsize, maxsize);
|
82
82
|
}
|
@@ -188,7 +188,7 @@ aux_shouldbe_string(VALUE obj)
|
|
188
188
|
static inline size_t
|
189
189
|
aux_lz4_compressbound(VALUE src)
|
190
190
|
{
|
191
|
-
return LZ4_compressBound(RSTRING_LEN(src));
|
191
|
+
return LZ4_compressBound(rb_long2int(RSTRING_LEN(src)));
|
192
192
|
}
|
193
193
|
|
194
194
|
enum {
|
@@ -441,7 +441,7 @@ blkenc_setup(int argc, VALUE argv[], struct blockencoder *p, VALUE predict)
|
|
441
441
|
* NOTE: すぐ下で LZ4_saveDict() を実行するため、
|
442
442
|
* NOTE: p->predict のバッファ領域が保持されることはない。
|
443
443
|
*/
|
444
|
-
p->traits->loaddict(p->context, RSTRING_PTR(p->predict), RSTRING_LEN(p->predict));
|
444
|
+
p->traits->loaddict(p->context, RSTRING_PTR(p->predict), rb_long2int(RSTRING_LEN(p->predict)));
|
445
445
|
}
|
446
446
|
|
447
447
|
p->prefixsize = p->traits->savedict(p->context, p->prefix, sizeof(p->prefix));
|
@@ -451,9 +451,6 @@ blkenc_setup(int argc, VALUE argv[], struct blockencoder *p, VALUE predict)
|
|
451
451
|
* call-seq:
|
452
452
|
* initialize(level = nil, predict = nil)
|
453
453
|
*
|
454
|
-
* [INFECTION]
|
455
|
-
* +self+ <- +predict+
|
456
|
-
*
|
457
454
|
* [RETURN]
|
458
455
|
* self
|
459
456
|
*
|
@@ -476,7 +473,6 @@ blkenc_init(int argc, VALUE argv[], VALUE enc)
|
|
476
473
|
}
|
477
474
|
|
478
475
|
blkenc_setup(argc, argv, p, Qnil);
|
479
|
-
rb_obj_infect(enc, p->predict);
|
480
476
|
|
481
477
|
return enc;
|
482
478
|
}
|
@@ -485,9 +481,6 @@ blkenc_init(int argc, VALUE argv[], VALUE enc)
|
|
485
481
|
* call-seq:
|
486
482
|
* update(src, dest = "") -> dest
|
487
483
|
* update(src, max_dest_size, dest = "") -> dest
|
488
|
-
*
|
489
|
-
* [INFECTION]
|
490
|
-
* +dest+ <- +self+ <- +src+
|
491
484
|
*/
|
492
485
|
static VALUE
|
493
486
|
blkenc_update(int argc, VALUE argv[], VALUE enc)
|
@@ -496,15 +489,13 @@ blkenc_update(int argc, VALUE argv[], VALUE enc)
|
|
496
489
|
VALUE src, dest;
|
497
490
|
size_t maxsize;
|
498
491
|
blockprocess_args(argc, argv, &src, &dest, &maxsize, NULL, aux_lz4_compressbound);
|
499
|
-
rb_obj_infect(enc, src);
|
500
|
-
rb_obj_infect(dest, enc);
|
501
492
|
char *srcp;
|
502
493
|
size_t srcsize;
|
503
494
|
RSTRING_GETMEM(src, srcp, srcsize);
|
504
|
-
int s = p->traits->update(p->context, srcp, RSTRING_PTR(dest), srcsize, maxsize, p->level);
|
495
|
+
int s = p->traits->update(p->context, srcp, RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize), p->level);
|
505
496
|
if (s <= 0) {
|
506
497
|
rb_raise(extlz4_eError,
|
507
|
-
"destsize too small (given destsize is %
|
498
|
+
"destsize too small (given destsize is %"PRIuSIZE")",
|
508
499
|
rb_str_capacity(dest));
|
509
500
|
}
|
510
501
|
p->prefixsize = p->traits->savedict(p->context, p->prefix, sizeof(p->prefix));
|
@@ -517,9 +508,6 @@ blkenc_update(int argc, VALUE argv[], VALUE enc)
|
|
517
508
|
* reset(level = nil) -> self
|
518
509
|
* reset(level, predict) -> self
|
519
510
|
*
|
520
|
-
* [INFECTION]
|
521
|
-
* +self+ < +predict+
|
522
|
-
*
|
523
511
|
* Reset block stream encoder.
|
524
512
|
*/
|
525
513
|
static VALUE
|
@@ -527,7 +515,6 @@ blkenc_reset(int argc, VALUE argv[], VALUE enc)
|
|
527
515
|
{
|
528
516
|
struct blockencoder *p = encoder_context(enc);
|
529
517
|
blkenc_setup(argc, argv, p, p->predict);
|
530
|
-
rb_obj_infect(enc, p->predict);
|
531
518
|
|
532
519
|
return enc;
|
533
520
|
}
|
@@ -575,7 +562,6 @@ blkenc_savedict(int argc, VALUE argv[], VALUE enc)
|
|
575
562
|
memcpy(RSTRING_PTR(dict), p->prefix, p->prefixsize);
|
576
563
|
if (p->prefixsize > 0) {
|
577
564
|
rb_str_set_len(dict, p->prefixsize);
|
578
|
-
rb_obj_infect(dict, enc);
|
579
565
|
return dict;
|
580
566
|
} else {
|
581
567
|
return Qnil;
|
@@ -632,9 +618,6 @@ typedef int aux_lz4_encoder_f(const char *src, char *dest, int srcsize, int maxs
|
|
632
618
|
*
|
633
619
|
* 実装の都合上、圧縮関数は LZ4_compress_fast / LZ4_compress_HC が使われます。
|
634
620
|
*
|
635
|
-
* [INFECTION]
|
636
|
-
* +dest+ <- +src+
|
637
|
-
*
|
638
621
|
* [RETURN]
|
639
622
|
* 圧縮されたデータが文字列として返ります。dest を指定した場合は、圧縮データを格納した dest を返します。
|
640
623
|
*
|
@@ -684,14 +667,13 @@ blkenc_s_encode(int argc, VALUE argv[], VALUE lz4)
|
|
684
667
|
size_t srcsize = RSTRING_LEN(src);
|
685
668
|
if (srcsize > LZ4_MAX_INPUT_SIZE) {
|
686
669
|
rb_raise(extlz4_eError,
|
687
|
-
"source size is too big for lz4 encode (given %
|
670
|
+
"source size is too big for lz4 encode (given %"PRIuSIZE", but max %"PRIuSIZE" bytes)",
|
688
671
|
srcsize, (size_t)LZ4_MAX_INPUT_SIZE);
|
689
672
|
}
|
690
673
|
aux_str_reserve(dest, maxsize);
|
691
674
|
rb_str_set_len(dest, 0);
|
692
|
-
rb_obj_infect(dest, src);
|
693
675
|
|
694
|
-
int size = encoder(RSTRING_PTR(src), RSTRING_PTR(dest), srcsize, maxsize, level);
|
676
|
+
int size = encoder(RSTRING_PTR(src), RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize), level);
|
695
677
|
if (size <= 0) {
|
696
678
|
rb_raise(extlz4_eError,
|
697
679
|
"failed LZ4 compress - maxsize is too small, or out of memory");
|
@@ -838,9 +820,6 @@ blkdec_setup(int argc, VALUE argv[], VALUE predict, struct blockdecoder *p)
|
|
838
820
|
* call-seq:
|
839
821
|
* initialize
|
840
822
|
* initialize(preset_dictionary)
|
841
|
-
*
|
842
|
-
* [INFECTION]
|
843
|
-
* +self+ < +preset_dictionary+
|
844
823
|
*/
|
845
824
|
static VALUE
|
846
825
|
blkdec_init(int argc, VALUE argv[], VALUE dec)
|
@@ -848,7 +827,6 @@ blkdec_init(int argc, VALUE argv[], VALUE dec)
|
|
848
827
|
struct blockdecoder *p = getdecoder(dec);
|
849
828
|
|
850
829
|
blkdec_setup(argc, argv, Qnil, p);
|
851
|
-
rb_obj_infect(dec, p->predict);
|
852
830
|
|
853
831
|
return dec;
|
854
832
|
}
|
@@ -857,9 +835,6 @@ blkdec_init(int argc, VALUE argv[], VALUE dec)
|
|
857
835
|
* call-seq:
|
858
836
|
* reset
|
859
837
|
* reset(preset_dictionary)
|
860
|
-
*
|
861
|
-
* [INFECTION]
|
862
|
-
* +self+ < +preset_dictionary+
|
863
838
|
*/
|
864
839
|
static VALUE
|
865
840
|
blkdec_reset(int argc, VALUE argv[], VALUE dec)
|
@@ -867,7 +842,6 @@ blkdec_reset(int argc, VALUE argv[], VALUE dec)
|
|
867
842
|
struct blockdecoder *p = getdecoder(dec);
|
868
843
|
|
869
844
|
blkdec_setup(argc, argv, p->predict, p);
|
870
|
-
rb_obj_infect(dec, p->predict);
|
871
845
|
|
872
846
|
return dec;
|
873
847
|
}
|
@@ -884,9 +858,6 @@ blkdec_reset(int argc, VALUE argv[], VALUE dec)
|
|
884
858
|
*
|
885
859
|
* 出力先は、max_dest_size が与えられていない場合、必要に応じて自動的に拡張されます。
|
886
860
|
* この場合、いったん圧縮された LZ4 データを走査するため、事前に僅かな CPU 時間を必要とします。
|
887
|
-
*
|
888
|
-
* [INFECTION]
|
889
|
-
* +dest+ < +self+ < +src+
|
890
861
|
*/
|
891
862
|
static VALUE
|
892
863
|
blkdec_update(int argc, VALUE argv[], VALUE dec)
|
@@ -896,13 +867,11 @@ blkdec_update(int argc, VALUE argv[], VALUE dec)
|
|
896
867
|
VALUE src, dest;
|
897
868
|
size_t maxsize;
|
898
869
|
blockprocess_args(argc, argv, &src, &dest, &maxsize, NULL, aux_lz4_scansize);
|
899
|
-
rb_obj_infect(dec, src);
|
900
|
-
rb_obj_infect(dest, dec);
|
901
870
|
const char *srcp;
|
902
871
|
size_t srcsize;
|
903
872
|
RSTRING_GETMEM(src, srcp, srcsize);
|
904
|
-
LZ4_setStreamDecode(p->context, p->dictbuf, p->dictsize);
|
905
|
-
int s = aux_LZ4_decompress_safe_continue(p->context, srcp, RSTRING_PTR(dest), srcsize, maxsize);
|
873
|
+
LZ4_setStreamDecode(p->context, p->dictbuf, aux_size2int(p->dictsize));
|
874
|
+
int s = aux_LZ4_decompress_safe_continue(p->context, srcp, RSTRING_PTR(dest), aux_size2int(srcsize), aux_size2int(maxsize));
|
906
875
|
if (s < 0) {
|
907
876
|
rb_raise(extlz4_eError,
|
908
877
|
"`max_dest_size' too small, or corrupt lz4'd data");
|
@@ -910,7 +879,7 @@ blkdec_update(int argc, VALUE argv[], VALUE dec)
|
|
910
879
|
rb_str_set_len(dest, s);
|
911
880
|
|
912
881
|
/* copy prefix */
|
913
|
-
if (s < sizeof(p->dictbuf)) {
|
882
|
+
if ((size_t)s < sizeof(p->dictbuf)) {
|
914
883
|
ssize_t discard = (p->dictsize + s) - sizeof(p->dictbuf);
|
915
884
|
if (discard > 0) {
|
916
885
|
size_t remain = p->dictsize - discard;
|
@@ -987,9 +956,6 @@ blkdec_s_linksize(VALUE mod, VALUE str)
|
|
987
956
|
*
|
988
957
|
* 出力先は、max_dest_size が与えられていない場合、必要に応じて自動的に拡張されます。
|
989
958
|
* この場合、いったん圧縮された LZ4 データを走査するため、事前に僅かな CPU 時間を必要とします。
|
990
|
-
*
|
991
|
-
* [INFECTION]
|
992
|
-
* +dest+ < +src+
|
993
959
|
*/
|
994
960
|
static VALUE
|
995
961
|
blkdec_s_decode(int argc, VALUE argv[], VALUE lz4)
|
@@ -1000,9 +966,8 @@ blkdec_s_decode(int argc, VALUE argv[], VALUE lz4)
|
|
1000
966
|
|
1001
967
|
aux_str_reserve(dest, maxsize);
|
1002
968
|
rb_str_set_len(dest, 0);
|
1003
|
-
rb_obj_infect(dest, src);
|
1004
969
|
|
1005
|
-
int size = LZ4_decompress_safe(RSTRING_PTR(src), RSTRING_PTR(dest), RSTRING_LEN(src), maxsize);
|
970
|
+
int size = LZ4_decompress_safe(RSTRING_PTR(src), RSTRING_PTR(dest), rb_long2int(RSTRING_LEN(src)), aux_size2int(maxsize));
|
1006
971
|
if (size < 0) {
|
1007
972
|
rb_raise(extlz4_eError,
|
1008
973
|
"failed LZ4_decompress_safe - max_dest_size is too small, or data is corrupted");
|
data/ext/extlz4.c
CHANGED
data/ext/extlz4.h
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
#include <stdarg.h>
|
7
7
|
#include <stdlib.h>
|
8
8
|
#include <errno.h>
|
9
|
+
#include <stdbool.h>
|
9
10
|
|
10
11
|
#ifndef RB_OBJ_FROZEN
|
11
12
|
# define RB_OBJ_FROZEN OBJ_FROZEN
|
@@ -17,6 +18,10 @@ extern VALUE extlz4_eError; /* class LZ4::Error < ::RuntimeError */
|
|
17
18
|
extern void extlz4_init_blockapi(void);
|
18
19
|
extern void extlz4_init_frameapi(void);
|
19
20
|
|
21
|
+
#ifndef RB_EXT_RACTOR_SAFE
|
22
|
+
# define RB_EXT_RACTOR_SAFE(FEATURE) ((void)(FEATURE))
|
23
|
+
#endif
|
24
|
+
|
20
25
|
#define AUX_FUNCALL(RECV, METHOD, ...) \
|
21
26
|
({ \
|
22
27
|
VALUE args__[] = { __VA_ARGS__ }; \
|
@@ -106,4 +111,16 @@ getref(VALUE obj, const rb_data_type_t *type)
|
|
106
111
|
return checkref(obj, getrefp(obj, type));
|
107
112
|
}
|
108
113
|
|
114
|
+
static inline int
|
115
|
+
aux_size2int(size_t n)
|
116
|
+
{
|
117
|
+
int m = (int)n;
|
118
|
+
|
119
|
+
if (m < 0 || (size_t)m != n) {
|
120
|
+
rb_raise(rb_eRangeError, "out of range integer conversion (size_t to int)");
|
121
|
+
}
|
122
|
+
|
123
|
+
return m;
|
124
|
+
}
|
125
|
+
|
109
126
|
#endif /* !EXTLZ4_H */
|
data/ext/frameapi.c
CHANGED
@@ -210,7 +210,6 @@ fenc_init(int argc, VALUE argv[], VALUE enc)
|
|
210
210
|
rb_str_set_len(p->workbuf, s);
|
211
211
|
rb_funcall2(outport, id_op_lshift, 1, &p->workbuf);
|
212
212
|
p->outport = outport;
|
213
|
-
rb_obj_infect(p->outport, enc);
|
214
213
|
return enc;
|
215
214
|
}
|
216
215
|
|
@@ -244,9 +243,6 @@ fenc_write(int argc, VALUE argv[], VALUE enc)
|
|
244
243
|
struct encoder *p = getencoder(enc);
|
245
244
|
VALUE src;
|
246
245
|
rb_scan_args(argc, argv, "1", &src);
|
247
|
-
rb_obj_infect(enc, src);
|
248
|
-
rb_obj_infect(enc, p->workbuf);
|
249
|
-
rb_obj_infect(p->outport, enc);
|
250
246
|
fenc_update(p, src, NULL);
|
251
247
|
return enc;
|
252
248
|
}
|
@@ -255,9 +251,6 @@ static VALUE
|
|
255
251
|
fenc_push(VALUE enc, VALUE src)
|
256
252
|
{
|
257
253
|
struct encoder *p = getencoder(enc);
|
258
|
-
rb_obj_infect(enc, src);
|
259
|
-
rb_obj_infect(enc, p->workbuf);
|
260
|
-
rb_obj_infect(p->outport, enc);
|
261
254
|
fenc_update(p, src, NULL);
|
262
255
|
return enc;
|
263
256
|
}
|
@@ -430,7 +423,7 @@ aux_read(VALUE obj, size_t size, VALUE buf)
|
|
430
423
|
if (NIL_P(AUX_FUNCALL(obj, id_read, SIZET2NUM(size), buf))) {
|
431
424
|
return Qnil;
|
432
425
|
} else {
|
433
|
-
if (RSTRING_LEN(buf) > size) {
|
426
|
+
if ((size_t)RSTRING_LEN(buf) > size) {
|
434
427
|
rb_raise(rb_eRuntimeError, "most read (%d, but expected to %d)", (int)RSTRING_LEN(buf), (int)size);
|
435
428
|
}
|
436
429
|
return buf;
|
@@ -455,7 +448,6 @@ fdec_init(int argc, VALUE argv[], VALUE dec)
|
|
455
448
|
rb_scan_args(argc, argv, "1", &inport);
|
456
449
|
LZ4F_errorCode_t err = LZ4F_createDecompressionContext(&p->decoder, LZ4F_VERSION);
|
457
450
|
aux_lz4f_check_error(err);
|
458
|
-
rb_obj_infect(dec, inport);
|
459
451
|
p->inport = inport;
|
460
452
|
p->readbuf = rb_str_buf_new(0);
|
461
453
|
char *readp;
|
@@ -519,7 +511,7 @@ fdec_read_fetch(VALUE dec, struct decoder *p)
|
|
519
511
|
rb_str_set_len(p->inbuf, 0);
|
520
512
|
}
|
521
513
|
|
522
|
-
while (RSTRING_LEN(p->inbuf) < p->status) {
|
514
|
+
while ((size_t)RSTRING_LEN(p->inbuf) < p->status) {
|
523
515
|
p->readbuf = aux_read(p->inport, p->status - RSTRING_LEN(p->inbuf), p->readbuf);
|
524
516
|
if (NIL_P(p->readbuf)) {
|
525
517
|
rb_raise(rb_eRuntimeError,
|
@@ -555,7 +547,7 @@ fdec_read_decode(VALUE dec, struct decoder *p, char *dest, size_t size)
|
|
555
547
|
break;
|
556
548
|
}
|
557
549
|
|
558
|
-
if (p->status > 0 && p->outoff >= RSTRING_LEN(p->outbuf)) {
|
550
|
+
if (p->status > 0 && p->outoff >= (size_t)RSTRING_LEN(p->outbuf)) {
|
559
551
|
fdec_read_fetch(dec, p);
|
560
552
|
}
|
561
553
|
|
@@ -591,7 +583,6 @@ fdec_read(int argc, VALUE argv[], VALUE dec)
|
|
591
583
|
VALUE dest;
|
592
584
|
fdec_read_args(argc, argv, &size, &dest);
|
593
585
|
if (size == 0) {
|
594
|
-
rb_obj_infect(dest, dec);
|
595
586
|
return dest;
|
596
587
|
}
|
597
588
|
|
@@ -616,7 +607,6 @@ fdec_read(int argc, VALUE argv[], VALUE dec)
|
|
616
607
|
rb_str_resize(tmpbuf, 0);
|
617
608
|
}
|
618
609
|
|
619
|
-
rb_obj_infect(dest, dec);
|
620
610
|
|
621
611
|
if (RSTRING_LEN(dest) > 0) {
|
622
612
|
return dest;
|
@@ -644,7 +634,6 @@ fdec_getc(VALUE dec)
|
|
644
634
|
size_t s = fdec_read_decode(dec, p, &ch, 1);
|
645
635
|
if (s > 0) {
|
646
636
|
VALUE v = rb_str_new(&ch, 1);
|
647
|
-
rb_obj_infect(v, dec);
|
648
637
|
return v;
|
649
638
|
} else {
|
650
639
|
return Qnil;
|
data/ext/hashargs.c
CHANGED
@@ -6,11 +6,17 @@
|
|
6
6
|
* To the extent possible under law, dearblue has waived all copyright
|
7
7
|
* and related or neighboring rights to this work.
|
8
8
|
*
|
9
|
-
* dearblue <dearblue@users.
|
9
|
+
* dearblue <dearblue@users.osdn.me>
|
10
10
|
*/
|
11
11
|
|
12
12
|
#include "hashargs.h"
|
13
13
|
|
14
|
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
15
|
+
# define aux_noreturn _Noreturn
|
16
|
+
#else
|
17
|
+
# define aux_noreturn
|
18
|
+
#endif
|
19
|
+
|
14
20
|
struct rbx_scanhash_args
|
15
21
|
{
|
16
22
|
struct rbx_scanhash_arg *args;
|
@@ -18,7 +24,7 @@ struct rbx_scanhash_args
|
|
18
24
|
VALUE rest;
|
19
25
|
};
|
20
26
|
|
21
|
-
static void
|
27
|
+
aux_noreturn static void
|
22
28
|
rbx_scanhash_error(ID given, struct rbx_scanhash_arg *args, const struct rbx_scanhash_arg *end)
|
23
29
|
{
|
24
30
|
// 引数の数が㌧でもない数の場合、よくないことが起きそう。
|
@@ -142,7 +148,7 @@ rbx_scanhash(VALUE hash, VALUE rest, struct rbx_scanhash_arg *args, struct rbx_s
|
|
142
148
|
hash = rbx_scanhash_to_hash(hash);
|
143
149
|
if (!NIL_P(hash) && !RHASH_EMPTY_P(hash)) {
|
144
150
|
struct rbx_scanhash_args argset = { args, end, rest };
|
145
|
-
rb_hash_foreach(hash, rbx_scanhash_foreach, (VALUE)&argset);
|
151
|
+
rb_hash_foreach(hash, (int (*)(VALUE, VALUE, VALUE))rbx_scanhash_foreach, (VALUE)&argset);
|
146
152
|
}
|
147
153
|
|
148
154
|
rbx_scanhash_check_missingkeys(args, end);
|
data/ext/hashargs.h
CHANGED
data/ext/lz4_amalgam.c
CHANGED
@@ -3,29 +3,6 @@
|
|
3
3
|
#endif
|
4
4
|
|
5
5
|
#include "../contrib/lz4/lib/lz4.c"
|
6
|
-
|
7
|
-
#define LZ4_isLittleEndian amalg_LZ4_isLittleEndian
|
8
|
-
#define LZ4_read16 amalg_LZ4_read16
|
9
|
-
#define LZ4_read32 amalg_LZ4_read32
|
10
|
-
#define LZ4_read_ARCH amalg_LZ4_read_ARCH
|
11
|
-
#define LZ4_write16 amalg_LZ4_write16
|
12
|
-
#define LZ4_write32 amalg_LZ4_write32
|
13
|
-
#define LZ4_readLE16 amalg_LZ4_readLE16
|
14
|
-
#define LZ4_writeLE16 amalg_LZ4_writeLE16
|
15
|
-
#define LZ4_copy8 amalg_LZ4_copy8
|
16
|
-
#define LZ4_wildCopy amalg_LZ4_wildCopy
|
17
|
-
#define LZ4_minLength amalg_LZ4_minLength
|
18
|
-
#define LZ4_NbCommonBytes amalg_LZ4_NbCommonBytes
|
19
|
-
#define LZ4_count amalg_LZ4_count
|
20
|
-
#define limitedOutput amalg_limitedOutput
|
21
|
-
#define limitedOutput_directive amalg_limitedOutput_directive
|
22
|
-
#define unalign amalg_unalign
|
23
6
|
#include "../contrib/lz4/lib/lz4hc.c"
|
24
|
-
|
25
|
-
#undef ALLOCATOR
|
26
|
-
#undef KB
|
27
|
-
#undef MB
|
28
|
-
#undef GB
|
29
7
|
#include "../contrib/lz4/lib/lz4frame.c"
|
30
|
-
|
31
8
|
#include "../contrib/lz4/lib/xxhash.c"
|
data/gemstub.rb
CHANGED
@@ -1,19 +1,7 @@
|
|
1
|
-
unless File.read("README.md"
|
1
|
+
unless ver = File.read("README.md").scan(/^\s*[\*\-]\s*version:{1,2}\s*(.+)/i).flatten[-1]
|
2
2
|
raise "バージョン情報が README.md に見つかりません"
|
3
3
|
end
|
4
4
|
|
5
|
-
ver = $1
|
6
|
-
verfile = "lib/extlz4/version.rb"
|
7
|
-
LIB << verfile
|
8
|
-
|
9
|
-
file verfile => "README.md" do |*args|
|
10
|
-
File.binwrite args[0].name, <<-VERSION_FILE
|
11
|
-
module LZ4
|
12
|
-
VERSION = "#{ver}"
|
13
|
-
end
|
14
|
-
VERSION_FILE
|
15
|
-
end
|
16
|
-
|
17
5
|
|
18
6
|
unmatch = %r(\bcontrib/lz4/(?:Makefile|appveyor\.yml|contrib|doc|examples|lib/Makefile|lib/dll|programs|tests|visual)(?:$|/))
|
19
7
|
|
@@ -29,12 +17,13 @@ GEMSTUB = Gem::Specification.new do |s|
|
|
29
17
|
s.version = ver
|
30
18
|
s.summary = "ruby bindings for LZ4"
|
31
19
|
s.description = <<EOS
|
32
|
-
ruby bindings for LZ4 <https://github.com/lz4/lz4>.
|
20
|
+
unofficial ruby bindings for LZ4 <https://github.com/lz4/lz4>.
|
33
21
|
EOS
|
34
22
|
s.homepage = "https://github.com/dearblue/ruby-extlz4"
|
35
23
|
s.license = "BSD-2-Clause"
|
36
24
|
s.author = "dearblue"
|
37
|
-
s.email = "dearblue@users.
|
25
|
+
s.email = "dearblue@users.osdn.me"
|
38
26
|
|
39
|
-
s.add_development_dependency "rake"
|
27
|
+
s.add_development_dependency "rake", "~> 0"
|
28
|
+
s.add_development_dependency "test-unit", "~> 3.3"
|
40
29
|
end
|
data/lib/extlz4/oldstream.rb
CHANGED
data/lib/extlz4.rb
CHANGED
@@ -4,9 +4,11 @@ require "stringio"
|
|
4
4
|
|
5
5
|
ver = RUBY_VERSION[/\d+\.\d+/]
|
6
6
|
soname = File.basename(__FILE__, ".rb") << ".so"
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
begin
|
8
|
+
require_relative File.join(ver, soname)
|
9
|
+
rescue LoadError
|
10
|
+
require File.join(ver, soname)
|
11
|
+
end
|
10
12
|
|
11
13
|
#
|
12
14
|
# LZ4 data and streaming data processor.
|
@@ -322,6 +324,52 @@ module LZ4
|
|
322
324
|
alias block_stream_decompress block_stream_decode
|
323
325
|
alias block_stream_uncompress block_stream_decode
|
324
326
|
end
|
327
|
+
|
328
|
+
refine String do
|
329
|
+
#
|
330
|
+
# call-seq:
|
331
|
+
# to_lz4frame(level = 1, opts = {}) -> lz4 frame'd data
|
332
|
+
#
|
333
|
+
def to_lz4frame(*args)
|
334
|
+
LZ4.encode self, *args
|
335
|
+
end
|
336
|
+
|
337
|
+
#
|
338
|
+
# call-seq:
|
339
|
+
# unlz4frame -> decoded data
|
340
|
+
#
|
341
|
+
def unlz4frame(*args, &block)
|
342
|
+
LZ4.decode self, *args, &block
|
343
|
+
end
|
344
|
+
|
345
|
+
def to_lz4block(*args)
|
346
|
+
LZ4.block_encode(self, *args)
|
347
|
+
end
|
348
|
+
|
349
|
+
def unlz4block(*args)
|
350
|
+
LZ4.block_decode(self, *args)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
refine Object do
|
355
|
+
#
|
356
|
+
# call-seq:
|
357
|
+
# to_lz4frame(level = 1, opts = {}) -> stream encoder
|
358
|
+
# to_lz4frame(level = 1, opts = {}) { |stream_encoder| ... } -> yield_status
|
359
|
+
#
|
360
|
+
def to_lz4frame(*args, &block)
|
361
|
+
LZ4.encode self, *args, &block
|
362
|
+
end
|
363
|
+
|
364
|
+
#
|
365
|
+
# call-seq:
|
366
|
+
# -> decoder
|
367
|
+
# { |decoder| ... } -> yield_status
|
368
|
+
#
|
369
|
+
def unlz4frame(*args, &block)
|
370
|
+
LZ4.decode self, *args, &block
|
371
|
+
end
|
372
|
+
end
|
325
373
|
end
|
326
374
|
|
327
375
|
require_relative "extlz4/compat"
|
data/test/common.rb
CHANGED
@@ -14,5 +14,5 @@ SAMPLES = {
|
|
14
14
|
"random (big size)" => OpenSSL::Random.random_bytes(BIGSIZE),
|
15
15
|
}
|
16
16
|
|
17
|
-
SAMPLES["freebsd ports index"] = File.read("/usr/ports/INDEX-
|
18
|
-
SAMPLES["freebsd kernel"] = File.read("/boot/kernel/kernel", mode: "rb") rescue nil # if on FreeBSD
|
17
|
+
(SAMPLES["freebsd ports index"] = File.read("/usr/ports/INDEX-12", mode: "rb")) rescue nil # if on FreeBSD
|
18
|
+
(SAMPLES["freebsd kernel"] = File.read("/boot/kernel/kernel", mode: "rb")) rescue nil # if on FreeBSD
|