Closed Clownacy closed 6 years ago
Looking over, it is a general big in the implementation: BasicDecoder::encode should be the one padding the final file size to even size, not the individual encoders. The encoder::encode method should also probably be private and the BasicDecoder class be made a friend also. And a few minor improvements.
Will look more closely tonight.
I think this should fix, but I won't be able to test until tomorrow night. Will leave it open until it is properly tested.
After a few false starts because Gnome Builder decided I wanted things installed to ~/.cache/gnome-builder/install instead of in /usr/local, I finally managed to confirm that it is fixed.
Need also to add some size checks to all these cases; moduled formats only work if the uncompressed file is strictly less than 64kB in size because there are only 2 bytes for size.
If you compress and decompress a file (in my case ARZ's level art), the decompressed file won't match the original. I found two ways to fix this, but I'm unfamiliar with Moduled formats, so I'm not sure which is best:
moduled_kosplus
inkosplus.h
to use 16u instead of 1u.kosplus::encode
.kosplus.cc
mentions that Kosinski+ doesn't need padding, so the first option is probably nonsense that just removes a feature. However, I'm not sure why the compressed file needs padding to an even byte, so I can't say for sure that the second option is best either.If the single-byte padding is absolutely necessary, I guess
moduled_kosplus
can just be set to 2u instead.