ffi-zlib 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010 Scott Chacon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,14 @@
1
+ ffi-zlib
2
+ ========
3
+
4
+ A ruby-ffi wrapper for the zlib library.
5
+
6
+ Installation
7
+ ============
8
+
9
+ [sudo] gem install ffi-zlib
10
+
11
+ Usage
12
+ =====
13
+
14
+ ffi-zlib being a very thin wrapper roughly reproducing the zlib header(s), you can simply refer to the zlib [manual](http://www.zlib.net/manual.html) for details and usage.
@@ -0,0 +1,213 @@
1
+ # =============================================================================
2
+
3
+ require "rubygems"
4
+ require "ffi"
5
+
6
+ # =============================================================================
7
+
8
+ module FFI::Zlib
9
+ extend FFI::Library
10
+ ffi_lib("z")
11
+
12
+ # -------------------------------------------------------------------------
13
+
14
+ attach_function :zlibVersion, [ ], :string
15
+
16
+ # -------------------------------------------------------------------------
17
+
18
+ ZLIB_VERSION = zlibVersion()
19
+
20
+ # Allowed flush values.
21
+
22
+ Z_NO_FLUSH = 0
23
+ Z_PARTIAL_FLUSH = 1
24
+ Z_SYNC_FLUSH = 2
25
+ Z_FULL_FLUSH = 3
26
+ Z_FINISH = 4
27
+ Z_BLOCK = 5
28
+
29
+ # Return codes for the compression/decompression functions.
30
+ # Negative values are errors, positive values are used for special but
31
+ # normal events.
32
+
33
+ Z_OK = 0
34
+ Z_STREAM_END = 1
35
+ Z_NEED_DICT = 2
36
+ Z_ERRNO = -1
37
+ Z_STREAM_ERROR = -2
38
+ Z_DATA_ERROR = -3
39
+ Z_MEM_ERROR = -4
40
+ Z_BUF_ERROR = -5
41
+ Z_VERSION_ERROR = -6
42
+
43
+ # Compression levels.
44
+
45
+ Z_NO_COMPRESSION = 0
46
+ Z_BEST_SPEED = 1
47
+ Z_BEST_COMPRESSION = 9
48
+ Z_DEFAULT_COMPRESSION = -1
49
+
50
+ # Compression strategies.
51
+
52
+ Z_FILTERED = 1
53
+ Z_HUFFMAN_ONLY = 2
54
+ Z_RLE = 3
55
+ Z_FIXED = 4
56
+ Z_DEFAULT_STRATEGY = 0
57
+
58
+ # Possible values of the data_type field.
59
+
60
+ Z_BINARY = 0
61
+ Z_TEXT = 1
62
+ Z_UNKNOWN = 2
63
+
64
+ # The deflate compression method (the only one supported).
65
+
66
+ Z_DEFLATED = 8
67
+
68
+ # -------------------------------------------------------------------------
69
+
70
+ class Z_stream < FFI::Struct
71
+ layout :next_in, :pointer,
72
+ :avail_in, :uint,
73
+ :total_in, :ulong,
74
+
75
+ :next_out, :pointer,
76
+ :avail_out, :uint,
77
+ :total_out, :ulong,
78
+
79
+ :msg, :string,
80
+ :state, :pointer,
81
+
82
+ :alloc_func, :pointer,
83
+ :free_func, :pointer,
84
+ :opaque, :pointer,
85
+
86
+ :data_type, :int,
87
+ :adler, :ulong,
88
+ :reserved, :ulong
89
+ end
90
+
91
+ # -------------------------------------------------------------------------
92
+
93
+ class GZ_header < FFI::Struct
94
+ layout :text, :int,
95
+ :time, :ulong,
96
+ :xflags, :int,
97
+ :os, :int,
98
+
99
+ :extra, :pointer,
100
+ :extra_len, :uint,
101
+ :extra_max, :uint,
102
+
103
+ :name, :string,
104
+ :name_max, :uint,
105
+ :comment, :string,
106
+ :comm_max, :uint,
107
+
108
+ :hcrc, :int,
109
+ :done, :int
110
+ end
111
+
112
+ # -------------------------------------------------------------------------
113
+
114
+ def self.deflateInit(zstream, level)
115
+ deflateInit_(zstream, level, ZLIB_VERSION, zstream.size)
116
+ end
117
+
118
+ def self.deflateInit2(zstream, level, method, window_bits, mem_level, strategy)
119
+ deflateInit2_(zstream, level, method, window_bits, mem_level, strategy, ZLIB_VERSION, zstream.size)
120
+ end
121
+
122
+ attach_function :deflateInit_, [:pointer, :int, :string, :int], :int
123
+ attach_function :deflateInit2_, [:pointer, :int, :int, :int, :int, :int, :string, :int], :int
124
+ attach_function :deflate, [:pointer, :int], :int
125
+ attach_function :deflateEnd, [:pointer], :int
126
+
127
+ attach_function :deflateSetDictionary, [:pointer, :pointer, :uint], :int
128
+ attach_function :deflateCopy, [:pointer, :pointer], :int
129
+ attach_function :deflateReset, [:pointer], :int
130
+ attach_function :deflateParams, [:pointer, :int, :int], :int
131
+ attach_function :deflateTune, [:pointer, :int, :int, :int, :int], :int
132
+ attach_function :deflateBound, [:pointer, :ulong], :ulong
133
+ attach_function :deflatePrime, [:pointer, :int, :int], :int
134
+ attach_function :deflateSetHeader, [:pointer, :pointer], :int
135
+
136
+ # -------------------------------------------------------------------------
137
+
138
+ def self.inflateInit(zstream)
139
+ inflateInit_(zstream, ZLIB_VERSION, zstream.size)
140
+ end
141
+
142
+ def self.inflateInit2(zstream, window_bits)
143
+ inflateInit2_(zstream, window_bits, ZLIB_VERSION, zstream.size)
144
+ end
145
+
146
+ attach_function :inflateInit_, [:pointer, :string, :int], :int
147
+ attach_function :inflateInit2_, [:pointer, :int, :string, :int], :int
148
+ attach_function :inflate, [:pointer, :int], :int
149
+ attach_function :inflateEnd, [:pointer], :int
150
+
151
+ attach_function :inflateSetDictionary, [:pointer, :pointer, :uint], :int
152
+ attach_function :inflateSync, [:pointer], :int
153
+ attach_function :inflateCopy, [:pointer, :pointer], :int
154
+ attach_function :inflateReset, [:pointer], :int
155
+ attach_function :inflatePrime, [:pointer, :int, :int], :int
156
+ attach_function :inflateGetHeader, [:pointer, :pointer], :int
157
+
158
+ callback :in_func, [:pointer, :pointer], :uint
159
+ callback :out_func, [:pointer, :pointer, :uint], :int
160
+
161
+ attach_function :inflateBackInit_, [:pointer, :int, :pointer], :int
162
+ attach_function :inflateBack, [:pointer, :in_func, :pointer, :out_func, :pointer], :int
163
+ attach_function :inflateBackEnd, [:pointer], :int
164
+
165
+ # -------------------------------------------------------------------------
166
+
167
+ attach_function :compress, [:pointer, :buffer_inout, :pointer, :ulong], :int
168
+ attach_function :compress2, [:pointer, :pointer, :pointer, :ulong, :int], :int
169
+ attach_function :compressBound, [:ulong], :ulong
170
+
171
+ attach_function :uncompress, [:pointer, :buffer_inout, :pointer, :ulong], :int
172
+
173
+ # -------------------------------------------------------------------------
174
+
175
+ attach_function :gzopen, [:string, :string], :pointer
176
+ attach_function :gzdopen, [:int, :string], :pointer
177
+ attach_function :gzsetparams, [:pointer, :int, :int], :int
178
+ attach_function :gzread, [:pointer, :pointer, :uint], :int
179
+ attach_function :gzwrite, [:pointer, :pointer, :uint], :int
180
+ attach_function :gzprintf, [:pointer, :string, :varargs], :int
181
+ attach_function :gzputs, [:pointer, :string], :int
182
+ attach_function :gzgets, [:pointer, :pointer, :int], :pointer
183
+ attach_function :gzputc, [:pointer, :int], :int
184
+ attach_function :gzgetc, [:pointer, :pointer], :int
185
+ attach_function :gzungetc, [:int, :pointer], :int
186
+ attach_function :gzflush, [:pointer, :int], :int
187
+ attach_function :gzseek, [:pointer, :long, :int], :long
188
+ attach_function :gzrewind, [:pointer], :int
189
+ attach_function :gztell, [:pointer], :long
190
+ attach_function :gzeof, [:pointer], :int
191
+ attach_function :gzdirect, [:pointer], :int
192
+ attach_function :gzclose, [:pointer], :int
193
+ attach_function :gzerror, [:pointer, :buffer_out], :string
194
+ attach_function :gzclearerr, [:pointer], :void
195
+
196
+ # -------------------------------------------------------------------------
197
+
198
+ attach_function :adler32, [:ulong, :pointer, :uint], :ulong
199
+ attach_function :adler32_combine, [:ulong, :ulong, :long], :ulong
200
+ attach_function :crc32, [:ulong, :pointer, :uint], :ulong
201
+ attach_function :crc32_combine, [:ulong, :ulong, :long], :ulong
202
+
203
+ # -------------------------------------------------------------------------
204
+
205
+ attach_function :zlibCompileFlags, [ ], :ulong
206
+ attach_function :zError, [:int], :string
207
+ attach_function :inflateSyncPoint, [:pointer], :int
208
+ attach_function :get_crc_table, [ ], :pointer
209
+
210
+ # -------------------------------------------------------------------------
211
+ end
212
+
213
+ # =============================================================================
@@ -0,0 +1,35 @@
1
+ Look again at that dot. That's here. That's home. That's us. On it everyone you
2
+ love, everyone you know, everyone you ever heard of, every human being who ever
3
+ was, lived out their lives. The aggregate of our joy and suffering, thousands of
4
+ confident religions, ideologies, and economic doctrines, every hunter and
5
+ forager, every hero and coward, every creator and destroyer of civilization,
6
+ every king and peasant, every young couple in love, every mother and father,
7
+ hopeful child, inventor and explorer, every teacher of morals, every corrupt
8
+ politician, every "superstar," every "supreme leader," every saint and sinner in
9
+ the history of our species lived there – on a mote of dust suspended in a
10
+ sunbeam.
11
+
12
+ The Earth is a very small stage in a vast cosmic arena. Think of the rivers of
13
+ blood spilled by all those generals and emperors so that, in glory and triumph,
14
+ they could become the momentary masters of a fraction of a dot. Think of the
15
+ endless cruelties visited by the inhabitants of one corner of this pixel on the
16
+ scarcely distinguishable inhabitants of some other corner, how frequent their
17
+ misunderstandings, how eager they are to kill one another, how fervent their
18
+ hatreds.
19
+
20
+ Our posturings, our imagined self-importance, the delusion that we have some
21
+ privileged position in the Universe, are challenged by this point of pale light.
22
+ Our planet is a lonely speck in the great enveloping cosmic dark. In our
23
+ obscurity, in all this vastness, there is no hint that help will come from
24
+ elsewhere to save us from ourselves.
25
+
26
+ The Earth is the only world known so far to harbor life. There is nowhere else,
27
+ at least in the near future, to which our species could migrate. Visit, yes.
28
+ Settle, not yet. Like it or not, for the moment the Earth is where we make our
29
+ stand.
30
+
31
+ It has been said that astronomy is a humbling and character-building experience.
32
+ There is perhaps no better demonstration of the folly of human conceits than
33
+ this distant image of our tiny world. To me, it underscores our responsibility
34
+ to deal more kindly with one another, and to preserve and cherish the pale blue
35
+ dot, the only home we've ever known.
@@ -0,0 +1,92 @@
1
+ require "test/unit"
2
+ require "ffi/zlib"
3
+ require "test/helper.rb"
4
+
5
+ class TestAdler32 < Test::Unit::TestCase
6
+ include Setup
7
+
8
+ EXPECTED_ADLER32_1 = 3874980441
9
+ EXPECTED_ADLER32_2 = 1707704336
10
+ EXPECTED_ADLER32_FULL = 869204599
11
+
12
+ def adler32(data)
13
+ @buffer.put_string(0, data)
14
+ checksum = FFI::Zlib.adler32(0, nil, 0)
15
+ FFI::Zlib.adler32(checksum, @buffer, data.length)
16
+ end
17
+
18
+ def test_adler32
19
+ checksum = self.adler32(@data)
20
+ assert_equal checksum, EXPECTED_ADLER32_FULL
21
+ end
22
+
23
+ def test_running_adler32
24
+ checksum = FFI::Zlib.adler32(0, nil, 0)
25
+ @data.each_line do |line|
26
+ @buffer.put_string(0, line)
27
+ checksum = FFI::Zlib.adler32(checksum, @buffer, line.length)
28
+ end
29
+
30
+ assert_equal checksum, EXPECTED_ADLER32_FULL
31
+ end
32
+
33
+ def test_adler32_combine
34
+ middle, _ = @data.length.divmod(2)
35
+ piece1 = @data[0...middle]
36
+ piece2 = @data[middle..-1]
37
+
38
+ checksum1 = self.adler32(piece1)
39
+ checksum2 = self.adler32(piece2)
40
+ checksum = FFI::Zlib.adler32_combine(checksum1, checksum2, piece2.length)
41
+
42
+ assert_equal checksum1, EXPECTED_ADLER32_1
43
+ assert_equal checksum2, EXPECTED_ADLER32_2
44
+ assert_equal checksum, EXPECTED_ADLER32_FULL
45
+ end
46
+
47
+
48
+ end
49
+
50
+ class TestCRC32 < Test::Unit::TestCase
51
+ include Setup
52
+
53
+ EXPECTED_CRC32_1 = 4007132158
54
+ EXPECTED_CRC32_2 = 1117097248
55
+ EXPECTED_CRC32_FULL = 703194008
56
+
57
+ def crc32(data)
58
+ @buffer.put_string(0, data)
59
+ checksum = FFI::Zlib.crc32(0, nil, 0)
60
+ checksum = FFI::Zlib.crc32(checksum, @buffer, data.length)
61
+ end
62
+
63
+ def test_crc32
64
+ checksum = self.crc32(@data)
65
+ assert_equal checksum, EXPECTED_CRC32_FULL
66
+ end
67
+
68
+ def test_running_crc32
69
+ checksum = FFI::Zlib.crc32(0, nil, 0)
70
+ @data.each_line do |line|
71
+ @buffer.put_string(0, line)
72
+ checksum = FFI::Zlib.crc32(checksum, @buffer, line.length)
73
+ end
74
+
75
+ assert_equal checksum, EXPECTED_CRC32_FULL
76
+ end
77
+
78
+ def test_crc32_combine
79
+ middle, _ = @data.length.divmod(2)
80
+ piece1 = @data[0...middle]
81
+ piece2 = @data[middle..-1]
82
+
83
+ checksum1 = self.crc32(piece1)
84
+ checksum2 = self.crc32(piece2)
85
+ checksum = FFI::Zlib.crc32_combine(checksum1, checksum2, piece2.length)
86
+
87
+ assert_equal checksum1, EXPECTED_CRC32_1
88
+ assert_equal checksum2, EXPECTED_CRC32_2
89
+ assert_equal checksum, EXPECTED_CRC32_FULL
90
+ end
91
+
92
+ end
@@ -0,0 +1,52 @@
1
+ require "test/unit"
2
+ require "ffi/zlib"
3
+ require "test/helper.rb"
4
+
5
+ class TestCompress < Test::Unit::TestCase
6
+ include Setup
7
+
8
+ def test_compress
9
+ do_test
10
+
11
+ s1 = do_test(FFI::Zlib::Z_NO_COMPRESSION)
12
+ s2 = do_test(FFI::Zlib::Z_BEST_SPEED)
13
+ s3 = do_test(FFI::Zlib::Z_DEFAULT_COMPRESSION)
14
+ s4 = do_test(FFI::Zlib::Z_BEST_COMPRESSION)
15
+
16
+ assert s1 > s2
17
+ assert s2 > s3
18
+ assert s3 >= s4
19
+ end
20
+
21
+ def do_test(level=nil)
22
+ @buffer.put_string(0, @data)
23
+
24
+ buffer_size = FFI::Zlib.compressBound(@data.length)
25
+ assert_not_equal buffer_size, 0
26
+
27
+ compressed_buffer_size = FFI::Buffer.alloc_inout(:ulong).put_ulong(0, buffer_size)
28
+ compressed_buffer = FFI::MemoryPointer.new(buffer_size)
29
+
30
+ if level.nil?
31
+ result = FFI::Zlib.compress(compressed_buffer, compressed_buffer_size, @buffer, @data.length)
32
+ else
33
+ result = FFI::Zlib.compress2(compressed_buffer, compressed_buffer_size, @buffer, @data.length, level)
34
+ end
35
+
36
+ compressed_size = compressed_buffer_size.get_ulong(0)
37
+ assert_equal result, FFI::Zlib::Z_OK
38
+
39
+ uncompressed_buffer_size = FFI::Buffer.alloc_inout(:ulong).put_ulong(0, @data.length)
40
+ uncompressed_buffer = FFI::MemoryPointer.new(@data.length)
41
+ result = FFI::Zlib.uncompress(uncompressed_buffer, uncompressed_buffer_size, compressed_buffer, compressed_size)
42
+
43
+ uncompressed_size = uncompressed_buffer_size.get_ulong(0)
44
+ uncompressed = uncompressed_buffer.get_string(0)
45
+ assert_equal result, FFI::Zlib::Z_OK
46
+ assert_equal uncompressed_size, @data.length
47
+ assert_equal uncompressed, @data
48
+
49
+ return compressed_size
50
+ end
51
+
52
+ end
@@ -0,0 +1,71 @@
1
+ require "test/unit"
2
+ require "ffi/zlib"
3
+ require "test/helper.rb"
4
+
5
+ class TestDeflate < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @data = File.read(File.join("test", "fixtures", "pale_blue_dot.txt"))
9
+ @buffer = FFI::MemoryPointer.new(@data.length)
10
+ @buffer.put_string(0, @data)
11
+ end
12
+
13
+ def test_deflate
14
+ s1 = do_test_deflate(FFI::Zlib::Z_NO_COMPRESSION)
15
+ s2 = do_test_deflate(FFI::Zlib::Z_BEST_SPEED)
16
+ s3 = do_test_deflate(FFI::Zlib::Z_DEFAULT_COMPRESSION)
17
+ s4 = do_test_deflate(FFI::Zlib::Z_BEST_COMPRESSION)
18
+
19
+ assert s1 > s2
20
+ assert s2 > s3
21
+ assert s3 >= s4
22
+ end
23
+
24
+ def do_test_deflate(level)
25
+ avail_out = @data.length + 64
26
+ compressed_buffer = FFI::MemoryPointer.new(avail_out)
27
+
28
+ zstream = FFI::Zlib::Z_stream.new
29
+ zstream[:next_in] = @buffer
30
+ zstream[:avail_in] = @data.length
31
+ zstream[:next_out] = compressed_buffer
32
+ zstream[:avail_out] = avail_out
33
+
34
+ result = FFI::Zlib.deflateInit(zstream, level)
35
+ assert_equal result, FFI::Zlib::Z_OK
36
+
37
+ result = FFI::Zlib.deflate(zstream, FFI::Zlib::Z_FINISH)
38
+ assert_equal result, FFI::Zlib::Z_STREAM_END
39
+
40
+ result = FFI::Zlib.deflateEnd(zstream)
41
+ assert_equal result, FFI::Zlib::Z_OK
42
+
43
+ compressed_size = zstream[:total_out]
44
+ assert compressed_size > 0
45
+ assert compressed_size <= @data.length if level != FFI::Zlib::Z_NO_COMPRESSION
46
+
47
+ decompressed_buffer = FFI::MemoryPointer.new(@data.length)
48
+ zstream = FFI::Zlib::Z_stream.new
49
+ zstream[:next_in] = compressed_buffer
50
+ zstream[:avail_in] = compressed_size
51
+ zstream[:next_out] = decompressed_buffer
52
+ zstream[:avail_out] = @data.length
53
+
54
+ result = FFI::Zlib.inflateInit(zstream)
55
+ assert_equal result, FFI::Zlib::Z_OK
56
+
57
+ result = FFI::Zlib.inflate(zstream, FFI::Zlib::Z_FINISH)
58
+ assert_equal result, FFI::Zlib::Z_STREAM_END
59
+
60
+ result = FFI::Zlib.inflateEnd(zstream)
61
+ assert_equal result, FFI::Zlib::Z_OK
62
+
63
+ decompressed_size = zstream[:total_out]
64
+ decompressed_data = decompressed_buffer.get_string(0, decompressed_size)
65
+ assert_equal decompressed_size, @data.length
66
+ assert_equal decompressed_data, @data
67
+
68
+ return compressed_size
69
+ end
70
+
71
+ end
@@ -0,0 +1,3 @@
1
+ require "test/unit"
2
+ require "ffi/zlib"
3
+ require "test/helper.rb"
@@ -0,0 +1,38 @@
1
+ require "test/unit"
2
+ require "ffi/zlib"
3
+ require "test/helper.rb"
4
+
5
+ class TestMisc < Test::Unit::TestCase
6
+
7
+ def test_version
8
+ assert_not_nil FFI::Zlib.zlibVersion
9
+ end
10
+
11
+ def test_compile_flags
12
+ assert_not_equal FFI::Zlib.zlibCompileFlags, 0
13
+ end
14
+
15
+ def test_crc_table
16
+ table = FFI::Zlib.get_crc_table
17
+ assert_not_nil table
18
+ end
19
+
20
+ def test_errors
21
+ do_test_error FFI::Zlib::Z_OK
22
+ do_test_error FFI::Zlib::Z_STREAM_END
23
+ do_test_error FFI::Zlib::Z_NEED_DICT
24
+ do_test_error FFI::Zlib::Z_ERRNO
25
+ do_test_error FFI::Zlib::Z_STREAM_ERROR
26
+ do_test_error FFI::Zlib::Z_DATA_ERROR
27
+ do_test_error FFI::Zlib::Z_MEM_ERROR
28
+ do_test_error FFI::Zlib::Z_BUF_ERROR
29
+ do_test_error FFI::Zlib::Z_VERSION_ERROR
30
+ end
31
+
32
+ def do_test_error(err)
33
+ err_str = FFI::Zlib.zError(err)
34
+ assert_not_nil err_str
35
+ assert_instance_of String, err_str
36
+ end
37
+
38
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi-zlib
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Luc Heinrich
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-31 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ffi
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: ffi-zlib provides a very thin wrapper around zlib using the Ruby FFI library.
36
+ email: luc@honk-honk.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/ffi/zlib.rb
45
+ - test/fixtures/pale_blue_dot.txt
46
+ - README.md
47
+ - LICENSE
48
+ - test/test_checksums.rb
49
+ - test/test_compress.rb
50
+ - test/test_deflate.rb
51
+ - test/test_gz.rb
52
+ - test/test_misc.rb
53
+ has_rdoc: true
54
+ homepage: http://github.com/lucsky/ffi-zlib
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.3.7
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: FFI based wrapper for zlib.
87
+ test_files:
88
+ - test/test_checksums.rb
89
+ - test/test_compress.rb
90
+ - test/test_deflate.rb
91
+ - test/test_gz.rb
92
+ - test/test_misc.rb