/src/CMake/Utilities/cmliblzma/liblzma/simple/simple_decoder.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: 0BSD |
2 | | |
3 | | /////////////////////////////////////////////////////////////////////////////// |
4 | | // |
5 | | /// \file simple_decoder.c |
6 | | /// \brief Properties decoder for simple filters |
7 | | // |
8 | | // Author: Lasse Collin |
9 | | // |
10 | | /////////////////////////////////////////////////////////////////////////////// |
11 | | |
12 | | #include "simple_decoder.h" |
13 | | |
14 | | |
15 | | extern lzma_ret |
16 | | lzma_simple_props_decode(void **options, const lzma_allocator *allocator, |
17 | | const uint8_t *props, size_t props_size) |
18 | 788 | { |
19 | 788 | if (props_size == 0) |
20 | 426 | return LZMA_OK; |
21 | | |
22 | 362 | if (props_size != 4) |
23 | 4 | return LZMA_OPTIONS_ERROR; |
24 | | |
25 | 358 | lzma_options_bcj *opt = lzma_alloc( |
26 | 358 | sizeof(lzma_options_bcj), allocator); |
27 | 358 | if (opt == NULL) |
28 | 0 | return LZMA_MEM_ERROR; |
29 | | |
30 | 358 | opt->start_offset = read32le(props); |
31 | | |
32 | | // Don't leave an options structure allocated if start_offset is zero. |
33 | 358 | if (opt->start_offset == 0) |
34 | 2 | lzma_free(opt, allocator); |
35 | 356 | else |
36 | 356 | *options = opt; |
37 | | |
38 | 358 | return LZMA_OK; |
39 | 358 | } |