xref: /freebsd/contrib/xz/src/liblzma/simple/simple_decoder.c (revision a91a246563dffa876a52f53a98de4af9fa364c52)
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 {
19 	if (props_size == 0)
20 		return LZMA_OK;
21 
22 	if (props_size != 4)
23 		return LZMA_OPTIONS_ERROR;
24 
25 	lzma_options_bcj *opt = lzma_alloc(
26 			sizeof(lzma_options_bcj), allocator);
27 	if (opt == NULL)
28 		return LZMA_MEM_ERROR;
29 
30 	opt->start_offset = read32le(props);
31 
32 	// Don't leave an options structure allocated if start_offset is zero.
33 	if (opt->start_offset == 0)
34 		lzma_free(opt, allocator);
35 	else
36 		*options = opt;
37 
38 	return LZMA_OK;
39 }
40