| 49813 |
ripley |
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 |
|
|
|
16 |
extern lzma_ret
|
|
|
17 |
lzma_simple_props_decode(void **options, 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 |
|
| 53508 |
ripley |
31 |
opt->start_offset = unaligned_read32le(props);
|
| 49813 |
ripley |
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 |
}
|