| simple_coder.c | simple_coder.c | |||
|---|---|---|---|---|
| skipping to change at line 20 | skipping to change at line 20 | |||
| // | // | |||
| // This file has been put into the public domain. | // This file has been put into the public domain. | |||
| // You can do whatever you want with this file. | // You can do whatever you want with this file. | |||
| // | // | |||
| /////////////////////////////////////////////////////////////////////////// //// | /////////////////////////////////////////////////////////////////////////// //// | |||
| #include "simple_private.h" | #include "simple_private.h" | |||
| /// Copied or encodes/decodes more data to out[]. | /// Copied or encodes/decodes more data to out[]. | |||
| static lzma_ret | static lzma_ret | |||
| copy_or_code(lzma_coder *coder, lzma_allocator *allocator, | copy_or_code(lzma_coder *coder, const lzma_allocator *allocator, | |||
| const uint8_t *restrict in, size_t *restrict in_pos, | const uint8_t *restrict in, size_t *restrict in_pos, | |||
| size_t in_size, uint8_t *restrict out, | size_t in_size, uint8_t *restrict out, | |||
| size_t *restrict out_pos, size_t out_size, lzma_action actio n) | size_t *restrict out_pos, size_t out_size, lzma_action actio n) | |||
| { | { | |||
| assert(!coder->end_was_reached); | assert(!coder->end_was_reached); | |||
| if (coder->next.code == NULL) { | if (coder->next.code == NULL) { | |||
| lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); | lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); | |||
| // Check if end of stream was reached. | // Check if end of stream was reached. | |||
| skipping to change at line 66 | skipping to change at line 66 | |||
| call_filter(lzma_coder *coder, uint8_t *buffer, size_t size) | call_filter(lzma_coder *coder, uint8_t *buffer, size_t size) | |||
| { | { | |||
| const size_t filtered = coder->filter(coder->simple, | const size_t filtered = coder->filter(coder->simple, | |||
| coder->now_pos, coder->is_encoder, | coder->now_pos, coder->is_encoder, | |||
| buffer, size); | buffer, size); | |||
| coder->now_pos += filtered; | coder->now_pos += filtered; | |||
| return filtered; | return filtered; | |||
| } | } | |||
| static lzma_ret | static lzma_ret | |||
| simple_code(lzma_coder *coder, lzma_allocator *allocator, | simple_code(lzma_coder *coder, const lzma_allocator *allocator, | |||
| const uint8_t *restrict in, size_t *restrict in_pos, | const uint8_t *restrict in, size_t *restrict in_pos, | |||
| size_t in_size, uint8_t *restrict out, | size_t in_size, uint8_t *restrict out, | |||
| size_t *restrict out_pos, size_t out_size, lzma_action actio n) | size_t *restrict out_pos, size_t out_size, lzma_action actio n) | |||
| { | { | |||
| // TODO: Add partial support for LZMA_SYNC_FLUSH. We can support it | // TODO: Add partial support for LZMA_SYNC_FLUSH. We can support it | |||
| // in cases when the filter is able to filter everything. With most | // in cases when the filter is able to filter everything. With most | |||
| // simple filters it can be done at offset that is a multiple of 2, | // simple filters it can be done at offset that is a multiple of 2, | |||
| // 4, or 16. With x86 filter, it needs good luck, and thus cannot | // 4, or 16. With x86 filter, it needs good luck, and thus cannot | |||
| // be made to work predictably. | // be made to work predictably. | |||
| if (action == LZMA_SYNC_FLUSH) | if (action == LZMA_SYNC_FLUSH) | |||
| skipping to change at line 197 | skipping to change at line 197 | |||
| } | } | |||
| // Check if we got everything done. | // Check if we got everything done. | |||
| if (coder->end_was_reached && coder->pos == coder->size) | if (coder->end_was_reached && coder->pos == coder->size) | |||
| return LZMA_STREAM_END; | return LZMA_STREAM_END; | |||
| return LZMA_OK; | return LZMA_OK; | |||
| } | } | |||
| static void | static void | |||
| simple_coder_end(lzma_coder *coder, lzma_allocator *allocator) | simple_coder_end(lzma_coder *coder, const lzma_allocator *allocator) | |||
| { | { | |||
| lzma_next_end(&coder->next, allocator); | lzma_next_end(&coder->next, allocator); | |||
| lzma_free(coder->simple, allocator); | lzma_free(coder->simple, allocator); | |||
| lzma_free(coder, allocator); | lzma_free(coder, allocator); | |||
| return; | return; | |||
| } | } | |||
| static lzma_ret | static lzma_ret | |||
| simple_coder_update(lzma_coder *coder, lzma_allocator *allocator, | simple_coder_update(lzma_coder *coder, const lzma_allocator *allocator, | |||
| const lzma_filter *filters_null lzma_attribute((__unused__)) , | const lzma_filter *filters_null lzma_attribute((__unused__)) , | |||
| const lzma_filter *reversed_filters) | const lzma_filter *reversed_filters) | |||
| { | { | |||
| // No update support, just call the next filter in the chain. | // No update support, just call the next filter in the chain. | |||
| return lzma_next_filter_update( | return lzma_next_filter_update( | |||
| &coder->next, allocator, reversed_filters + 1); | &coder->next, allocator, reversed_filters + 1); | |||
| } | } | |||
| extern lzma_ret | extern lzma_ret | |||
| lzma_simple_coder_init(lzma_next_coder *next, lzma_allocator *allocator, | lzma_simple_coder_init(lzma_next_coder *next, const lzma_allocator *allocat or, | |||
| const lzma_filter_info *filters, | const lzma_filter_info *filters, | |||
| size_t (*filter)(lzma_simple *simple, uint32_t now_pos, | size_t (*filter)(lzma_simple *simple, uint32_t now_pos, | |||
| bool is_encoder, uint8_t *buffer, size_t size), | bool is_encoder, uint8_t *buffer, size_t size), | |||
| size_t simple_size, size_t unfiltered_max, | size_t simple_size, size_t unfiltered_max, | |||
| uint32_t alignment, bool is_encoder) | uint32_t alignment, bool is_encoder) | |||
| { | { | |||
| // Allocate memory for the lzma_coder structure if needed. | // Allocate memory for the lzma_coder structure if needed. | |||
| if (next->coder == NULL) { | if (next->coder == NULL) { | |||
| // Here we allocate space also for the temporary buffer. We | // Here we allocate space also for the temporary buffer. We | |||
| // need twice the size of unfiltered_max, because then it | // need twice the size of unfiltered_max, because then it | |||
| End of changes. 5 change blocks. | ||||
| 5 lines changed or deleted | 5 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||