mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Import Ruby/zlib from rough.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3631 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8a18a837f3
commit
6f19027e40
4 changed files with 3749 additions and 0 deletions
4
ext/zlib/MANIFEST
Normal file
4
ext/zlib/MANIFEST
Normal file
|
@ -0,0 +1,4 @@
|
|||
MANIFEST
|
||||
extconf.rb
|
||||
zlib.c
|
||||
doc/zlib.rd
|
911
ext/zlib/doc/zlib.rd
Normal file
911
ext/zlib/doc/zlib.rd
Normal file
|
@ -0,0 +1,911 @@
|
|||
=begin
|
||||
#
|
||||
# zlib.rd.src
|
||||
#
|
||||
# Copyright (C) UENO Katsuhiro 2000-2003
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
= Ruby/zlib version 0.6.0
|
||||
|
||||
Ruby/zlib is an extension library to use zlib from Ruby.
|
||||
Ruby/zlib also provides the features for accessing gzipped files.
|
||||
|
||||
You can modify or redistribute Ruby/zlib in the same manner of
|
||||
Ruby interpreter. The latest version of Ruby/zlib would be found
|
||||
at ((<URL:http://www.blue.sky.or.jp/>)).
|
||||
|
||||
Any comments and suggestions are always welcome. Please send
|
||||
them to ruby-list ML, ruby-ext ML, ruby-talk ML, or the author's
|
||||
mail address ((<URL:mailto:katsu@blue.sky.or.jp>)).
|
||||
|
||||
This document is experimental and broken English version.
|
||||
If you find some mistakes or strange expressions (including
|
||||
kidding or unnatural ones) in this document, please let me know
|
||||
for my study.
|
||||
|
||||
* ((<Zlib>))
|
||||
|
||||
* ((<Zlib::Error>))
|
||||
* ((<Zlib::ZStream>))
|
||||
* ((<Zlib::Deflate>))
|
||||
* ((<Zlib::Inflate>))
|
||||
* ((<Zlib::GzipFile>))
|
||||
* ((<Zlib::GzipFile::Error>))
|
||||
* ((<Zlib::GzipWriter>))
|
||||
* ((<Zlib::GzipReader>))
|
||||
|
||||
* ((<Changes from 0.5 to 0.6>))
|
||||
* ((<Changes from 0.4 to 0.5>))
|
||||
|
||||
== Zlib
|
||||
|
||||
Zlib is the module which provides the other features in zlib C
|
||||
library. See zlib.h for detail of each module function.
|
||||
|
||||
=== Module Functions:
|
||||
|
||||
--- Zlib.zlib_version
|
||||
|
||||
Returns the string which represents the version of zlib
|
||||
library.
|
||||
|
||||
--- Zlib.adler32([string[, adler]])
|
||||
|
||||
Calculates Alder-32 checksum for ((|string|)),
|
||||
and returns updated value of ((|alder|)).
|
||||
If ((|string|)) is omitted, it returns the Adler-32 initial
|
||||
value. If ((|alder|)) is omitted, it assumes that the initial
|
||||
value is given to ((|alder|)).
|
||||
|
||||
--- Zlib.crc32([string[, crc]])
|
||||
|
||||
Calculates CRC checksum for ((|string|)), and returns
|
||||
updated value of ((|crc|)). If ((|string|)) is omitted,
|
||||
it returns the CRC initial value. ((|crc|)) is omitted,
|
||||
it assumes that the initial value is given to ((|crc|)).
|
||||
|
||||
--- Zlib.crc_table
|
||||
|
||||
Returns the table for calculating CRC checksum as an array.
|
||||
|
||||
=== Constants:
|
||||
|
||||
--- Zlib::VERSION
|
||||
|
||||
The Ruby/zlib version string.
|
||||
|
||||
--- Zlib::ZLIB_VERSION
|
||||
|
||||
The string which represents the version of zlib.h.
|
||||
|
||||
--- Zlib::BINARY
|
||||
--- Zlib::ASCII
|
||||
--- Zlib::UNKNOWN
|
||||
|
||||
The integers representing data types which
|
||||
((<Zlib::ZStream#data_type>)) method returns.
|
||||
|
||||
--- Zlib::NO_COMPRESSION
|
||||
--- Zlib::BEST_SPEED
|
||||
--- Zlib::BEST_COMPRESSION
|
||||
--- Zlib::DEFAULT_COMPRESSION
|
||||
|
||||
The integers representing compression levels which are
|
||||
an argument for ((<Zlib::Deflate.new>)),
|
||||
((<Zlib::Deflate#deflate>)), and so on.
|
||||
|
||||
--- Zlib::FILTERED
|
||||
--- Zlib::HUFFMAN_ONLY
|
||||
--- Zlib::DEFAULT_STRATEGY
|
||||
|
||||
The integers representing compression methods which are
|
||||
an argument for ((<Zlib::Deflate.new>)) and
|
||||
((<Zlib::Deflate#params>)).
|
||||
|
||||
--- Zlib::DEF_MEM_LEVEL
|
||||
--- Zlib::MAX_MEM_LEVEL
|
||||
|
||||
The integers representing memory levels which are an
|
||||
argument for ((<Zlib::Deflate.new>)),
|
||||
((<Zlib::Deflate#params>)), and so on.
|
||||
|
||||
--- Zlib::MAX_WBITS
|
||||
|
||||
The default value of ((|windowBits|)) which is an argument for
|
||||
((<Zlib::Deflate.new>)) and ((<Zlib::Inflate.new>)).
|
||||
|
||||
--- Zlib::NO_FLUSH
|
||||
--- Zlib::SYNC_FLUSH
|
||||
--- Zlib::FULL_FLUSH
|
||||
--- Zlib::FINISH
|
||||
|
||||
The integers to control the output of the deflate stream,
|
||||
which are an argument for ((<Zlib::Deflate#deflate>)) and so on.
|
||||
|
||||
--- Zlib::OS_CODE
|
||||
--- Zlib::OS_MSDOS
|
||||
--- Zlib::OS_AMIGA
|
||||
--- Zlib::OS_VMS
|
||||
--- Zlib::OS_UNIX
|
||||
--- Zlib::OS_VMCMS
|
||||
--- Zlib::OS_ATARI
|
||||
--- Zlib::OS_OS2
|
||||
--- Zlib::OS_MACOS
|
||||
--- Zlib::OS_ZSYSTEM
|
||||
--- Zlib::OS_CPM
|
||||
--- Zlib::OS_TOPS20
|
||||
--- Zlib::OS_WIN32
|
||||
--- Zlib::OS_QDOS
|
||||
--- Zlib::OS_RISCOS
|
||||
--- Zlib::OS_UNKNOWN
|
||||
|
||||
The return values of ((<Zlib::GzipFile#os_code>)) method.
|
||||
|
||||
|
||||
== Zlib::Error
|
||||
|
||||
The superclass for all exceptions raised by Ruby/zlib.
|
||||
|
||||
The following exceptions are defined as subclasses of Zlib::Error.
|
||||
These exceptions are raised when zlib library functions return
|
||||
with an error status.
|
||||
|
||||
* Zlib::StreamEnd
|
||||
* Zlib::NeedDict
|
||||
* Zlib::DataError
|
||||
* Zlib::StreamError
|
||||
* Zlib::MemError
|
||||
* Zlib::BufError
|
||||
* Zlib::VersionError
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* StandardError
|
||||
|
||||
|
||||
== Zlib::ZStream
|
||||
|
||||
The abstract class for the stream which handles the compressed
|
||||
data. The operations are defined in the subclasses,
|
||||
((<Zlib::Deflate>)) for compression, and ((<Zlib::Inflate>))
|
||||
for decompression.
|
||||
|
||||
An instance of Zlib::ZStream has one stream (struct zstream) and
|
||||
two variable-length buffers which associated to the input
|
||||
(next_in) of the stream and the output (next_out) of the stream.
|
||||
In this document, "input buffer" means the buffer for input, and
|
||||
"output buffer" means the buffer for output.
|
||||
|
||||
Data inputed into an instance of Zlib::ZStream are temporally
|
||||
stored into the end of input buffer, and then data in input buffer
|
||||
are processed from the beginning of the buffer until no more
|
||||
output from the stream is produced (i.e. until avail_out > 0
|
||||
after processing). During processing, output buffer is allocated
|
||||
and expanded automatically to hold all output data.
|
||||
|
||||
Some particular instance methods consume the data in output buffer
|
||||
and return them as a String.
|
||||
|
||||
Here is an ascii art for describing above:
|
||||
|
||||
+================ an instance of Zlib::ZStream ================+
|
||||
|| ||
|
||||
|| +--------+ +-------+ +--------+ ||
|
||||
|| +--| output |<---------|zstream|<---------| input |<--+ ||
|
||||
|| | | buffer | next_out+-------+next_in | buffer | | ||
|
||||
|| | +--------+ +--------+ | ||
|
||||
|| | | ||
|
||||
+===|======================================================|===+
|
||||
| |
|
||||
v |
|
||||
"output data" "input data"
|
||||
|
||||
If an error is occurred during processing input buffer,
|
||||
an exception which is a subclass of ((<Zlib::Error>)) is raised.
|
||||
At that time, both input and output buffer keeps their conditions
|
||||
at the time when the error is occurred.
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* Object
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::ZStream.new
|
||||
|
||||
See ((<Zlib::Deflate.new>)) and ((<Zlib::Inflate.new>)).
|
||||
|
||||
=== Methods:
|
||||
|
||||
--- Zlib::ZStream#avail_in
|
||||
|
||||
Returns bytes of data in input buffer.
|
||||
Normally, returns 0.
|
||||
|
||||
--- Zlib::ZStream#avail_out
|
||||
|
||||
Returns bytes of free spaces in output buffer.
|
||||
Because the free spaces are allocated automatically,
|
||||
this method returns 0 normally.
|
||||
|
||||
--- Zlib::ZStream#avail_out = size
|
||||
|
||||
Allocates free spaces of ((|size|)) bytes in output buffer.
|
||||
If there are more than ((|size|)) bytes spaces in the buffer,
|
||||
the buffer is truncated.
|
||||
Because the free spaces are allocated automatically,
|
||||
you usually need not to use this method.
|
||||
|
||||
--- Zlib::ZStream#flush_next_in
|
||||
|
||||
Flushes input buffer and returns all data in that buffer.
|
||||
|
||||
--- Zlib::ZStream#flush_next_out
|
||||
|
||||
Flushes output buffer and returns all data in that buffer.
|
||||
|
||||
--- Zlib::ZStream#total_in
|
||||
|
||||
Returns the total bytes of the input data to the stream.
|
||||
|
||||
--- Zlib::ZStream#total_out
|
||||
|
||||
Returns the total bytes of the output data from the stream.
|
||||
|
||||
--- Zlib::ZStream#data_type
|
||||
|
||||
Guesses the type of the data which have been inputed into
|
||||
the stream. The returned value is either ((<Zlib::BINARY>)),
|
||||
((<Zlib::ASCII>)), or ((<Zlib::UNKNOWN>)).
|
||||
|
||||
--- Zlib::ZStream#adler
|
||||
|
||||
Returns the alder-32 checksum.
|
||||
|
||||
--- Zlib::ZStream#reset
|
||||
|
||||
Resets and initializes the stream. All data in both
|
||||
input and output buffer are discarded.
|
||||
|
||||
--- Zlib::ZStream#finish
|
||||
|
||||
Finishes the stream and flushes output buffer.
|
||||
See ((<Zlib::Deflate#finish>)) and ((<Zlib::Inflate#finish>))
|
||||
for detail of the behavior.
|
||||
|
||||
--- Zlib::ZStream#finished?
|
||||
--- Zlib::ZStream#stream_end?
|
||||
|
||||
Returns true if the stream is finished.
|
||||
|
||||
--- Zlib::ZStream#close
|
||||
--- Zlib::ZStream#end
|
||||
|
||||
Closes the stream. All operations on the closed stream
|
||||
will raise an exception.
|
||||
|
||||
--- Zlib::ZStream#closed?
|
||||
--- Zlib::ZStream#ended?
|
||||
|
||||
Returns true if the stream closed.
|
||||
|
||||
|
||||
== Zlib::Deflate
|
||||
|
||||
The class for compressing string data.
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* ((<Zlib::ZStream>))
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::Deflate.deflate(string[, level])
|
||||
|
||||
Compresses ((|string|)). The avail values of ((|level|)) are
|
||||
((<Zlib::NO_COMPRESSION>)), ((<Zlib::BEST_SPEED>)),
|
||||
((<Zlib::BEST_COMPRESSION>)), ((<Zlib::DEFAULT_COMPRESSION>)),
|
||||
and the integer from 0 to 9.
|
||||
|
||||
This method is almost equivalent to the following code:
|
||||
|
||||
def deflate(string, level)
|
||||
z = Zlib::Deflate.new(level)
|
||||
dst = z.deflate(string, Zlib::FINISH)
|
||||
z.close
|
||||
dst
|
||||
end
|
||||
|
||||
--- Zlib::Deflate.new([level[, windowBits[, memlevel[, strategy]]]])
|
||||
|
||||
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.
|
||||
|
||||
=== Methods:
|
||||
|
||||
--- Zlib::Deflate#clone
|
||||
|
||||
Duplicates the deflate stream.
|
||||
|
||||
--- Zlib::Deflate#deflate(string[, flush])
|
||||
|
||||
Inputs ((|string|)) into the deflate stream and returns
|
||||
the output from the stream. Calling this method,
|
||||
both input and output buffer 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.
|
||||
|
||||
--- Zlib::Deflate#<< string
|
||||
|
||||
Inputs ((|string|)) into the deflate stream just like
|
||||
((<Zlib::Deflate#deflate>)), but returns Zlib::Deflate object
|
||||
itself. The output from the stream is preserved in output
|
||||
buffer.
|
||||
|
||||
--- Zlib::Deflate#flush([flush])
|
||||
|
||||
This method is equivalent to (({deflate('', ((|flush|)))})).
|
||||
If ((|flush|)) is omitted, ((<Zlib::SYNC_FLUSH>)) is used
|
||||
as ((|flush|)). This method is just provided for
|
||||
readability of your Ruby script.
|
||||
|
||||
--- Zlib::Deflate#finish
|
||||
|
||||
Finishes the stream. This method is equivalent to
|
||||
(({deflate('', Zlib::FINISH)})).
|
||||
|
||||
--- Zlib::Deflate#params(level, strategy)
|
||||
|
||||
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.
|
||||
|
||||
--- Zlib::Deflate#set_dictionary(string)
|
||||
|
||||
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.
|
||||
|
||||
|
||||
== Zlib::Inflate
|
||||
|
||||
The class for decompressing compressed data.
|
||||
Unlike ((<Zlib::Deflate>)), an instance of this class is not able
|
||||
to duplicate (clone, dup) itself.
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* ((<Zlib::ZStream>))
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::Inflate.inflate(string)
|
||||
|
||||
Decompresses ((|string|)). Raises a ((<Zlib::NeedDict>))
|
||||
exception if a preset dictionary is needed for decompression.
|
||||
|
||||
This method is almost equivalent to the following code:
|
||||
|
||||
def inflate(string)
|
||||
zstream = Zlib::Inflate.new
|
||||
buf = zstream.inflate(string)
|
||||
zstream.finish
|
||||
zstream.close
|
||||
buf
|
||||
end
|
||||
|
||||
--- Zlib::Inflate.new([windowBits])
|
||||
|
||||
Creates a new inflate stream for decompression.
|
||||
See zlib.h for details of the argument.
|
||||
If ((|windowBits|)) is nil, the default value is used.
|
||||
|
||||
=== Methods:
|
||||
|
||||
--- Zlib::Inflate#inflate(string)
|
||||
|
||||
Inputs ((|string|)) into the inflate stream and returns
|
||||
the output from the stream. Calling this method,
|
||||
both input and 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.
|
||||
|
||||
--- Zlib::Inflate#<< string
|
||||
|
||||
Inputs ((|string|)) into the inflate stream just like
|
||||
((<Zlib::Inflate#inflate>)), but returns Zlib::Inflate object
|
||||
itself. The output from the stream is preserved in output
|
||||
buffer.
|
||||
|
||||
--- Zlib::Inflate#finish
|
||||
|
||||
Finishes the inflate stream and returns the garbage
|
||||
following the compressed data. Raises an exception
|
||||
if the stream is not finished
|
||||
(i.e. ((<Zlib::ZStream#finished?>)) doesn't returns true).
|
||||
|
||||
The inflate stream finishes itself as soon as it meets
|
||||
the end code of the compressed data, you need not to call
|
||||
this method explicitly. However, this method is useful
|
||||
for checking whether the data is correctly ended or not.
|
||||
|
||||
--- Zlib::Inflate#set_dictionary(string)
|
||||
|
||||
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.
|
||||
|
||||
--- Zlib::Inflate#sync(string)
|
||||
|
||||
Inputs ((|string|)) into the end of input buffer and
|
||||
skips data until a full flush point can be found.
|
||||
If the point is found in the buffer, this method flushes
|
||||
the buffer and returns false. Otherwise it returns true
|
||||
and the following data of full flush point is preserved
|
||||
in the buffer.
|
||||
|
||||
--- Zlib::Inflate#sync_point?
|
||||
|
||||
What is this?
|
||||
|
||||
|
||||
== Zlib::GzipFile
|
||||
|
||||
The abstruct class for handling a gzip formatted compressed file.
|
||||
The operations are defined in the subclasses,
|
||||
((<Zlib::GzipReader>)) for reading, and ((<Zlib::GzipWriter>))
|
||||
for writing.
|
||||
|
||||
GzipReader should be used with associating an instance of IO class
|
||||
(or an object which has the same methods as IO has).
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* Object
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::GzipFile.new(args...)
|
||||
|
||||
See ((<Zlib::GzipReader.new>)) and ((<Zlib::GzipWriter.new>)).
|
||||
|
||||
--- Zlib::GzipFile.wrap(args...) {|gz| ... }
|
||||
|
||||
See ((<Zlib::GzipReader.wrap>)) and ((<Zlib::GzipWriter.wrap>)).
|
||||
|
||||
--- Zlib::GzipFile.open(args...) {|gz| ... }
|
||||
|
||||
See ((<Zlib::GzipReader.open>)) and ((<Zlib::GzipWriter.open>)).
|
||||
|
||||
=== Methods:
|
||||
|
||||
--- Zlib::GzipFile#closed?
|
||||
--- Zlib::GzipFile#to_io
|
||||
|
||||
Same as IO.
|
||||
|
||||
--- Zlib::GzipFile#close
|
||||
|
||||
Closes the GzipFile object. This method calls close method
|
||||
of the associated IO object. Returns the associated IO object.
|
||||
|
||||
--- Zlib::GzipFile#finish
|
||||
|
||||
Closes the GzipFile object. Unlike ((<Zlib::GzipFile#close>)),
|
||||
this method ((*never*)) calls close method of the associated IO
|
||||
object. Returns the associated IO object.
|
||||
|
||||
--- Zlib::GzipFile#crc
|
||||
|
||||
Returns CRC value of the uncompressed data.
|
||||
|
||||
--- Zlib::GzipFile#level
|
||||
|
||||
Returns compression level.
|
||||
|
||||
--- Zlib::GzipFile#mtime
|
||||
|
||||
Returns last modification time recorded in the gzip
|
||||
file header.
|
||||
|
||||
--- Zlib::GzipFile#os_code
|
||||
|
||||
Returns OS code number recorded in the gzip file header.
|
||||
|
||||
--- Zlib::GzipFile#orig_name
|
||||
|
||||
Returns original filename recorded in the gzip file header,
|
||||
or nil if original filename is not present.
|
||||
|
||||
--- Zlib::GzipFile#comment
|
||||
|
||||
Returns comments recorded in the gzip file header, or
|
||||
nil if the comments is not present.
|
||||
|
||||
--- Zlib::GzipFile#sync
|
||||
--- Zlib::GzipFile#sync= flag
|
||||
|
||||
Same as IO. If ((|flag|)) is true, the associated IO object
|
||||
must respond to flush method. While `sync' mode is true,
|
||||
the compression ratio decreases sharply.
|
||||
|
||||
|
||||
== Zlib::GzipFile::Error
|
||||
|
||||
The superclass for all exceptions raised during processing a gzip
|
||||
file.
|
||||
|
||||
The following exceptions are defined as subclasses of
|
||||
Zlib::GzipFile::Error.
|
||||
|
||||
: Zlib::GzipFile::NoFooter
|
||||
|
||||
Raised when gzip file footer has not found.
|
||||
|
||||
: Zlib::GzipFile::CRCError
|
||||
|
||||
Raised when the CRC checksum recorded in gzip file footer
|
||||
is not equivalent to CRC checksum of the actually
|
||||
uncompressed data.
|
||||
|
||||
: Zlib::GzipFile::LengthError
|
||||
|
||||
Raised when the data length recorded in gzip file footer
|
||||
is not equivalent to length of the actually uncompressed data.
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* ((<Zlib::Error>))
|
||||
|
||||
|
||||
== Zlib::GzipReader
|
||||
|
||||
The class for reading a gzipped file. GzipReader should be used
|
||||
with associating an instance of IO class (or an object which has
|
||||
the same methods as IO has).
|
||||
|
||||
Zlib::GzipReader.open('hoge.gz') {|gz|
|
||||
print gz.read
|
||||
}
|
||||
|
||||
f = File.open('hoge.gz')
|
||||
gz = Zlib::GzipReader.new(f)
|
||||
print gz.read
|
||||
gz.close
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* ((<Zlib::GzipFile>))
|
||||
|
||||
=== Included Modules:
|
||||
|
||||
* Enumerable
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::GzipReader.new(io)
|
||||
|
||||
Creates a GzipReader object associated with ((|io|)).
|
||||
The GzipReader object reads gzipped data from ((|io|)),
|
||||
and parses/decompresses them. At least, ((|io|)) must have
|
||||
read method that behaves same as read method in IO class.
|
||||
|
||||
If the gzip file header is incorrect, raises an
|
||||
((<Zlib::GzipFile::Error>)) exception.
|
||||
|
||||
--- Zlib::GzipReader.wrap(io) {|gz| ... }
|
||||
|
||||
Creates a GzipReader object associated with ((|io|)), and
|
||||
executes the block with the newly created GzipReader object,
|
||||
just like File::open. The GzipReader object will be closed
|
||||
automatically after executing the block. If you want to keep
|
||||
the associated IO object opening, you may call
|
||||
((<Zlib::GzipFile#finish>)) method in the block.
|
||||
|
||||
--- Zlib::GzipReader.open(filename)
|
||||
--- Zlib::GzipReader.open(filename) {|gz| ... }
|
||||
|
||||
Opens a file specified by ((|filename|)) as a gzipped file,
|
||||
and returns a GzipReader object associated with that file.
|
||||
Further details of this method are same as
|
||||
((<Zlib::GzipReader.new>)) and ((<ZLib::GzipReader.wrap>)).
|
||||
|
||||
=== ¥á¥½¥Ã¥É:
|
||||
|
||||
--- Zlib::GzipReader#eof
|
||||
--- Zlib::GzipReader#eof?
|
||||
|
||||
Returns true if the object reaches the end of compressed data.
|
||||
Note that eof? does ((*not*)) return true when reaches the
|
||||
end of ((*file*)).
|
||||
|
||||
--- Zlib::GzipReader#pos
|
||||
--- Zlib::GzipReader#tell
|
||||
|
||||
Returns the total bytes of data decompressed until now.
|
||||
Not that it does ((*not*)) the position of file pointer.
|
||||
|
||||
--- Zlib::GzipReader#each([rs])
|
||||
--- Zlib::GzipReader#each_line([rs])
|
||||
--- Zlib::GzipReader#each_byte([rs])
|
||||
--- Zlib::GzipReader#gets([rs])
|
||||
--- Zlib::GzipReader#getc
|
||||
--- Zlib::GzipReader#lineno
|
||||
--- Zlib::GzipReader#lineno=
|
||||
--- Zlib::GzipReader#read([length])
|
||||
--- Zlib::GzipReader#readchar
|
||||
--- Zlib::GzipReader#readline([rs])
|
||||
--- Zlib::GzipReader#readlines([rs])
|
||||
--- Zlib::GzipReader#ungetc(char)
|
||||
|
||||
Same as IO, but raises ((<Zlib::Error>)) or
|
||||
((<Zlib::GzipFile::Error>)) exception if an error was found
|
||||
in the gzip file.
|
||||
|
||||
Be careful of the footer of gzip file. A gzip file has
|
||||
the checksum of pre-compressed data in its footer.
|
||||
GzipReader checks all uncompressed data against that checksum
|
||||
at the following cases, and if failed, raises
|
||||
((<Zlib::GzipFile::NoFooter>)), ((<Zlib::GzipFile::CRCError>)),
|
||||
or ((<Zlib::GzipFile::LengthError>)) exception.
|
||||
|
||||
* When an reading request is received beyond the end of file
|
||||
(the end of compressed data).
|
||||
That is, when ((<Zlib::GzipReader#read>)),
|
||||
((<Zlib::GzipReader#gets>)), or some other methods for reading
|
||||
returns nil.
|
||||
|
||||
* When ((<Zlib::GzipFile#close>)) method is called after
|
||||
the object reaches the end of file.
|
||||
|
||||
* When ((<Zlib::GzipReader#unused>)) method is called after
|
||||
the object reaches the end of file.
|
||||
|
||||
--- Zlib::GzipReader#rewind
|
||||
|
||||
Resets the position of the file pointer to the point
|
||||
created the GzipReader object.
|
||||
The associated IO object need to respond to seek method.
|
||||
|
||||
--- Zlib::GzipReader#unused
|
||||
|
||||
Returns the rest of the data which had read for parsing gzip
|
||||
format, or nil if the whole gzip file is not parsed yet.
|
||||
|
||||
|
||||
== Zlib::GzipWriter
|
||||
|
||||
The class for writing a gzipped file. GzipWriter should be used
|
||||
with associate with an instance of IO class (or an object which
|
||||
has the same methods as IO has).
|
||||
|
||||
Zlib::GzipWriter.open('hoge.gz') {|gz|
|
||||
gz.write 'jugemu jugemu gokou no surikire...'
|
||||
}
|
||||
|
||||
f = File.open('hoge.gz', 'w')
|
||||
gz = Zlib::GzipWriter.new(f)
|
||||
gz.write 'jugemu jugemu gokou no surikire...'
|
||||
gz.close
|
||||
|
||||
NOTE: Due to the limitation in finalizer of Ruby, you must close
|
||||
explicitly GzipWriter object by ((<Zlib::GzipWriter#close>)) etc.
|
||||
Otherwise, GzipWriter should be not able to write gzip footer and
|
||||
generate broken gzip file.
|
||||
|
||||
=== SuperClass:
|
||||
|
||||
* ((<Zlib::GzipFile>))
|
||||
|
||||
=== Class Methods:
|
||||
|
||||
--- Zlib::GzipWriter.new(io[, level[, strategy]])
|
||||
|
||||
Creates a GzipWriter object associated with ((|io|)).
|
||||
((|level|)) and ((|strategy|)) should be same as the
|
||||
arguments of ((<Zlib::Deflate.new>)). The GzipWriter object
|
||||
writes gzipped data to ((|io|)). At least, ((|io|)) must
|
||||
respond to write method that behaves same as write method
|
||||
in IO class.
|
||||
|
||||
--- Zlib::GzipWriter.wrap(io[, level[, strategy]]) {|gz| ... }
|
||||
|
||||
Creates a GzipWriter object associated with ((|io|)), and
|
||||
executes the block with the newly created GzipWriter object,
|
||||
just like File::open. The GzipWriter object will be closed
|
||||
automatically after executing the block. If you want to keep
|
||||
the associated IO object opening, you may call
|
||||
((<Zlib::GzipFile#finish>)) method in the block.
|
||||
|
||||
--- Zlib::GzipWriter.open(filename[, level[, strategy]])
|
||||
--- Zlib::GzipWriter.open(filename[, level[, strategy]]) {|gz| ... }
|
||||
|
||||
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 same as ((<Zlib::GzipWriter.new>)) and
|
||||
((<Zlib::GzipWriter#wrap>)).
|
||||
|
||||
|
||||
=== Methods:
|
||||
|
||||
--- Zlib::GzipWriter#close
|
||||
--- Zlib::GzipWriter#finish
|
||||
|
||||
Closes the GzipFile object. This method calls close method
|
||||
of the associated IO object. Returns the associated IO object.
|
||||
See ((<Zlib::GzipFile#close>)) and ((<Zlib::GzipFile#finish>))
|
||||
for the difference between close and finish.
|
||||
|
||||
((*NOTE: Due to the limitation in finalizer of Ruby, you must
|
||||
close GzipWriter object explicitly. Otherwise, GzipWriter
|
||||
should be not able to write gzip footer and generate broken
|
||||
gzip file.*))
|
||||
|
||||
--- Zlib::GzipWriter#pos
|
||||
--- Zlib::GzipWriter#tell
|
||||
|
||||
Returns the total bytes of data compressed until now.
|
||||
Note that it does ((*not*)) the position of file pointer.
|
||||
|
||||
--- Zlib::GzipWriter#<< str
|
||||
--- Zlib::GzipWriter#putc(ch)
|
||||
--- Zlib::GzipWriter#puts(obj...)
|
||||
--- Zlib::GzipWriter#print(arg...)
|
||||
--- Zlib::GzipWriter#printf(format, arg...)
|
||||
--- Zlib::GzipWriter#write(str)
|
||||
|
||||
Same as IO.
|
||||
|
||||
--- Zlib::GzipWriter#flush([flush])
|
||||
|
||||
Flushes all the internal buffers of the GzipWriter object.
|
||||
The meaning of ((|flush|)) is same as one of the argument of
|
||||
((<Zlib::Deflate#deflate>)).
|
||||
((<Zlib::SYNC_FLUSH>)) is used if ((|flush|)) is omitted.
|
||||
It is no use giving ((|flush|)) ((<Zlib::NO_FLUSH>)).
|
||||
|
||||
--- Zlib::GzipWriter#mtime= time
|
||||
|
||||
Sets last modification time to be stored in the gzip file
|
||||
header. ((<Zlib::GzipFile::Error>)) exception will be raised
|
||||
if this method is called after writing method (like
|
||||
((<Zlib::GzipWriter#write>))) was called.
|
||||
|
||||
--- Zlib::GzipWriter#orig_name= filename
|
||||
|
||||
Sets original filename to be stored in the gzip file header.
|
||||
((<Zlib::GzipFile::Error>)) exception will be raised
|
||||
if this method is called after writing method (like
|
||||
((<Zlib::GzipWriter#write>))) was called.
|
||||
|
||||
--- Zlib::GzipWriter#comment= string
|
||||
|
||||
Sets comments to be stored in the gzip file header.
|
||||
((<Zlib::GzipFile::Error>)) exception will be raised
|
||||
if this method is called after writing method (like
|
||||
((<Zlib::GzipWriter#write>))) was called.
|
||||
|
||||
|
||||
== Changes from 0.5 to 0.6
|
||||
|
||||
* New methods:
|
||||
|
||||
* ((<Zlib::GzipFile.wrap>))
|
||||
* ((<Zlib::GzipFile#finish>))
|
||||
|
||||
* New constants:
|
||||
|
||||
* ((<Zlib::ZLIB_VERSION>))
|
||||
* ((<Zlib::OS_VMCMS>))
|
||||
* ((<Zlib::OS_ZSYSTEM>))
|
||||
* ((<Zlib::OS_CPM>))
|
||||
* ((<Zlib::OS_QDOS>))
|
||||
* ((<Zlib::OS_RISCOS>))
|
||||
* ((<Zlib::OS_UNKNOWN>))
|
||||
|
||||
* Changed methods:
|
||||
|
||||
* ((<Zlib::GzipFile.new>)) now takes no block. Use
|
||||
((<Zlib::GzipFile.wrap>)) instead.
|
||||
|
||||
* ((<Zlib::GzipFile#close>)) now takes no argument. Use
|
||||
((<Zlib::GzipFile#finish>)) instead.
|
||||
|
||||
* Renamed methods:
|
||||
|
||||
* Zlib.version is renamed to ((<Zlib.zlib_version>)).
|
||||
|
||||
* Changed constants:
|
||||
|
||||
* ((<Zlib::VERSION>)) indicates the version of Ruby/zlib.
|
||||
The zlib.h version is now in ((<Zlib::ZLIB_VERSION>)).
|
||||
|
||||
* Backward compatibility:
|
||||
|
||||
* For backward compatibility for 0.5, the obsoleted methods and
|
||||
arguments are still available.
|
||||
|
||||
* Obsoleted classes, methods, and constants for backward
|
||||
compatibility for 0.4 or earlier are removed.
|
||||
|
||||
== Changes from 0.4 to 0.5
|
||||
|
||||
Almost all the code are rewritten.
|
||||
I hope all changes are enumerated below :-)
|
||||
|
||||
* The names of almost classes and some methods are changed.
|
||||
All classes and constants are now defined under module
|
||||
((<Zlib>)). The obsoleted names are also available for backward
|
||||
compatibility.
|
||||
|
||||
* Classes
|
||||
|
||||
* Deflate -> ((<Zlib::Deflate>))
|
||||
* Inflate -> ((<Zlib::Inflate>))
|
||||
* Zlib::Gzip -> ((<Zlib::GzipFile>))
|
||||
* GzipReader -> ((<Zlib::GzipReader>))
|
||||
* GzipWriter -> ((<Zlib::GzipWriter>))
|
||||
* Zlib::Gzip::Error -> ((<Zlib::GzipFile::Error>))
|
||||
* Zlib::GzipReader::NoFooter -> ((<Zlib::GzipFile::NoFooter>))
|
||||
* Zlib::GzipReader::CRCError -> ((<Zlib::GzipFile::CRCError>))
|
||||
* Zlib::GzipReader::LengthError -> ((<Zlib::GzipFile::LengthError>))
|
||||
|
||||
* Constants
|
||||
|
||||
* Zlib::ZStream::BINARY -> ((<Zlib::BINARY>))
|
||||
* Zlib::ZStream::ASCII -> ((<Zlib::ASCII>))
|
||||
* Zlib::ZStream::UNKNOWN -> ((<Zlib::UNKNOWN>))
|
||||
* Zlib::Deflate::NO_COMPRESSION -> ((<Zlib::NO_COMPRESSION>))
|
||||
* Zlib::Deflate::BEST_SPEED -> ((<Zlib::BEST_SPEED>))
|
||||
* Zlib::Deflate::BEST_COMPRESSION -> ((<Zlib::BEST_COMPRESSION>))
|
||||
* Zlib::Deflate::DEFAULT_COMPRESSION -> ((<Zlib::DEFAULT_COMPRESSION>))
|
||||
* Zlib::Deflate::FILTERED -> ((<Zlib::FILTERED>))
|
||||
* Zlib::Deflate::HUFFMAN_ONLY -> ((<Zlib::HUFFMAN_ONLY>))
|
||||
* Zlib::Deflate::DEFAULT_STRATEGY -> ((<Zlib::DEFAULT_STRATEGY>))
|
||||
* Zlib::Deflate::MAX_WBITS -> ((<Zlib::MAX_WBITS>))
|
||||
* Zlib::Deflate::DEF_MEM_LEVEL -> ((<Zlib::DEF_MEM_LEVEL>))
|
||||
* Zlib::Deflate::MAX_MEM_LEVEL -> ((<Zlib::MAX_MEM_LEVEL>))
|
||||
* Zlib::Deflate::NO_FLUSH -> ((<Zlib::NO_FLUSH>))
|
||||
* Zlib::Deflate::SYNC_FLUSH -> ((<Zlib::SYNC_FLUSH>))
|
||||
* Zlib::Deflate::FULL_FLUSH -> ((<Zlib::FULL_FLUSH>))
|
||||
* Zlib::Inflate::MAX_WBITS -> ((<Zlib::MAX_WBITS>))
|
||||
* Zlib::GzipReader::OS_* -> ((<Zlib::OS_*|Zlib::OS_CODE>))
|
||||
|
||||
* Methods
|
||||
|
||||
* Zlib::ZStream#flush_out -> ((<Zlib::ZStream#flush_next_out>))
|
||||
|
||||
* Made buffer for input (next_in).
|
||||
|
||||
* ((<Zlib::GzipReader#unused>)) returns nil after closing.
|
||||
|
||||
* Now you are up to call ((<Zlib::GzipWriter#close>)) explicitly
|
||||
to avoid segv in finalizer.
|
||||
((<[ruby-dev:11915]|URL:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/11915>))
|
||||
|
||||
* divided initialize from new.
|
||||
|
||||
* remove sanity checks for arguments for deflateInit2 and
|
||||
inflateInit2.
|
||||
|
||||
* adapted the behavior of ((<Zlib::GzipWriter#puts>)) to Ruby-1.7.
|
||||
|
||||
* Made all functions static.
|
||||
|
||||
|
||||
=end
|
66
ext/zlib/extconf.rb
Normal file
66
ext/zlib/extconf.rb
Normal file
|
@ -0,0 +1,66 @@
|
|||
#
|
||||
# extconf.rb
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
require 'mkmf'
|
||||
require 'rbconfig'
|
||||
|
||||
dir_config 'zlib'
|
||||
|
||||
|
||||
if %w'z libz zlib'.find {|z| have_library(z, 'deflateReset')} and
|
||||
have_header('zlib.h') then
|
||||
|
||||
defines = []
|
||||
|
||||
message 'checking for kind of operating system... '
|
||||
os_code = with_config('os-code') ||
|
||||
case RUBY_PLATFORM.split('-',2)[1]
|
||||
when 'amigaos' then
|
||||
os_code = 'AMIGA'
|
||||
when /\Aos2[\-_]emx\z/ then
|
||||
os_code = 'OS2'
|
||||
when 'mswin32', 'mingw32' then
|
||||
# NOTE: cygwin should be regarded as Unix.
|
||||
os_code = 'WIN32'
|
||||
else
|
||||
os_code = 'UNIX'
|
||||
end
|
||||
os_code = 'OS_' + os_code.upcase
|
||||
|
||||
OS_NAMES = {
|
||||
'OS_MSDOS' => 'MS-DOS',
|
||||
'OS_AMIGA' => 'Amiga',
|
||||
'OS_VMS' => 'VMS',
|
||||
'OS_UNIX' => 'Unix',
|
||||
'OS_ATARI' => 'Atari',
|
||||
'OS_OS2' => 'OS/2',
|
||||
'OS_MACOS' => 'MacOS',
|
||||
'OS_TOPS20' => 'TOPS20',
|
||||
'OS_WIN32' => 'Win32',
|
||||
'OS_VMCMS' => 'VM/CMS',
|
||||
'OS_ZSYSTEM' => 'Z-System',
|
||||
'OS_CPM' => 'CP/M',
|
||||
'OS_QDOS' => 'QDOS',
|
||||
'OS_RISCOS' => 'RISCOS',
|
||||
'OS_UNKNOWN' => 'Unknown',
|
||||
}
|
||||
unless OS_NAMES.key? os_code then
|
||||
puts "invalid OS_CODE `#{os_code}'"
|
||||
exit
|
||||
end
|
||||
message "#{OS_NAMES[os_code]}\n"
|
||||
defines << "OS_CODE=#{os_code}"
|
||||
|
||||
defines = defines.collect{|d|' -D'+d}.join
|
||||
if $CPPFLAGS then
|
||||
$CPPFLAGS += defines
|
||||
else
|
||||
$CFLAGS += defines
|
||||
end
|
||||
|
||||
create_makefile('zlib')
|
||||
|
||||
end
|
2768
ext/zlib/zlib.c
Normal file
2768
ext/zlib/zlib.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue