BTW, is there any special reason why the encoder and decoder are
void*-pointers? I know, behind the scenes these pointers are casted
onto a C++ object, but from type safety considerations I would expect
a pointer onto some kind of type. Why don't you declare a zero sized
C-struct, say struct LZ_Decoder {}; and struct LZ_Encoder {}; and
rewrite the prototypes of the functions to expect a pointer onto these
dummy structs. This would make the code of the lzlib clients a lot
typesafer, so that mixing up a decoder with an encoder is detected
during compile time instead of runtime.