1 ///////////////////////////////////////////////////////////////////////////////
3 /// \file filter_flags_decoder.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_decoder.h"
16 extern LZMA_API(lzma_ret
)
17 lzma_filter_flags_decode(
18 lzma_filter
*filter
, lzma_allocator
*allocator
,
19 const uint8_t *in
, size_t *in_pos
, size_t in_size
)
21 // Set the pointer to NULL so the caller can always safely free it.
22 filter
->options
= NULL
;
25 return_if_error(lzma_vli_decode(&filter
->id
, NULL
,
26 in
, in_pos
, in_size
));
28 if (filter
->id
>= LZMA_FILTER_RESERVED_START
)
29 return LZMA_DATA_ERROR
;
33 return_if_error(lzma_vli_decode(&props_size
, NULL
,
34 in
, in_pos
, in_size
));
37 if (in_size
- *in_pos
< props_size
)
38 return LZMA_DATA_ERROR
;
40 const lzma_ret ret
= lzma_properties_decode(
41 filter
, allocator
, in
+ *in_pos
, props_size
);
43 *in_pos
+= props_size
;