1 ///////////////////////////////////////////////////////////////////////////////
3 /// \file filter_flags_encoder.c
4 /// \brief Decodes a Filter Flags field
6 // Author: Lasse Collin
8 // This file has been put into the public domain.
9 // You can do whatever you want with this file.
11 ///////////////////////////////////////////////////////////////////////////////
13 #include "filter_encoder.h"
16 extern LZMA_API(lzma_ret
)
17 lzma_filter_flags_size(uint32_t *size
, const lzma_filter
*filter
)
19 if (filter
->id
>= LZMA_FILTER_RESERVED_START
)
20 return LZMA_PROG_ERROR
;
22 return_if_error(lzma_properties_size(size
, filter
));
24 *size
+= lzma_vli_size(filter
->id
) + lzma_vli_size(*size
);
30 extern LZMA_API(lzma_ret
)
31 lzma_filter_flags_encode(const lzma_filter
*filter
,
32 uint8_t *out
, size_t *out_pos
, size_t out_size
)
35 if (filter
->id
>= LZMA_FILTER_RESERVED_START
)
36 return LZMA_PROG_ERROR
;
38 return_if_error(lzma_vli_encode(filter
->id
, NULL
,
39 out
, out_pos
, out_size
));
43 return_if_error(lzma_properties_size(&props_size
, filter
));
44 return_if_error(lzma_vli_encode(props_size
, NULL
,
45 out
, out_pos
, out_size
));
48 if (out_size
- *out_pos
< props_size
)
49 return LZMA_PROG_ERROR
;
51 return_if_error(lzma_properties_encode(filter
, out
+ *out_pos
));
53 *out_pos
+= props_size
;