This will be included in libarchive 2.6.0, which I hope to
have ready for testing next month.
Tim
Miklos Vajna wrote:
On Mon, Jul 31, 2006 at 09:58:28PM -0700, Tim Kientzle <[EMAIL PROTECTED]>
wrote:
It should be pretty simple. Look at
archive_read_support_format_compress() for an
example. (The gzip/bzip2 examples are a little
more complex because of how those libraries work.)
You'll need to define archive_read_support_compression_lzma(),
which just registers a 'bid' function and an 'init' function.
The 'bid' function checks whether this is an lzma stream.
The 'init' function then sets up three function pointers:
compression_read_ahead : This returns a pointer/size to
the next block of uncompressed data. (The block should be
as large as the requested size.)
compression_read_consume : This informs the decompressor
that some of the data has been used.
compression_finish : clean up.
You can ignore compression_skip; it is used only by
compression_none.
The decompressor calls a->client_reader to get blocks
of data and calls a->client_closer when it hits the
end of the stream (or when compression_finish is called).
The hardest part is getting the buffer management right.
The compression layer has to track positions in the
compressed data (blocks from the client_reader) and
uncompressed data (as the format layer calls
compression_read_consume).
Hi Tim,
First, sorry for the extremely slow answer. This message was now sitting
in my inbox for 2 years, but finally today I gave it a try, and you had
reason, it was pretty simple.
Here is the result:
http://frugalware.org/~vmiklos/patches/libarchive-add-lzma-read-support-using-liblzmadec.patch
The patch is against version 2.5.5.
I looked through the lzma code and it looks like a pretty
simple job. The hardest part is figuring out how to get
an lzma library. Because the lzma code is GPL, I cannot
include it with libarchive; I haven't seen an lzma standalone
library, either, just the 7zip program source.
About the license war, I think this is not an issue. See the lzma
license at:
http://www.7-zip.org/sdk.html
It's availalbe under LGPL, so you can link to it in libarchive, while
keeping libarchive's BSD license. IANAL, but that's how I understand it.
I left one FIXME in the code, the FreeBSD CVS/SVN ID, I don't know how
that works, but I'm sure it's trivial for you. :-)
To sum up, please have a look at it, I would be happy if one day it
could be part of the vanilla libarchive. ;-)
Thanks!
_______________________________________________
Frugalware-devel mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-devel