diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-04-29T15·02+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-04-29T15·02+0200 |
commit | 5acb6914020a94be8468d7670b564388c59794ee (patch) | |
tree | 0ba3c95263577cab2cd5a69810c755485ef57a4c /src/libutil/compression.cc | |
parent | 8e065c6b3e36e4cd113769575c0045b6d42357ef (diff) |
BinaryCacheStore: Support "none" compression method
Diffstat (limited to 'src/libutil/compression.cc')
-rw-r--r-- | src/libutil/compression.cc | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/libutil/compression.cc b/src/libutil/compression.cc index beede13211fa..e8a820d30429 100644 --- a/src/libutil/compression.cc +++ b/src/libutil/compression.cc @@ -15,7 +15,7 @@ struct LzmaStream lzma_stream & operator()() { return strm; } }; -std::string compressXZ(const std::string & in) +static ref<std::string> compressXZ(const std::string & in) { LzmaStream strm; @@ -28,7 +28,7 @@ std::string compressXZ(const std::string & in) lzma_action action = LZMA_RUN; uint8_t outbuf[BUFSIZ]; - string res; + ref<std::string> res = make_ref<std::string>(); strm().next_in = (uint8_t *) in.c_str(); strm().avail_in = in.size(); strm().next_out = outbuf; @@ -43,7 +43,7 @@ std::string compressXZ(const std::string & in) lzma_ret ret = lzma_code(&strm(), action); if (strm().avail_out == 0 || ret == LZMA_STREAM_END) { - res.append((char *) outbuf, sizeof(outbuf) - strm().avail_out); + res->append((char *) outbuf, sizeof(outbuf) - strm().avail_out); strm().next_out = outbuf; strm().avail_out = sizeof(outbuf); } @@ -56,7 +56,7 @@ std::string compressXZ(const std::string & in) } } -ref<std::string> decompressXZ(const std::string & in) +static ref<std::string> decompressXZ(const std::string & in) { LzmaStream strm; @@ -95,4 +95,24 @@ ref<std::string> decompressXZ(const std::string & in) } } +ref<std::string> compress(const std::string & method, ref<std::string> in) +{ + if (method == "none") + return in; + else if (method == "xz") + return compressXZ(*in); + else + throw UnknownCompressionMethod(format("unknown compression method ‘%s’") % method); +} + +ref<std::string> decompress(const std::string & method, ref<std::string> in) +{ + if (method == "none") + return in; + else if (method == "xz") + return decompressXZ(*in); + else + throw UnknownCompressionMethod(format("unknown compression method ‘%s’") % method); +} + } |