simple_decoder.c revision 292588
1///////////////////////////////////////////////////////////////////////////////
2//
3/// \file       simple_decoder.c
4/// \brief      Properties decoder for simple filters
5//
6//  Author:     Lasse Collin
7//
8//  This file has been put into the public domain.
9//  You can do whatever you want with this file.
10//
11///////////////////////////////////////////////////////////////////////////////
12
13#include "simple_decoder.h"
14
15
16extern lzma_ret
17lzma_simple_props_decode(void **options, const lzma_allocator *allocator,
18		const uint8_t *props, size_t props_size)
19{
20	if (props_size == 0)
21		return LZMA_OK;
22
23	if (props_size != 4)
24		return LZMA_OPTIONS_ERROR;
25
26	lzma_options_bcj *opt = lzma_alloc(
27			sizeof(lzma_options_bcj), allocator);
28	if (opt == NULL)
29		return LZMA_MEM_ERROR;
30
31	opt->start_offset = unaligned_read32le(props);
32
33	// Don't leave an options structure allocated if start_offset is zero.
34	if (opt->start_offset == 0)
35		lzma_free(opt, allocator);
36	else
37		*options = opt;
38
39	return LZMA_OK;
40}
41