diff options
-rw-r--r-- | src/cmd/compress.cpp | 8 | ||||
-rw-r--r-- | src/lib/compression/compression.cpp | 4 | ||||
-rw-r--r-- | src/lib/compression/lzma/lzma.cpp | 9 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/cmd/compress.cpp b/src/cmd/compress.cpp index 646a4d587..d7456fc31 100644 --- a/src/cmd/compress.cpp +++ b/src/cmd/compress.cpp @@ -35,9 +35,9 @@ void do_compress(Transform& comp, std::ifstream& in, std::ostream& out) int compress(int argc, char* argv[]) { - if(argc != 2 && argc != 3) + if(argc != 2 && argc != 3 && argc != 4) { - std::cout << "Usage: " << argv[0] << " input [type]\n"; + std::cout << "Usage: " << argv[0] << " input [type] [level]\n"; return 1; } @@ -50,8 +50,8 @@ int compress(int argc, char* argv[]) return 1; } - const size_t level = 9; - const std::string suffix = argc == 3 ? argv[2] : "gz"; + const std::string suffix = argc >= 3 ? argv[2] : "gz"; + const size_t level = argc >= 4 ? to_u32bit(argv[3]) : 9; std::unique_ptr<Transform> compress(make_compressor(suffix, level)); diff --git a/src/lib/compression/compression.cpp b/src/lib/compression/compression.cpp index 600f2c3ae..8e976d572 100644 --- a/src/lib/compression/compression.cpp +++ b/src/lib/compression/compression.cpp @@ -47,9 +47,9 @@ Transform* make_compressor(const std::string& type, size_t level) if(type == "gzip" || type == "gz") return get_transform("Gzip" + comp_suffix); if(type == "bzip2" || type == "bz2") - return get_transform("Bzip2", comp_suffix); + return get_transform("Bzip2" + comp_suffix); if(type == "lzma" || type == "xz") - return get_transform("LZMA", comp_suffix); + return get_transform("LZMA" + comp_suffix); return nullptr; } diff --git a/src/lib/compression/lzma/lzma.cpp b/src/lib/compression/lzma/lzma.cpp index c7e6ab815..93a969d70 100644 --- a/src/lib/compression/lzma/lzma.cpp +++ b/src/lib/compression/lzma/lzma.cpp @@ -23,10 +23,11 @@ class LZMA_Stream : public Zlib_Style_Stream<lzma_stream, byte> public: LZMA_Stream() { - streamp()->allocator = new ::lzma_allocator; - streamp()->allocator->opaque = alloc(); - streamp()->allocator->alloc = Compression_Alloc_Info::malloc<size_t>; - streamp()->allocator->free = Compression_Alloc_Info::free; + auto a = new ::lzma_allocator; + a->opaque = alloc(); + a->alloc = Compression_Alloc_Info::malloc<size_t>; + a->free = Compression_Alloc_Info::free; + streamp()->allocator = a; } ~LZMA_Stream() |