[clug] Programming - how to use the XZ library?

Paul Wayper paulway at mabula.net
Tue Nov 5 03:08:28 MST 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,

I'm working on trying to add support for the XZ compression format to Cfile,
and I've written a test program to try the basic process before I get too
complicated.  My current work is at:

https://github.com/PaulWay/cfile/blob/master/test-xz.c

It simply opens its own source code and tries to compress that to a file
named test-xz.c.xz.  My attempts so far:

$ gcc -Wall -g -o test-xz test-xz.c -L. -ltalloc -lbz2 -lz -llzma -lcfile
$ ./test-xz
Using easy encoder... Returned 0
Coded 3 bytes, got 0, compressed to 12 bytes
Coded 13 bytes, got 0, compressed to 24 bytes
Coded 46 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 57 bytes, got 0, compressed to 24 bytes
Coded 35 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 68 bytes, got 0, compressed to 24 bytes
Coded 70 bytes, got 0, compressed to 24 bytes
Coded 69 bytes, got 0, compressed to 24 bytes
Coded 55 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 71 bytes, got 0, compressed to 24 bytes
Coded 71 bytes, got 0, compressed to 24 bytes
Coded 68 bytes, got 0, compressed to 24 bytes
Coded 48 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 69 bytes, got 0, compressed to 24 bytes
Coded 72 bytes, got 0, compressed to 24 bytes
Coded 4 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 20 bytes, got 0, compressed to 24 bytes
Coded 19 bytes, got 0, compressed to 24 bytes
Coded 18 bytes, got 0, compressed to 24 bytes
Coded 19 bytes, got 0, compressed to 24 bytes
Coded 20 bytes, got 0, compressed to 24 bytes
Coded 20 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 19 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 25 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 29 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 35 bytes, got 0, compressed to 24 bytes
Coded 43 bytes, got 0, compressed to 24 bytes
Coded 19 bytes, got 0, compressed to 24 bytes
Coded 20 bytes, got 0, compressed to 24 bytes
Coded 25 bytes, got 0, compressed to 24 bytes
Coded 21 bytes, got 0, compressed to 24 bytes
Coded 22 bytes, got 0, compressed to 24 bytes
Coded 13 bytes, got 0, compressed to 24 bytes
Coded 14 bytes, got 0, compressed to 24 bytes
Coded 23 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 45 bytes, got 0, compressed to 24 bytes
Coded 58 bytes, got 0, compressed to 24 bytes
Coded 5 bytes, got 0, compressed to 24 bytes
Coded 68 bytes, got 0, compressed to 24 bytes
Coded 66 bytes, got 0, compressed to 24 bytes
Coded 29 bytes, got 0, compressed to 24 bytes
Coded 35 bytes, got 0, compressed to 24 bytes
Coded 38 bytes, got 0, compressed to 24 bytes
Coded 30 bytes, got 0, compressed to 24 bytes
Coded 36 bytes, got 0, compressed to 24 bytes
Coded 59 bytes, got 0, compressed to 24 bytes
Coded 31 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 27 bytes, got 0, compressed to 24 bytes
Coded 30 bytes, got 0, compressed to 24 bytes
Coded 14 bytes, got 0, compressed to 24 bytes
Coded 49 bytes, got 0, compressed to 24 bytes
Coded 36 bytes, got 0, compressed to 24 bytes
Coded 5 bytes, got 0, compressed to 24 bytes
Coded 16 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 64 bytes, got 0, compressed to 24 bytes
Coded 24 bytes, got 0, compressed to 24 bytes
Coded 26 bytes, got 0, compressed to 24 bytes
Coded 26 bytes, got 0, compressed to 24 bytes
Coded 41 bytes, got 0, compressed to 24 bytes
Coded 64 bytes, got 0, compressed to 24 bytes
Coded 37 bytes, got 0, compressed to 24 bytes
Coded 5 bytes, got 0, compressed to 24 bytes
Coded 32 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 22 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 15 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 45 bytes, got 0, compressed to 24 bytes
Coded 12 bytes, got 0, compressed to 24 bytes
Coded 44 bytes, got 0, compressed to 24 bytes
Coded 72 bytes, got 0, compressed to 24 bytes
Coded 28 bytes, got 0, compressed to 24 bytes
Coded 5 bytes, got 0, compressed to 24 bytes
Coded 37 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 28 bytes, got 0, compressed to 24 bytes
Coded 56 bytes, got 0, compressed to 24 bytes
Coded 30 bytes, got 0, compressed to 24 bytes
Coded 15 bytes, got 0, compressed to 24 bytes
Coded 49 bytes, got 0, compressed to 24 bytes
Coded 36 bytes, got 0, compressed to 24 bytes
Coded 5 bytes, got 0, compressed to 24 bytes
Coded 16 bytes, got 0, compressed to 24 bytes
Coded 3 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 30 bytes, got 0, compressed to 24 bytes
Coded 48 bytes, got 0, compressed to 24 bytes
Coded 16 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 36 bytes, got 0, compressed to 24 bytes
Coded 20 bytes, got 0, compressed to 24 bytes
Coded 22 bytes, got 0, compressed to 24 bytes
Coded 23 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 17 bytes, got 0, compressed to 24 bytes
Coded 39 bytes, got 0, compressed to 24 bytes
Coded 75 bytes, got 0, compressed to 24 bytes
Coded 38 bytes, got 0, compressed to 24 bytes
Coded 11 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 35 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 33 bytes, got 0, compressed to 24 bytes
Coded 51 bytes, got 0, compressed to 24 bytes
Coded 32 bytes, got 0, compressed to 24 bytes
Coded 1 bytes, got 0, compressed to 24 bytes
Coded 34 bytes, got 0, compressed to 24 bytes
Coded 22 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 38 bytes, got 0, compressed to 24 bytes
Coded 26 bytes, got 0, compressed to 24 bytes
Coded 25 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Coded 2 bytes, got 0, compressed to 24 bytes
Finalising compression: got 1, 184 bytes ready in buffer
Read 3481 bytes!
Talloc report when finishing encoding, after freeing memory:
full talloc report on 'main test-xz context' (total     21 bytes in   2 blocks)
    .name                          contains     21 bytes in   1 blocks (ref
0) 0x18ff150
full talloc report on 'main test-xz context' (total     21 bytes in   2 blocks)
    .name                          contains     21 bytes in   1 blocks (ref
0) 0x18ff150
$ file test-xz.c.xz
test-xz.c.xz: XZ compressed data
$ xzcat test-xz.c.xz
 * This file is part of The PaulWay Libraries
qp���U2@p
           ��7zXZ�ִF!
�X�

In other words, everything seems to go OK, but the output is garbage.

I'm currently trying to implement things much as the xz source code does,
but it's a bit of a labyrinth.

Any suggestions of what might be going wrong, how to fix it, patches, pull
requests, encouragement, criticism, or outright denial will be gratefully
appreciated.

Thanks in advance,

Paul
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.15 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iEYEARECAAYFAlJ4w5sACgkQu7W0U8VsXYKzswCgoMpWU/NqZ4TSXGdTx9moNtXg
YR4AnRIM1Lx7oDzn6fld1U/IqWA1336P
=IT4D
-----END PGP SIGNATURE-----


More information about the linux mailing list