1 // SPDX-License-Identifier: 0BSD 2 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 /// \file filter_flags_encoder.c 6 /// \brief Encodes a Filter Flags field 7 // 8 // Author: Lasse Collin 9 // 10 /////////////////////////////////////////////////////////////////////////////// 11 12 #include "filter_encoder.h" 13 14 15 extern LZMA_API(lzma_ret) 16 lzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) 17 { 18 if (filter->id >= LZMA_FILTER_RESERVED_START) 19 return LZMA_PROG_ERROR; 20 21 return_if_error(lzma_properties_size(size, filter)); 22 23 *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); 24 25 return LZMA_OK; 26 } 27 28 29 extern LZMA_API(lzma_ret) 30 lzma_filter_flags_encode(const lzma_filter *filter, 31 uint8_t *out, size_t *out_pos, size_t out_size) 32 { 33 // Filter ID 34 if (filter->id >= LZMA_FILTER_RESERVED_START) 35 return LZMA_PROG_ERROR; 36 37 return_if_error(lzma_vli_encode(filter->id, NULL, 38 out, out_pos, out_size)); 39 40 // Size of Properties 41 uint32_t props_size; 42 return_if_error(lzma_properties_size(&props_size, filter)); 43 return_if_error(lzma_vli_encode(props_size, NULL, 44 out, out_pos, out_size)); 45 46 // Filter Properties 47 if (out_size - *out_pos < props_size) 48 return LZMA_PROG_ERROR; 49 50 return_if_error(lzma_properties_encode(filter, out + *out_pos)); 51 52 *out_pos += props_size; 53 54 return LZMA_OK; 55 } 56