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 15extern LZMA_API(lzma_ret) 16lzma_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 29extern LZMA_API(lzma_ret) 30lzma_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