# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-require 'zlib'
-require 'bzip2'
+require 'open3'
# Error class for all exceptions to do with Filesys.
class FilesysError < StandardError; end
if mode == 'w'
case options[:compress]
when :gzip
- ios = Zlib::GzipWriter.new File.open(file, mode, options)
+ ios, = Open3.pipeline_w("gzip -f", out: file)
when :bzip, :bzip2
- ios = Bzip2::Writer.new File.open(file, mode, options)
+ ios, = Open3.pipeline_w("bzip2 -c", out: file)
else
ios = File.open(file, mode, options)
end
if file == '-'
ios = STDIN
else
- case `file #{file}`
+ case `file -Lk #{file}`
when /gzip/
- ios = Zlib::GzipReader.new File.open(file, mode, options)
+ ios = IO.popen("gzip -cd #{file}", :external_encoding=>"EUC-JP")
when /bzip/
- # ios = Bzip2::Reader.new File.open(file, mode, options) # TODO this method is buggy, investigate
ios = IO.popen("bzcat #{file}")
- else
+ when /ASCII/
ios = File.open(file, mode, options)
+ else
+ raise "Unknown file type: #{`file -L #{file}`}"
end
end
end