making the ruby unpacker have the same outcome as unpack.c
Unfortunately the ruby Zlib::ZStream internals are not really accessible like the C functions
This commit is contained in:
parent
9ca686aa6f
commit
65bfba3f62
1 changed files with 17 additions and 6 deletions
23
unpack.rb
23
unpack.rb
|
@ -1,13 +1,17 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
$:.unshift(File.dirname(__FILE__))
|
# stdlib
|
||||||
require 'huffman.rb'
|
require 'stringio'
|
||||||
require 'thing.rb'
|
require 'zlib'
|
||||||
|
|
||||||
def inflate(data)
|
def inflate(data)
|
||||||
Zlib::Inflate.inflate(data)
|
Zlib::Inflate.inflate(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def deflate(data)
|
||||||
|
Zlib::Deflate.deflate(data)
|
||||||
|
end
|
||||||
|
|
||||||
# there is not a difference for us, in these two
|
# there is not a difference for us, in these two
|
||||||
def inflate2(data)
|
def inflate2(data)
|
||||||
zlib = Zlib::Inflate.new(15)
|
zlib = Zlib::Inflate.new(15)
|
||||||
|
@ -27,14 +31,21 @@ if $0 == __FILE__
|
||||||
ARGV.each do |arg|
|
ARGV.each do |arg|
|
||||||
file = File.open(arg)
|
file = File.open(arg)
|
||||||
|
|
||||||
z_data = file.read()
|
z_data_io = StringIO.new(file.read())
|
||||||
data = inflate(z_data)
|
data = inflate(z_data_io.read())
|
||||||
|
e_pos = deflate(data).bytesize()
|
||||||
|
z_data_io.seek(e_pos)
|
||||||
|
|
||||||
puts "data is:"
|
puts "data is:"
|
||||||
puts load_dictionary(data).map {|x| "\t#{x}" }
|
puts load_dictionary(data).map {|x| "\t#{x}" }
|
||||||
|
|
||||||
puts "dictionary stats:"
|
puts "dictionary stats:"
|
||||||
puts "\tcompressed size: %d" % z_data.bytesize()
|
puts "\tcompressed size: %d" % deflate(data).bytesize()
|
||||||
puts "\tuncompressed size: %d" % data.bytesize()
|
puts "\tuncompressed size: %d" % data.bytesize()
|
||||||
|
|
||||||
|
buf = z_data_io.read()
|
||||||
|
puts "Read %d bytes\n" % buf.bytesize()
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue