xz: Fix return value type in io_write_buf().
[xz/debian.git] / TODO
blob9cdb4190eaa311594298868d1e41e34409a2b023
2 XZ Utils To-Do List
3 ===================
5 Known bugs
6 ----------
8     The test suite is too incomplete.
10     If the memory usage limit is less than about 13 MiB, xz is unable to
11     automatically scale down the compression settings enough even though
12     it would be  possible by switching from BT2/BT3/BT4 match finder to
13     HC3/HC4.
15     The code to detect number of CPU cores doesn't count hyperthreading
16     as multiple cores. In context of xz, it probably should.
17     Hyperthreading is good at least with p7zip.
19     XZ Utils compress some files significantly worse than LZMA Utils.
20     This is due to faster compression presets used by XZ Utils, and
21     can often be worked around by using "xz --extreme". With some files
22     --extreme isn't enough though: it's most likely with files that
23     compress extremely well, so going from compression ratio of 0.003
24     to 0.004 means big relative increase in the compressed file size.
26     xz doesn't quote unprintable characters when it displays file names
27     given on the command line.
29     tuklib_exit() doesn't block signals => EINTR is possible.
31     SIGTSTP is not handled. If xz is stopped, the estimated remaining
32     time and calculated (de)compression speed won't make sense in the
33     progress indicator (xz --verbose).
35     If liblzma has created threads and fork() gets called, liblzma
36     code will break in the child process unless it calls exec() and
37     doesn't touch liblzma.
40 Missing features
41 ----------------
43     Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and
44     other streams that don't have an end of payload marker.
46     Adjust dictionary size when the input file size is known.
47     Maybe do this only if an option is given.
49     xz doesn't support copying extended attributes, access control
50     lists etc. from source to target file.
52     Multithreaded compression:
53       - Reduce memory usage of the current method.
54       - Implement threaded match finders.
55       - Implement pigz-style threading in LZMA2.
57     Multithreaded decompression
59     Buffer-to-buffer coding could use less RAM (especially when
60     decompressing LZMA1 or LZMA2).
62     I/O library is not implemented (similar to gzopen() in zlib).
63     It will be a separate library that supports uncompressed, .gz,
64     .bz2, .lzma, and .xz files.
66     Support changing lzma_options_lzma.mode with lzma_filters_update().
68     Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
69     Block and Stream boundaries.
71     lzma_strerror() to convert lzma_ret to human readable form?
72     This is tricky, because the same error codes are used with
73     slightly different meanings, and this cannot be fixed anymore.
76 Documentation
77 -------------
79     Some tutorial is needed for liblzma. I have planned to write some
80     extremely well commented example programs, which would work as
81     a tutorial. I suppose the Doxygen tags are quite OK as a quick
82     reference once one is familiar with the liblzma API.
84     Document the LZMA1 and LZMA2 algorithms.