I will put the diffs in my tree until CVS is back up and then apply them. Thanks for pushing forward on this.
-Tom On Wed, 10 May 2006, Ola Bini defenestrated me: > > Hi > > I continue to try getting gem install rake to work, but so far there seem > to be some strange errors in the way. > This is probably caused by me not having the latest version (I still can't > access headius.com...) > > But anyway, I happened to run into some small errors in zlib, so I attach a > new version of the file here. > > Regards > Ola Bini > #/***** BEGIN LICENSE BLOCK ***** > # * Version: CPL 1.0/GPL 2.0/LGPL 2.1 > # * > # * The contents of this file are subject to the Common Public > # * License Version 1.0 (the "License"); you may not use this file > # * except in compliance with the License. You may obtain a copy of > # * the License at http://www.eclipse.org/legal/cpl-v10.html > # * > # * Software distributed under the License is distributed on an "AS > # * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or > # * implied. See the License for the specific language governing > # * rights and limitations under the License. > # * > # * Alternatively, the contents of this file may be used under the terms of > # * either of the GNU General Public License Version 2 or later (the "GPL"), > # * or the GNU Lesser General Public License Version 2.1 or later (the > "LGPL"), > # * in which case the provisions of the GPL or the LGPL are applicable instead > # * of those above. If you wish to allow use of your version of this file only > # * under the terms of either the GPL or the LGPL, and not to allow others to > # * use your version of this file under the terms of the CPL, indicate your > # * decision by deleting the provisions above and replace them with the notice > # * and other provisions required by the GPL or the LGPL. If you do not delete > # * the provisions above, a recipient may use your version of this file under > # * the terms of any one of the CPL, the GPL or the LGPL. > # ***** END LICENSE BLOCK *****/ > require "java" > require "stringio" > > include_class("java.lang.String"){ |p,name| "J#{name}"} > > include_class "java.io.BufferedReader" > include_class "java.io.ByteArrayOutputStream" > include_class "java.io.InputStreamReader" > include_class "java.io.PipedInputStream" > include_class "java.io.PipedOutputStream" > include_class "java.io.StringBufferInputStream" > include_class "java.lang.StringBuffer" > > include_class "java.util.zip.Deflater" > include_class "java.util.zip.DeflaterOutputStream" > include_class "java.util.zip.Inflater" > include_class "java.util.zip.InflaterInputStream" > include_class "java.util.zip.GZIPInputStream" > include_class "java.util.zip.GZIPOutputStream" > > include_class "org.jruby.util.Adler32Ext" > include_class "org.jruby.util.CRC32Ext" > include_class "org.jruby.util.IOInputStream" > include_class "org.jruby.util.IOOutputStream" > include_class "org.jruby.util.ZlibInflate" > include_class "org.jruby.util.ZlibDeflate" > > # > # Implementation of the Zlib library with the help of Java classes > # Does not provide all functionality, especially in Gzip, since > # Java's implementation kindof suck. > # > module Zlib > > # Constants > # Most of these are based on the constants in either java.util.zip or Zlib > ZLIB_VERSION = "1.2.1" > VERSION = "0.6.0" > > BINARY = 0 > ASCII = 1 > UNKNOWN = 2 > > DEF_MEM_LEVEL = 8 > MAX_MEM_LEVEL = 9 > > OS_UNIX = 3 > OS_UNKNOWN = 255 > OS_CODE = 11 > OS_ZSYSTEM = 8 > OS_VMCMS = 4 > OS_VMS = 2 > OS_RISCOS = 13 > OS_MACOS = 7 > OS_OS2 = 6 > OS_AMIGA = 1 > OS_QDOS = 12 > OS_WIN32 = 11 > OS_ATARI = 5 > OS_MSDOS = 0 > OS_CPM = 9 > OS_TOPS20 = 10 > > DEFAULT_STRATEGY = 0 > FILTERED = 1 > HUFFMAN_ONLY = 2 > > NO_FLUSH = 0 > SYNC_FLUSH = 2 > FULL_FLUSH = 3 > FINISH = 4 > > NO_COMPRESSION = 0 > BEST_SPEED = 1 > DEFAULT_COMPRESSION = -1 > BEST_COMPRESSION = 9 > > MAX_WBITS = 15 > > # > # Returns the string which represents the version of zlib library. > # > def Zlib.zlib_version > ZLIB_VERSION > end > > # > # Returns the string which represents the version of this library > # > def Zlib.version > VERSION > end > > # > # Calculates Adler-32 checksum for string, and returns updated value of > adler. > # If string is omitted, it returns the Adler-32 initial value. > # If adler is omitted, it assumes that the initial value is given to > adler. > # > def Zlib.adler32(string=nil, adler=1) > ext = Adler32Ext.new adler > if string > string.each_byte {|b| ext.update(b) } > end > ext.getValue > end > > # > # Calculates CRC-32 checksum for string, and returns updated value of > crc. > # If string is omitted, it returns the CRC-32 initial value. > # If crc is omitted, it assumes that the initial value is given to crc. > # > def Zlib.crc32(string=nil, crc=0) > ext = CRC32Ext.new crc > if string > string.each_byte {|b| ext.update(b) } > end > ext.getValue > end > > # > # Returns the table for calculating CRC checksum as an array. > # > def Zlib.crc_table > [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, > 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, > 162941995, > 2125561021, 3887607047, 2428444049, 498536548, 1789927666, > 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, > 325883990, > 1684777152, 4251122042, 2321926636, 335633487, 1661365465, > 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, > 1006888145, > 1258607687, 3524101629, 2768942443, 901097722, 1119000684, > 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, > 651767980, > 1373503546, 3369554304, 3218104598, 565507253, 1454621731, > 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, > 795835527, > 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, > 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, > 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, > 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, > 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, > 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, > 984961486, 2747007092, 3569037538, 1256170817, 1037604311, > 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, > 1141124467, > 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, > 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, > 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, > 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, > 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, > 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, > 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, > 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, > 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, > 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, > 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, > 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, > 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, > 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, > 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, > 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, > 3855990285, 2094854071, 198958881, 2262029012, 4057260610, > 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, > 2282248934, > 4279200368, 1711684554, 285281116, 2405801727, 4167216745, > 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, > 2808555105, > 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, > 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, > 3183342108, > 3401237130, 1404277552, 615818150, 3134207493, 3453421203, > 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, > 3020668471, > 3272380065, 1510334235, 755167117] > end > end > > class Zlib::Error < StandardError > end > > class Zlib::StreamEnd < Zlib::Error > end > > class Zlib::StreamError < Zlib::Error > end > > class Zlib::BufError < Zlib::Error > end > > class Zlib::NeedDict < Zlib::Error > end > > class Zlib::MemError < Zlib::Error > end > > class Zlib::VersionError < Zlib::Error > end > > class Zlib::DataError < Zlib::Error > end > > # > # The abstract base class for Deflater and Inflater. > # This implementation don't really do so much, except for provide som common > # functionality between Deflater and Inflater. > # Some of that functionality is also dubious, because of the Java > # implementation. > # > class Zlib::ZStream < Object > def initialize > @closed = false > @ended = false > end > > # > # Not implemented. > # > def flush_next_out > end > > def total_out > @flater.getTotalOut > end > > def stream_end? > @flater.finished > end > > # > # Constant implementation, we can not know this. > # > def data_type > Zlib::UNKNOWN > end > > def closed? > @closed > end > > def ended? > @ended > end > > def end > @flater.end unless @ended > @ended = true > end > > def reset > @flater.reset > end > > # > # Constant implementation, we can not know this. > # > def avail_out > 0 > end > > # > # Not implemented, no support for this. > # > def avail_out=(p1) > end > > def adler > @flater.adler > end > > def finish > # FIXME: this doesn't appear to work > [EMAIL PROTECTED] > end > > # > # Constant implementation, we can not know this. > # > def avail_in > 0 > end > > # > # Not implemented. > # > def flush_next_in > end > > def total_in > @flater.getTotalIn > end > > def finished? > @flater.finished > end > > def close > @stream.close unless @closed > @closed = true > end > end > > # > # Zlib::Inflate is the class for decompressing compressed data. > # The implementation is patchy, due to bad underlying support > # for certain functions. > # > class Zlib::Inflate < Zlib::ZStream > # > # Decompresses string. Raises a Zlib::NeedDict exception if a preset > dictionary is needed for decompression. > # > def self.inflate(string) > ZlibInflate.s_inflate(self,string) > end > > # > # Creates a new inflate stream for decompression. See zlib.h for details > of the argument. If window_bits is nil, the default value is used. > # > def initialize(window_bits=nil) > @infl = ZlibInflate.new(self) > end > > # > # Adds p1 to stream and returns self > # > def <<(p1) > @infl._append(p1) > self > end > > # > # No idea, no implementation > # > def sync_point? > @infl.sync_point > end > > # > # Sets the preset dictionary and returns string. This method is available > just only after a Zlib::NeedDict exception was raised. See zlib.h for details. > # > def set_dictionary(p1) > @infl.set_dictionary(p1) > end > > # > # Inputs string into the inflate stream and returns the output from the > stream. > # Calling this method, both the input and the output buffer of the stream > are flushed. > # If string is nil, this method finishes the stream, just like > Zlib::ZStream#finish. > # > # Raises a Zlib::NeedDict exception if a preset dictionary is needed to > decompress. > # Set the dictionary by Zlib::Inflate#set_dictionary and then call this > method again with an empty string. > # > def inflate(string) > @infl.inflate(string) > end > > # > # This implementation is not correct > # > def sync(string) > @infl.sync(string) > end > end > > # > # Zlib::GzipFile is an abstract class for handling a gzip formatted > compressed file. > # The operations are defined in the subclasses, Zlib::GzipReader for reading, > and Zlib::GzipWriter for writing. > # > # Zlib::GzipReader should be used by associating an IO, or IO-like, object. > # > # This implementation miss some operations, since Java does not implement > much of Gzip correctly. > # > class Zlib::GzipFile > # > # Wraps a yield to the object and then ensures that it will be closed. > Unless there is no > # provided block then it just returns the object. > # > # This signature is a little differant then Ruby version, but contrary to > their docs > # Zlib::GzipReader and Zlib::GzipWriter have no documentation and I think > they are the only > # real consumer of this. > def self.wrap(io, proc) > unless proc.nil? > begin > proc.call(io) unless proc.nil? > ensure > io.close unless io.closed? > end > nil > else > io > end > end > > # > # Not available > # > def os_code > @os_code || Zlib::OS_UNKNOWN > end > > def closed? > @closed || false > end > > # > # Not available > # > def orig_name > @orig_name || nil > end > > def to_io > @io > end > > # > # Closes the GzipFile object. Unlike Zlib::GzipFile#close, this method > never calls the close method of the associated IO object. > # Returns the associated IO object. > # > def finish > @io.finish unless @finished > @finished = true > @io > end > > # > # Not available > # > def comment > @comment || nil > end > > # > # Not available > # > def crc > 0 > end > > # > # Not available > # > def mtime > @mtime || nil > end > > # > # Not available > # > def sync > end > > def close > @io.close unless @closed > @closed = true > end > > # > # Not available > # > def level > Zlib::DEFAULT_COMPRESSION > end > > # > # Not available > # > def sync=(flag) > end > end > > # > # Zlib::GzipReader is the class for reading a gzipped file. GzipReader should > be used an IO, or -IO-lie, object. > # > class Zlib::GzipReader < Zlib::GzipFile > include Enumerable > > # > # Opens file for reading, binary. > # If a block is provided, yields the File object to this and then unsures > # the File is closed. > # > # Otherwise returns the open File object. > # > def self.open(filename) > proc = block_given? ? Proc.new : nil > io = new(File.open(filename, "rb")) > wrap(io, proc) > end > > # > # Creates a GzipReader object associated with io. The GzipReader object > reads gzipped data from io, and parses/decompresses them. > # At least, io must have a read method that behaves same as the read > method in IO class. > # > # If the gzip file header is incorrect, raises an Zlib::GzipFile::Error > exception. > # > # This particular implementation requires that io actually IS an > IO-object, or child. TODO: fix this. implement wrapper of OutputStream, maybe? > # > def initialize(io) > @io = GZIPInputStream.new(IOInputStream.new(io)) > @line = 1 > end > > # > # Not supported > # > def rewind > end > > # > # Not supported. > # > def lineno > @line > end > > # > # Not supported. > # > def readline > dst = gets > raise EOFError.new("end of file reached") if dst.nil? > dst > end > > # > # Read until len bytes have been read. If len is nil, read all remaining > data. > # > def read(len=nil) > val = "" > if !len > while n = getc > val << n > end > else > raise ArgumentError,"negative length #{len} given" if len<0 > len.times do > if n = getc > val << n > else > break > end > end > end > val > end > > # > # Not supported. > # > def lineno=(p1) > @line = p1 > end > > # > # Not supported > # > def pos > 0 > end > > # > # Reads a character from the stream, but raises and EOFError if the end > of file has been reached. > # > def readchar > val = getc > raise EOFError.new("end of file reached") if val.nil? > val > end > > # > # Not supported. > # > def readlines(separator=$/) > [] > end > > # > # Yields for each byte until EOF. > # > def each_byte > while n = getc > yield n > end > nil > end > > # > # Returns the next 8-bit byte or nil if at end of file. > # > def getc > c = @io.read > c == -1 ? nil : c > end > > # > # Not supported. > # > def eof > false > end > > # > # Not supported. > # > def ungetc(p1) > end > > # > # Not supported. > # > def each > end > > # > # Not supported. > # > def unused > end > > # > # Not supported. > # > def eof? > @io.available != 1 > end > > # > # Not supported. > # > def gets(separator = $/) > # cnutter: This is going to be *slow* but using a BufferedReader causes > the whole zip stream to > # be read in and buffered, so we need a better way to pull off a line > at a time > > str = '' > ch = getc > return nil if ch.nil? > # FIXME cnutter: this only works for single-char separators at the > moment > while ch > -1 && ch.chr != separator > str << ch > ch = @io.read > end > # return line if nil, otherwise cat \n > str.chomp + separator > end > > # > # Not supported. > # > def tell > end > end > > class Zlib::GzipFile::Error < Zlib::Error > end > > class Zlib::GzipFile::CRCError < Zlib::GzipFile::Error > end > > class Zlib::GzipFile::NoFooter < Zlib::GzipFile::Error > end > > class Zlib::GzipFile::LengthError < Zlib::GzipFile::Error > end > > # > # Zlib::Deflate is the class for compressing data. > # The implementation is patchy, due to bad underlying support > # for certain functions. > # > class Zlib::Deflate < Zlib::ZStream > # > # Compresses the given string. Valid values of level are > Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, > # Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION, and an integer from > 0 to 9. > # > def self.deflate(string, level=Zlib::DEFAULT_COMPRESSION) > ZlibDeflate.s_deflate(self,string,level) > end > > # > # Creates a new deflate stream for compression. See zlib.h for details of > each argument. > # If an argument is nil, the default value of that argument is used. > # > def initialize(level=nil,window_bits=nil, memlevel=nil,strategy=nil) > if level.nil? > level = Zlib::DEFAULT_COMPRESSION > end > if strategy.nil? > strategy = Zlib::DEFAULT_STRATEGY > end > if window_bits.nil? > window_bits = Zlib::MAX_WBITS > end > if memlevel.nil? > memlevel = Zlib::DEF_MEM_LEVEL > end > @defl = ZlibDeflate.new(self,level,window_bits,memlevel,strategy) > end > > # > # String output - Writes p1 to stream. p1 will be converted to a string > using to_s. > # Returns self > # > def <<(p1) > @defl._append(p1) > self > end > > # > # Changes the parameters of the deflate stream. See zlib.h for details. > The output from the stream by changing the params is preserved in output > buffer. > # > def params(level,strategy) > @defl.params(level,strategy) > end > > # > # Sets the preset dictionary and returns string. This method is available > just only after Zlib::Deflate.new or > # Zlib::ZStream#reset method was called. See zlib.h for details. > # > def set_dictionary(string) > @defl.set_dictionary(string) > end > > # > # This method is equivalent to deflate(????, flush). If flush is omitted, > Zlib::SYNC_FLUSH is used as flush. This > # method is just provided to improve the readability of your Ruby program. > # > def flush(flush=Zlib::SYNC_FLUSH) > @defl.flush(flush) > end > > # > # Inputs string into the deflate stream and returns the output from the > stream. On calling this method, > # both the input and the output buffers of the stream are flushed. > # If string is nil, this method finishes the stream, just like > Zlib::ZStream#finish. > # > # The value of flush should be either Zlib::NO_FLUSH, Zlib::SYNC_FLUSH, > Zlib::FULL_FLUSH, or Zlib::FINISH. See zlib.h for details. > # > def deflate(string,flush=nil) > @defl.deflate(string,flush) > end > end > > # > # Zlib::GzipWriter is a class for writing gzipped files. GzipWriter should be > used with an instance of IO, or IO-like, object. > # > # NOTE: Due to the limitation of Ruby??s finalizer, you must explicitly close > GzipWriter objects by Zlib::GzipWriter#close etc. > # Otherwise, GzipWriter will be not able to write the gzip footer and will > generate a broken gzip file. > # > # The gzip-functionality in Java is slightly broken, which means that some > functionality is not available here. > # > class Zlib::GzipWriter < Zlib::GzipFile > # > # Creates a GzipWriter object associated with io. level and strategy > should be the same as the arguments of Zlib::Deflate.new. > # The GzipWriter object writes gzipped data to io. At least, io must > respond to the write method that behaves same as write method in IO class > # > def initialize(io, level=nil, strategy=nil) > @io = GZIPOutputStream.new(IOOutputStream.new(io)) > end > > # > # Opens a file specified by filename for writing gzip compressed data, > and returns a GzipWriter object associated with that file. > # Further details of this method are found in Zlib::GzipWriter.new and > Zlib::GzipFile#wrap. > # > def self.open(filename,level=nil,strategy=nil) > proc = block_given? ? Proc.new : nil > io = new(File.open(filename,"wb"),level,strategy) > wrap(io, proc) > end > > # > # String output - Writes p1 to stream. p1 will be converted to a string > using to_s. > # Returns self > # > def <<(p1) > write p1.to_s > self > end > > > # > # See IO#printf > # > def printf(*opts) > sio = StringIO.new > sio.printf(opts) > write(sio.string) > nil > end > > # > # See IO#print > # > def print(*opts) > sio = StringIO.new > sio.print(opts) > write(sio.string) > nil > end > > # > # Not supported. > # > def pos > end > > # > # Not supported. > # > def orig_name=(p1) > @orig_name = p1 > end > > # > # Writes the given character on the stream. > # > def putc(p1) > @io.write(p1) > end > > # > # Not supported. > # > def comment=(p1) > @comment = p1 > end > > # > # See IO#puts > # > def puts(*opts) > sio = StringIO.new > sio.puts(*opts) > write(sio.string) > nil > end > > # > # Flushes all the internal buffers of the GzipWriter object. The meaning > of flush is same as in Zlib::Deflate#deflate. > # Zlib::SYNC_FLUSH is used if flush is omitted. It is no use giving flush > Zlib::NO_FLUSH. > # > def flush(flush=Zlib::SYNC_FLUSH) > @io.flush unless flush == Zlib::NO_FLUSH > end > > # > # Not supported. > # > def mtime=(p1) > @mtime = p1 > end > > # > # Not supported. > # > def tell > end > > # > # Writes p1 to stream. Converts it to a string with to_s before writing. > # > def write(p1) > str = p1.to_s > @io.write(JString.new(str).getBytes("ISO-8859-1")) > end > end > > class Zlib::GzipFile::CRCError < Zlib::GzipFile::Error > end > > class Zlib::GzipFile::Error < Zlib::Error > end > > class Zlib::GzipFile::NoFooter < Zlib::GzipFile::Error > end > > class Zlib::GzipFile::LengthError < Zlib::GzipFile::Error > end -- + http://www.tc.umn.edu/~enebo +---- mailto:[EMAIL PROTECTED] ----+ | Thomas E Enebo, Protagonist | "Luck favors the prepared | | | mind." -Louis Pasteur | ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Jruby-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jruby-devel
