ruby-xz 0.2.0 → 0.2.1
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/COPYING +2 -2
- data/HISTORY.rdoc +5 -0
- data/README.rdoc +5 -2
- data/lib/xz.rb +39 -40
- data/lib/xz/lib_lzma.rb +21 -21
- data/lib/xz/stream.rb +5 -5
- data/lib/xz/stream_reader.rb +12 -12
- data/lib/xz/stream_writer.rb +14 -14
- metadata +6 -7
- data/VERSION +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c1956c341bfbdbb6a5b002b47f8c418fafe3c8c
|
4
|
+
data.tar.gz: 8af67a57895f50f871a4509fc94f57932be150a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c04ff79076e081427e827e87fe489a882bf8b22674ebb3e0c3c8af26877c54b9b2140da1d61527da305bbcf062d4d5e687ce011a702a8300ce68a426bdba127
|
7
|
+
data.tar.gz: faac093525a0ab41c0fd35a2b3e39a95c70ca70c312dc6accf051343c17f770d2ed396b9266f93c7a67ff887bf450b9cc2b649cb69df7c074c03cc980054d455
|
data/COPYING
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
Basic liblzma-bindings for Ruby.
|
4
4
|
|
5
|
-
Copyright © 2011-2013 Marvin Gülker
|
5
|
+
Copyright © 2011-2013 Marvin Gülker et al.
|
6
6
|
|
7
|
-
|
7
|
+
See the file `AUTHORS' for the full list of contributors.
|
8
8
|
|
9
9
|
Permission is hereby granted, free of charge, to any person obtaining
|
10
10
|
a copy of this software and associated documentation files (the
|
data/HISTORY.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -29,6 +29,9 @@ everything you need to use ruby-xz. As said, it's not big, but powerful:
|
|
29
29
|
You can create and extract whole archive files, compress or decompress
|
30
30
|
streams of data or just plain strings.
|
31
31
|
|
32
|
+
You can read the documentation on your local gemserver, or online at
|
33
|
+
http://quintus.github.io/ruby-xz/.
|
34
|
+
|
32
35
|
=== First step
|
33
36
|
|
34
37
|
You have to require ruby-xz. Note the file you have to require is named
|
@@ -63,9 +66,9 @@ what is possible.
|
|
63
66
|
|
64
67
|
Basic liblzma-bindings for Ruby.
|
65
68
|
|
66
|
-
Copyright © 2011-2013 Marvin Gülker
|
69
|
+
Copyright © 2011-2013 Marvin Gülker et al.
|
67
70
|
|
68
|
-
|
71
|
+
See AUTHORS for the full list of contributors.
|
69
72
|
|
70
73
|
Permission is hereby granted, free of charge, to any person obtaining a
|
71
74
|
copy of this software and associated documentation files (the ‘Software’),
|
data/lib/xz.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# (The MIT License)
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# Basic liblzma-bindings for Ruby.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright © 2011,2012 Marvin Gülker
|
7
7
|
# Copyright © 2011 Christoph Plank
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
10
10
|
# copy of this software and associated documentation files (the ‘Software’),
|
11
11
|
# to deal in the Software without restriction, including without limitation
|
12
12
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
13
13
|
# and/or sell copies of the Software, and to permit persons to whom the Software
|
14
14
|
# is furnished to do so, subject to the following conditions:
|
15
|
-
#
|
15
|
+
#
|
16
16
|
# The above copyright notice and this permission notice shall be included in all
|
17
17
|
# copies or substantial portions of the Software.
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
20
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
21
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -40,15 +40,14 @@ require "io/like"
|
|
40
40
|
#ruby-xz can’t handle this as compiled strings don’t come with encoding
|
41
41
|
#information.
|
42
42
|
module XZ
|
43
|
-
|
44
|
-
|
43
|
+
#The version of this library.
|
44
|
+
VERSION = "0.2.1"
|
45
|
+
|
45
46
|
#Number of bytes read in one chunk.
|
46
47
|
CHUNK_SIZE = 4096
|
47
|
-
|
48
|
-
VERSION = Pathname.new(__FILE__).dirname.expand_path.parent.join("VERSION").read.chomp.freeze
|
49
|
-
|
48
|
+
|
50
49
|
class << self
|
51
|
-
|
50
|
+
|
52
51
|
#call-seq:
|
53
52
|
# decompress_stream(io [, memory_limit [, flags ] ] ) → a_string
|
54
53
|
# decompress_stream(io [, memory_limit [, flags ] ] ){|chunk| ... } → an_integer
|
@@ -90,30 +89,30 @@ module XZ
|
|
90
89
|
flags.each do |flag|
|
91
90
|
raise(ArgumentError, "Unknown flag #{flag}!") unless [:tell_no_check, :tell_unsupported_check, :tell_any_check, :concatenated].include?(flag)
|
92
91
|
end
|
93
|
-
|
92
|
+
|
94
93
|
stream = LZMAStream.new
|
95
94
|
res = LibLZMA.lzma_stream_decoder(
|
96
95
|
stream.pointer,
|
97
96
|
memory_limit,
|
98
97
|
flags.inject(0){|val, flag| val | LibLZMA.const_get(:"LZMA_#{flag.to_s.upcase}")}
|
99
98
|
)
|
100
|
-
|
99
|
+
|
101
100
|
LZMAError.raise_if_necessary(res)
|
102
|
-
|
101
|
+
|
103
102
|
res = ""
|
104
|
-
res.encode!(
|
103
|
+
res.encode!(Encoding::BINARY)
|
105
104
|
if block_given?
|
106
105
|
res = lzma_code(io, stream, &block)
|
107
106
|
else
|
108
107
|
lzma_code(io, stream){|chunk| res << chunk}
|
109
108
|
end
|
110
|
-
|
109
|
+
|
111
110
|
LibLZMA.lzma_end(stream.pointer)
|
112
|
-
|
111
|
+
|
113
112
|
block_given? ? stream[:total_out] : res
|
114
113
|
end
|
115
114
|
alias decode_stream decompress_stream
|
116
|
-
|
115
|
+
|
117
116
|
#call-seq:
|
118
117
|
# compress_stream(io [, compression_level [, check [, extreme ] ] ] ) → a_string
|
119
118
|
# compress_stream(io [, compression_level [, check [, extreme ] ] ] ){|chunk| ... } → an_integer
|
@@ -157,28 +156,28 @@ module XZ
|
|
157
156
|
def compress_stream(io, compression_level = 6, check = :crc64, extreme = false, &block)
|
158
157
|
raise(ArgumentError, "Invalid compression level!") unless (0..9).include?(compression_level)
|
159
158
|
raise(ArgumentError, "Invalid checksum specified!") unless [:none, :crc32, :crc64, :sha256].include?(check)
|
160
|
-
|
159
|
+
|
161
160
|
stream = LZMAStream.new
|
162
161
|
res = LibLZMA.lzma_easy_encoder(stream.pointer,
|
163
162
|
compression_level | (extreme ? LibLZMA::LZMA_PRESET_EXTREME : 0),
|
164
163
|
LibLZMA::LZMA_CHECK[:"lzma_check_#{check}"])
|
165
|
-
|
164
|
+
|
166
165
|
LZMAError.raise_if_necessary(res)
|
167
|
-
|
166
|
+
|
168
167
|
res = ""
|
169
|
-
res.encode!(
|
168
|
+
res.encode!(Encoding::BINARY)
|
170
169
|
if block_given?
|
171
170
|
res = lzma_code(io, stream, &block)
|
172
171
|
else
|
173
172
|
lzma_code(io, stream){|chunk| res << chunk}
|
174
173
|
end
|
175
|
-
|
174
|
+
|
176
175
|
LibLZMA.lzma_end(stream.pointer)
|
177
|
-
|
176
|
+
|
178
177
|
block_given? ? stream[:total_out] : res
|
179
178
|
end
|
180
179
|
alias encode_stream compress_stream
|
181
|
-
|
180
|
+
|
182
181
|
#Compresses +in_file+ and writes the result to +out_file+.
|
183
182
|
#===Parameters
|
184
183
|
#[in_file] The path to the file to read from.
|
@@ -202,7 +201,7 @@ module XZ
|
|
202
201
|
end
|
203
202
|
end
|
204
203
|
end
|
205
|
-
|
204
|
+
|
206
205
|
#Compresses arbitrary data using the XZ algorithm.
|
207
206
|
#===Parameters
|
208
207
|
#[str] The data to compress.
|
@@ -220,7 +219,7 @@ module XZ
|
|
220
219
|
s = StringIO.new(str)
|
221
220
|
compress_stream(s, compression_level, check, extreme)
|
222
221
|
end
|
223
|
-
|
222
|
+
|
224
223
|
#Decompresses data in XZ format.
|
225
224
|
#===Parameters
|
226
225
|
#[str] The data to decompress.
|
@@ -238,7 +237,7 @@ module XZ
|
|
238
237
|
s = StringIO.new(str)
|
239
238
|
decompress_stream(s, memory_limit, flags)
|
240
239
|
end
|
241
|
-
|
240
|
+
|
242
241
|
#Decompresses +in_file+ and writes the result to +out_file+.
|
243
242
|
#===Parameters
|
244
243
|
#[in_file] The path to the file to read from.
|
@@ -262,20 +261,20 @@ module XZ
|
|
262
261
|
end
|
263
262
|
end
|
264
263
|
end
|
265
|
-
|
264
|
+
|
266
265
|
private
|
267
|
-
|
266
|
+
|
268
267
|
#This method returns the size of +str+ in bytes.
|
269
268
|
def binary_size(str)
|
270
269
|
#Believe it or not, but this is faster than str.bytes.to_a.size.
|
271
270
|
#I benchmarked it, and it is as twice as fast.
|
272
271
|
if str.respond_to? :force_encoding
|
273
|
-
str.dup.force_encoding(
|
272
|
+
str.dup.force_encoding(Encoding::BINARY).size
|
274
273
|
else
|
275
274
|
str.bytes.to_a.size
|
276
275
|
end
|
277
276
|
end
|
278
|
-
|
277
|
+
|
279
278
|
#This method does the heavy work of (de-)compressing a stream. It takes
|
280
279
|
#an IO object to read data from (that means the IO must be opened
|
281
280
|
#for reading) and a XZ::LZMAStream object that is used to (de-)compress
|
@@ -286,10 +285,10 @@ module XZ
|
|
286
285
|
def lzma_code(io, stream)
|
287
286
|
input_buffer_p = FFI::MemoryPointer.new(CHUNK_SIZE)
|
288
287
|
output_buffer_p = FFI::MemoryPointer.new(CHUNK_SIZE)
|
289
|
-
|
288
|
+
|
290
289
|
while str = io.read(CHUNK_SIZE)
|
291
290
|
input_buffer_p.write_string(str)
|
292
|
-
|
291
|
+
|
293
292
|
#Set the data for compressing
|
294
293
|
stream[:next_in] = input_buffer_p
|
295
294
|
stream[:avail_in] = binary_size(str)
|
@@ -306,7 +305,7 @@ module XZ
|
|
306
305
|
#Prepare for getting the compressed_data
|
307
306
|
stream[:next_out] = output_buffer_p
|
308
307
|
stream[:avail_out] = CHUNK_SIZE
|
309
|
-
|
308
|
+
|
310
309
|
#Compress the data
|
311
310
|
res = if io.eof?
|
312
311
|
LibLZMA.lzma_code(stream.pointer, LibLZMA::LZMA_ACTION[:lzma_finish])
|
@@ -314,11 +313,11 @@ module XZ
|
|
314
313
|
LibLZMA.lzma_code(stream.pointer, LibLZMA::LZMA_ACTION[:lzma_run])
|
315
314
|
end
|
316
315
|
check_lzma_code_retval(res)
|
317
|
-
|
316
|
+
|
318
317
|
#Write the compressed data
|
319
318
|
data = output_buffer_p.read_string(CHUNK_SIZE - stream[:avail_out])
|
320
319
|
yield(data)
|
321
|
-
|
320
|
+
|
322
321
|
#If the buffer is completely filled, it's likely that there is
|
323
322
|
#more data liblzma wants to hand to us. Start a new iteration,
|
324
323
|
#but don't provide new input data.
|
@@ -326,7 +325,7 @@ module XZ
|
|
326
325
|
end #loop
|
327
326
|
end #while
|
328
327
|
end #lzma_code
|
329
|
-
|
328
|
+
|
330
329
|
#Checks for errors and warnings that can be derived from the return
|
331
330
|
#value of the lzma_code() function and shows them if necessary.
|
332
331
|
def check_lzma_code_retval(code)
|
@@ -339,9 +338,9 @@ module XZ
|
|
339
338
|
LZMAError.raise_if_necessary(code)
|
340
339
|
end
|
341
340
|
end
|
342
|
-
|
341
|
+
|
343
342
|
end #class << self
|
344
|
-
|
343
|
+
|
345
344
|
end
|
346
345
|
|
347
346
|
require_relative "xz/lib_lzma"
|
data/lib/xz/lib_lzma.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# Basic liblzma-bindings for Ruby.
|
5
5
|
#
|
6
|
-
# Copyright © 2011 Marvin Gülker
|
6
|
+
# Copyright © 2011,2013 Marvin Gülker et al.
|
7
7
|
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the ‘Software’),
|
@@ -11,10 +11,10 @@
|
|
11
11
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
12
12
|
# and/or sell copies of the Software, and to permit persons to whom the Software
|
13
13
|
# is furnished to do so, subject to the following conditions:
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# The above copyright notice and this permission notice shall be included in all
|
16
16
|
# copies or substantial portions of the Software.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
19
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
20
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -24,39 +24,39 @@
|
|
24
24
|
# THE SOFTWARE.
|
25
25
|
|
26
26
|
module XZ
|
27
|
-
|
27
|
+
|
28
28
|
#This module wraps functions and enums used by liblzma.
|
29
29
|
module LibLZMA
|
30
30
|
extend FFI::Library
|
31
|
-
|
31
|
+
|
32
32
|
#The maximum value of an uint64_t, as defined by liblzma.
|
33
33
|
#Should be the same as
|
34
34
|
# (2 ** 64) - 1
|
35
35
|
UINT64_MAX = 18446744073709551615
|
36
|
-
|
36
|
+
|
37
37
|
#Activates extreme compression. Same as xz's "-e" commandline switch.
|
38
38
|
LZMA_PRESET_EXTREME = 1 << 31
|
39
|
-
|
39
|
+
|
40
40
|
LZMA_TELL_NO_CHECK = 0x02
|
41
41
|
LZMA_TELL_UNSUPPORTED_CHECK = 0x02
|
42
42
|
LZMA_TELL_ANY_CHECK = 0x04
|
43
43
|
LZMA_CONCATENATED = 0x08
|
44
|
-
|
44
|
+
|
45
45
|
#Placeholder enum used by liblzma for later additions.
|
46
46
|
LZMA_RESERVED_ENUM = enum :lzma_reserved_enum, 0
|
47
|
-
|
47
|
+
|
48
48
|
#Actions that can be passed to the lzma_code() function.
|
49
49
|
LZMA_ACTION = enum :lzma_run, 0,
|
50
50
|
:lzma_sync_flush,
|
51
51
|
:lzma_full_flush,
|
52
52
|
:lzma_finish
|
53
|
-
|
53
|
+
|
54
54
|
#Integrity check algorithms supported by liblzma.
|
55
55
|
LZMA_CHECK = enum :lzma_check_none, 0,
|
56
56
|
:lzma_check_crc32, 1,
|
57
57
|
:lzma_check_crc64, 4,
|
58
58
|
:lzma_check_sha256, 10
|
59
|
-
|
59
|
+
|
60
60
|
#Possible return values of liblzma functions.
|
61
61
|
LZMA_RET = enum :lzma_ok, 0,
|
62
62
|
:lzma_stream_end,
|
@@ -70,19 +70,19 @@ module XZ
|
|
70
70
|
:lzma_data_error,
|
71
71
|
:lzma_buf_error,
|
72
72
|
:lzma_prog_error
|
73
|
-
|
73
|
+
|
74
74
|
ffi_lib ['lzma.so.5', 'lzma.so', 'lzma']
|
75
|
-
|
76
|
-
attach_function :lzma_easy_encoder, [:pointer, :uint32, :int], :int
|
77
|
-
attach_function :lzma_code, [:pointer, :int], :int
|
78
|
-
attach_function :lzma_stream_decoder, [:pointer, :uint64, :uint32], :int
|
79
|
-
attach_function :lzma_end, [:pointer], :void
|
80
|
-
|
75
|
+
|
76
|
+
attach_function :lzma_easy_encoder, [:pointer, :uint32, :int], :int, :blocking => true
|
77
|
+
attach_function :lzma_code, [:pointer, :int], :int, :blocking => true
|
78
|
+
attach_function :lzma_stream_decoder, [:pointer, :uint64, :uint32], :int, :blocking => true
|
79
|
+
attach_function :lzma_end, [:pointer], :void, :blocking => true
|
80
|
+
|
81
81
|
end
|
82
82
|
|
83
83
|
#The class of the error that this library raises.
|
84
84
|
class LZMAError < StandardError
|
85
|
-
|
85
|
+
|
86
86
|
#Raises an appropriate exception if +val+ isn't a liblzma success code.
|
87
87
|
def self.raise_if_necessary(val)
|
88
88
|
case LibLZMA::LZMA_RET[val]
|
@@ -95,7 +95,7 @@ module XZ
|
|
95
95
|
when :lzma_prog_error then raise(self, "Program error--if you're sure your code is correct, you may have found a bug in liblzma.")
|
96
96
|
end
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
end
|
100
100
|
|
101
101
|
#The main struct of the liblzma library.
|
@@ -118,7 +118,7 @@ module XZ
|
|
118
118
|
:reserved_int4, :size_t,
|
119
119
|
:reserved_enum1, :int,
|
120
120
|
:reserved_enum2, :int
|
121
|
-
|
121
|
+
|
122
122
|
#This method does basicly the same thing as the
|
123
123
|
#LZMA_STREAM_INIT macro of liblzma. Creates a new LZMAStream
|
124
124
|
#that has been initialized for usage. If any argument is passed,
|
data/lib/xz/stream.rb
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
# (The MIT license)
|
3
3
|
#
|
4
4
|
# Basic liblzma-bindings for Ruby.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright © 2012 Marvin Gülker
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the ‘Software’),
|
10
10
|
# to deal in the Software without restriction, including without limitation
|
11
11
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
12
12
|
# and/or sell copies of the Software, and to permit persons to whom the Software
|
13
13
|
# is furnished to do so, subject to the following conditions:
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# The above copyright notice and this permission notice shall be included in all
|
16
16
|
# copies or substantial portions of the Software.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
19
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
20
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -58,7 +58,7 @@ class XZ::Stream
|
|
58
58
|
#Believe it or not, but this is faster than str.bytes.to_a.size.
|
59
59
|
#I benchmarked it, and it is as twice as fast.
|
60
60
|
if str.respond_to? :force_encoding
|
61
|
-
str.dup.force_encoding(
|
61
|
+
str.dup.force_encoding(Encoding::BINARY).size
|
62
62
|
else
|
63
63
|
str.bytes.to_a.size
|
64
64
|
end
|
data/lib/xz/stream_reader.rb
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
# (The MIT license)
|
3
3
|
#
|
4
4
|
# Basic liblzma-bindings for Ruby.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright © 2012 Marvin Gülker
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the ‘Software’),
|
10
10
|
# to deal in the Software without restriction, including without limitation
|
11
11
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
12
12
|
# and/or sell copies of the Software, and to permit persons to whom the Software
|
13
13
|
# is furnished to do so, subject to the following conditions:
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# The above copyright notice and this permission notice shall be included in all
|
16
16
|
# copies or substantial portions of the Software.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
19
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
20
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -55,7 +55,7 @@
|
|
55
55
|
#
|
56
56
|
# require "xz"
|
57
57
|
# require "archive/tar/minitar"
|
58
|
-
#
|
58
|
+
#
|
59
59
|
# XZ::StreamReader.open("foo.tar.xz") do |txz|
|
60
60
|
# # This automatically closes txz
|
61
61
|
# Archive::Tar::Minitar.unpack(txz, "foo")
|
@@ -103,7 +103,7 @@ class XZ::StreamReader < XZ::Stream
|
|
103
103
|
flags.each do |flag|
|
104
104
|
raise(ArgumentError, "Unknown flag #{flag}!") unless [:tell_no_check, :tell_unsupported_check, :tell_any_check, :concatenated].include?(flag)
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
if delegate.respond_to?(:to_io)
|
108
108
|
super(delegate)
|
109
109
|
else
|
@@ -118,7 +118,7 @@ class XZ::StreamReader < XZ::Stream
|
|
118
118
|
@memory_limit,
|
119
119
|
@flags.inject(0){|val, flag| val | XZ::LibLZMA.const_get(:"LZMA_#{flag.to_s.upcase}")})
|
120
120
|
XZ::LZMAError.raise_if_necessary(res)
|
121
|
-
|
121
|
+
|
122
122
|
@input_buffer_p = FFI::MemoryPointer.new(XZ::CHUNK_SIZE)
|
123
123
|
|
124
124
|
# These two are only used in #unbuffered read.
|
@@ -134,7 +134,7 @@ class XZ::StreamReader < XZ::Stream
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
self.class.send(:alias_method, :open, :new)
|
137
|
-
|
137
|
+
|
138
138
|
#Closes this StreamReader instance. Don’t use it afterwards
|
139
139
|
#anymore.
|
140
140
|
#==Return value
|
@@ -146,7 +146,7 @@ class XZ::StreamReader < XZ::Stream
|
|
146
146
|
#you have to close it yourself.
|
147
147
|
def close
|
148
148
|
super
|
149
|
-
|
149
|
+
|
150
150
|
# Close the XZ stream
|
151
151
|
res = XZ::LibLZMA.lzma_end(@lzma_stream.pointer)
|
152
152
|
XZ::LZMAError.raise_if_necessary(res)
|
@@ -194,7 +194,7 @@ class XZ::StreamReader < XZ::Stream
|
|
194
194
|
# Be always sure to test this when a new version of
|
195
195
|
# io-like is released!
|
196
196
|
__io_like__internal_read_buffer.clear
|
197
|
-
|
197
|
+
|
198
198
|
# Forcibly close the XZ stream (internally frees it!)
|
199
199
|
res = XZ::LibLZMA.lzma_end(@lzma_stream.pointer)
|
200
200
|
XZ::LZMAError.raise_if_necessary(res)
|
@@ -205,7 +205,7 @@ class XZ::StreamReader < XZ::Stream
|
|
205
205
|
rescue => e
|
206
206
|
raise(IOError, "Delegate IO failed to rewind! Original message: #{e.message}")
|
207
207
|
end
|
208
|
-
|
208
|
+
|
209
209
|
# Reinitialize everything. Note this doesn’t affect @file as it
|
210
210
|
# is already set and stays so (we don’t pass a filename here,
|
211
211
|
# but rather an IO)
|
@@ -226,7 +226,7 @@ class XZ::StreamReader < XZ::Stream
|
|
226
226
|
#uncompressed data.
|
227
227
|
def unbuffered_read(length)
|
228
228
|
raise(EOFError, "Input data completely processed!") if @__lzma_finished
|
229
|
-
|
229
|
+
|
230
230
|
output_buffer_p = FFI::MemoryPointer.new(length) # User guarantees that this fits into RAM
|
231
231
|
|
232
232
|
@lzma_stream[:next_out] = output_buffer_p
|
data/lib/xz/stream_writer.rb
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
# (The MIT license)
|
3
3
|
#
|
4
4
|
# Basic liblzma-bindings for Ruby.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Copyright © 2012 Marvin Gülker
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the ‘Software’),
|
10
10
|
# to deal in the Software without restriction, including without limitation
|
11
11
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
12
12
|
# and/or sell copies of the Software, and to permit persons to whom the Software
|
13
13
|
# is furnished to do so, subject to the following conditions:
|
14
|
-
#
|
14
|
+
#
|
15
15
|
# The above copyright notice and this permission notice shall be included in all
|
16
16
|
# copies or substantial portions of the Software.
|
17
|
-
#
|
17
|
+
#
|
18
18
|
# THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
19
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
20
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -105,9 +105,9 @@ class XZ::StreamWriter < XZ::Stream
|
|
105
105
|
@file = File.open(delegate, "wb")
|
106
106
|
super(@file)
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
# Initialize the internal LZMA stream for encoding
|
110
|
-
res = XZ::LibLZMA.lzma_easy_encoder(@lzma_stream.pointer,
|
110
|
+
res = XZ::LibLZMA.lzma_easy_encoder(@lzma_stream.pointer,
|
111
111
|
compression_level | (extreme ? XZ::LibLZMA::LZMA_PRESET_EXTREME : 0),
|
112
112
|
XZ::LibLZMA::LZMA_CHECK[:"lzma_check_#{check}"])
|
113
113
|
XZ::LZMAError.raise_if_necessary(res)
|
@@ -134,26 +134,26 @@ class XZ::StreamWriter < XZ::Stream
|
|
134
134
|
#you have to do that yourself.
|
135
135
|
def close
|
136
136
|
super
|
137
|
-
|
137
|
+
|
138
138
|
#1. Close the current block ("file") (an XZ stream may actually include
|
139
139
|
# multiple compressed files, which however is not supported by
|
140
140
|
# this library). For this we have to tell liblzma that
|
141
141
|
# the next bytes we pass to it are the last bytes (by means of
|
142
142
|
# the FINISH action). Just that we don’t pass any new input ;-)
|
143
|
-
|
143
|
+
|
144
144
|
output_buffer_p = FFI::MemoryPointer.new(XZ::CHUNK_SIZE)
|
145
|
-
|
145
|
+
|
146
146
|
# Get any pending data (LZMA_FINISH causes libzlma to flush its
|
147
147
|
# internal buffers) and write it out to our wrapped IO.
|
148
148
|
loop do
|
149
149
|
@lzma_stream[:next_out] = output_buffer_p
|
150
150
|
@lzma_stream[:avail_out] = output_buffer_p.size
|
151
|
-
|
151
|
+
|
152
152
|
res = XZ::LibLZMA.lzma_code(@lzma_stream.pointer, XZ::LibLZMA::LZMA_ACTION[:lzma_finish])
|
153
153
|
XZ::LZMAError.raise_if_necessary(res)
|
154
|
-
|
154
|
+
|
155
155
|
@delegate_io.write(output_buffer_p.read_string(output_buffer_p.size - @lzma_stream[:avail_out]))
|
156
|
-
|
156
|
+
|
157
157
|
break unless @lzma_stream[:avail_out] == 0
|
158
158
|
end
|
159
159
|
|
@@ -198,7 +198,7 @@ class XZ::StreamWriter < XZ::Stream
|
|
198
198
|
# Compress the data
|
199
199
|
res = XZ::LibLZMA.lzma_code(@lzma_stream.pointer, XZ::LibLZMA::LZMA_ACTION[:lzma_run])
|
200
200
|
XZ::LZMAError.raise_if_necessary(res) # TODO: Warnings
|
201
|
-
|
201
|
+
|
202
202
|
# Write the compressed data
|
203
203
|
result = output_buffer_p.read_string(output_buffer_p.size - @lzma_stream[:avail_out])
|
204
204
|
@delegate_io.write(result)
|
@@ -211,5 +211,5 @@ class XZ::StreamWriter < XZ::Stream
|
|
211
211
|
rescue XZ::LZMAError => e
|
212
212
|
raise(SystemCallError, e.message)
|
213
213
|
end
|
214
|
-
|
214
|
+
|
215
215
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-xz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marvin Gülker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -80,15 +80,14 @@ extra_rdoc_files:
|
|
80
80
|
- COPYING
|
81
81
|
files:
|
82
82
|
- lib/xz.rb
|
83
|
-
- lib/xz/stream_reader.rb
|
84
|
-
- lib/xz/lib_lzma.rb
|
85
83
|
- lib/xz/stream.rb
|
86
84
|
- lib/xz/stream_writer.rb
|
85
|
+
- lib/xz/stream_reader.rb
|
86
|
+
- lib/xz/lib_lzma.rb
|
87
87
|
- HISTORY.rdoc
|
88
88
|
- README.rdoc
|
89
89
|
- COPYING
|
90
|
-
-
|
91
|
-
homepage: https://github.com/Quintus/ruby-xz
|
90
|
+
homepage: http://quintus.github.io/ruby-xz
|
92
91
|
licenses:
|
93
92
|
- MIT
|
94
93
|
metadata: {}
|
@@ -112,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
111
|
version: '0'
|
113
112
|
requirements: []
|
114
113
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.0.
|
114
|
+
rubygems_version: 2.0.14
|
116
115
|
signing_key:
|
117
116
|
specification_version: 4
|
118
117
|
summary: XZ compression via liblzma for Ruby.
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.2.0
|