1 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */ 2 // vim: expandtab:ts=8:sw=4:softtabstop=4: 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 /// \file filter_flags_encoder.c 6 /// \brief Decodes a Filter Flags field 7 // 8 // Author: Lasse Collin 9 // 10 // This file has been put into the public domain. 11 // You can do whatever you want with this file. 12 // 13 /////////////////////////////////////////////////////////////////////////////// 14 15 #include "filter_encoder.h" 16 17 18 extern LZMA_API(lzma_ret) 19 lzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) 20 { 21 if (filter->id >= LZMA_FILTER_RESERVED_START) 22 return LZMA_PROG_ERROR; 23 24 return_if_error(lzma_properties_size(size, filter)); 25 26 *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); 27 28 return LZMA_OK; 29 } 30 31 32 extern LZMA_API(lzma_ret) 33 lzma_filter_flags_encode(const lzma_filter *filter, 34 uint8_t *out, size_t *out_pos, size_t out_size) 35 { 36 // Filter ID 37 if (filter->id >= LZMA_FILTER_RESERVED_START) 38 return LZMA_PROG_ERROR; 39 40 return_if_error(lzma_vli_encode(filter->id, NULL, 41 out, out_pos, out_size)); 42 43 // Size of Properties 44 uint32_t props_size; 45 return_if_error(lzma_properties_size(&props_size, filter)); 46 return_if_error(lzma_vli_encode(props_size, NULL, 47 out, out_pos, out_size)); 48 49 // Filter Properties 50 if (out_size - *out_pos < props_size) 51 return LZMA_PROG_ERROR; 52 53 return_if_error(lzma_properties_encode(filter, out + *out_pos)); 54 55 *out_pos += props_size; 56 57 return LZMA_OK; 58 } 59