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
15extern lzma_ret
16lzma_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