Home | History | Annotate | Line # | Download | only in common
      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