1207753Smm/////////////////////////////////////////////////////////////////////////////// 2207753Smm// 3207753Smm/// \file filter_flags_encoder.c 4207753Smm/// \brief Decodes a Filter Flags field 5207753Smm// 6207753Smm// Author: Lasse Collin 7207753Smm// 8207753Smm// This file has been put into the public domain. 9207753Smm// You can do whatever you want with this file. 10207753Smm// 11207753Smm/////////////////////////////////////////////////////////////////////////////// 12207753Smm 13207753Smm#include "filter_encoder.h" 14207753Smm 15207753Smm 16207753Smmextern LZMA_API(lzma_ret) 17207753Smmlzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) 18207753Smm{ 19207753Smm if (filter->id >= LZMA_FILTER_RESERVED_START) 20207753Smm return LZMA_PROG_ERROR; 21207753Smm 22207753Smm return_if_error(lzma_properties_size(size, filter)); 23207753Smm 24207753Smm *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); 25207753Smm 26207753Smm return LZMA_OK; 27207753Smm} 28207753Smm 29207753Smm 30207753Smmextern LZMA_API(lzma_ret) 31207753Smmlzma_filter_flags_encode(const lzma_filter *filter, 32207753Smm uint8_t *out, size_t *out_pos, size_t out_size) 33207753Smm{ 34207753Smm // Filter ID 35207753Smm if (filter->id >= LZMA_FILTER_RESERVED_START) 36207753Smm return LZMA_PROG_ERROR; 37207753Smm 38207753Smm return_if_error(lzma_vli_encode(filter->id, NULL, 39207753Smm out, out_pos, out_size)); 40207753Smm 41207753Smm // Size of Properties 42207753Smm uint32_t props_size; 43207753Smm return_if_error(lzma_properties_size(&props_size, filter)); 44207753Smm return_if_error(lzma_vli_encode(props_size, NULL, 45207753Smm out, out_pos, out_size)); 46207753Smm 47207753Smm // Filter Properties 48207753Smm if (out_size - *out_pos < props_size) 49207753Smm return LZMA_PROG_ERROR; 50207753Smm 51207753Smm return_if_error(lzma_properties_encode(filter, out + *out_pos)); 52207753Smm 53207753Smm *out_pos += props_size; 54207753Smm 55207753Smm return LZMA_OK; 56207753Smm} 57