Skip to content
This repository has been archived by the owner on Mar 21, 2023. It is now read-only.

glv2/cl-lzlib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cl-lzlib

The active repository is at https://codeberg.org/glv/cl-lzlib

Description

cl-lzlib is a Common Lisp library for lzip (LZMA) compression/decompression using bindings to the lzlib C library.

License

cl-lzlib is released under the GPL-3 license or later. See the LICENSE file for details.

Dependencies

cl-lzlib requires:

cl-lzlib can be easily installed with quicklisp.

A lzlib package should be available in almost every GNU/Linux or *BSD distribution. For example it is called lzlib on Gentoo and Guix, and liblz1 on Debian and Ubuntu.

API

The library can be loaded with the usual:

(asdf:load-system "lzlib")

or

(quicklisp:quickload "lzlib")

The functions will then be available in the lzlib package.

Compression

The compression can be customized using serveral parameters:

  • The maximum size of members inside the lzip archive can be indicated with the member-size parameter. The default value is 2 PiB.
  • The compression level can be indicated either using the level parameter, or by using both the dictionary-size and match-len-limit parameters. The default level is 6, which sets dictionary-size to 8 MiB and match-len-limit to 36. level must be between 0 (fast encoder) and 9 (strong compression).
  • When the threads parameter is greater than 1, the data is read by blocks of block-size bytes and the blocks are compressed in parallel. The default block size is the double of the dictionary size.
(compress-stream input output &key threads level member-size block-size dictionary-size match-len-limit) => t

Read the data from the input octet stream, compress it, and write the result to the output octet stream.

(compress-file input output &key threads level member-size block-size dictionary-size match-len-limit) => t

Read the data from the input file, compress it, and write the result to the output file.

(compress-buffer buffer &key start end threads level member-size block-size dictionary-size match-len-limit) => bytes

Read the data between the start and end offsets in the buffer, compress it, and return the resulting octet vector.

(make-compressing-stream output-stream &key level member-size dictionary-size match-len-limit) => stream

Return a stream that will compress the bytes written to it at the given compression level and write them to the output-stream.

(with-compressing-stream (stream output-stream &key level member-size dictionary-size match-len-limit) &body body)

Within body, stream is bound to a compressing stream for the given compression level and output-stream. The result of the last form of body is returned.

Decompression

The decompression can be customized using serveral parameters:

  • When an archive has some trailing data, if ignore-trailing is nil an error will be generated, otherwise the trailing data will be ignored.
  • When an archive has some trailing data looking like a corrupt header, if loose-trailing is nil an error will be generated, otherwise the trailing data will be ignored.
  • When the threads parameter is greater than 1, the library will decompress the members of the archive in parallel. Note that if the archive only has 1 member, the decompression will be faster and use less memory when threads is also 1.
(decompress-stream input output &key threads ignore-trailing loose-trailing) => t

Read the data from the input octet stream, decompress it, and write the result to the output octet stream.

(decompress-file input output &key threads ignore-trailing loose-trailing) => t

Read the data from the input file, decompress it, and write the result to the output file.

(decompress-buffer buffer &key start end threads ignore-trailing loose-trailing) => bytes

Read the data between the start and end offsets in the buffer, decompress it, and return the resulting octet vector.

(make-decompressing-stream input-stream &key ignore-trailing loose-trailing) => stream

Return a stream that will supply the bytes resulting from the decompression of the data read from the input-stream.

(with-decompressing-stream (stream input-stream &key ignore-trailing loose-trailing) &body body)

Within body, stream is bound to a decompressing stream for the given input-stream. The result of the last form of body is returned.

Tests

The tests require the fiveam package. They can be run with:

(asdf:test-system "lzlib")

About

Common Lisp library for lzip (LZMA) (de)compression using bindings to the lzlib C library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published