Index: xz/src/liblzma/common/filter_buffer_encoder.c |
=================================================================== |
--- xz/src/liblzma/common/filter_buffer_encoder.c (revision 0) |
+++ xz/src/liblzma/common/filter_buffer_encoder.c (revision 0) |
@@ -0,0 +1,54 @@ |
+/////////////////////////////////////////////////////////////////////////////// |
+// |
+/// \file filter_buffer_encoder.c |
+/// \brief Single-call raw encoding |
+// |
+// Author: Lasse Collin |
+// |
+// This file has been put into the public domain. |
+// You can do whatever you want with this file. |
+// |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+#include "filter_encoder.h" |
+ |
+ |
+extern LZMA_API(lzma_ret) |
+lzma_raw_buffer_encode(const lzma_filter *filters, lzma_allocator *allocator, |
+ const uint8_t *in, size_t in_size, uint8_t *out, |
+ size_t *out_pos, size_t out_size) |
+{ |
+ // Validate what isn't validated later in filter_common.c. |
+ if ((in == NULL && in_size != 0) || out == NULL |
+ || out_pos == NULL || *out_pos > out_size) |
+ return LZMA_PROG_ERROR; |
+ |
+ // Initialize the encoder |
+ lzma_next_coder next = LZMA_NEXT_CODER_INIT; |
+ return_if_error(lzma_raw_encoder_init(&next, allocator, filters)); |
+ |
+ // Store the output position so that we can restore it if |
+ // something goes wrong. |
+ const size_t out_start = *out_pos; |
+ |
+ // Do the actual encoding and free coder's memory. |
+ size_t in_pos = 0; |
+ lzma_ret ret = next.code(next.coder, allocator, in, &in_pos, in_size, |
+ out, out_pos, out_size, LZMA_FINISH); |
+ lzma_next_end(&next, allocator); |
+ |
+ if (ret == LZMA_STREAM_END) { |
+ ret = LZMA_OK; |
+ } else { |
+ if (ret == LZMA_OK) { |
+ // Output buffer was too small. |
+ assert(*out_pos == out_size); |
+ ret = LZMA_BUF_ERROR; |
+ } |
+ |
+ // Restore the output position. |
+ *out_pos = out_start; |
+ } |
+ |
+ return ret; |
+} |
Property changes on: xz/src/liblzma/common/filter_buffer_encoder.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |