12940b44dSPeter Avalos ///////////////////////////////////////////////////////////////////////////////
22940b44dSPeter Avalos //
32940b44dSPeter Avalos /// \file       simple_decoder.c
42940b44dSPeter Avalos /// \brief      Properties decoder for simple filters
52940b44dSPeter Avalos //
62940b44dSPeter Avalos //  Author:     Lasse Collin
72940b44dSPeter Avalos //
82940b44dSPeter Avalos //  This file has been put into the public domain.
92940b44dSPeter Avalos //  You can do whatever you want with this file.
102940b44dSPeter Avalos //
112940b44dSPeter Avalos ///////////////////////////////////////////////////////////////////////////////
122940b44dSPeter Avalos 
132940b44dSPeter Avalos #include "simple_decoder.h"
142940b44dSPeter Avalos 
152940b44dSPeter Avalos 
162940b44dSPeter Avalos extern lzma_ret
lzma_simple_props_decode(void ** options,const lzma_allocator * allocator,const uint8_t * props,size_t props_size)1715ab8c86SJohn Marino lzma_simple_props_decode(void **options, const lzma_allocator *allocator,
182940b44dSPeter Avalos 		const uint8_t *props, size_t props_size)
192940b44dSPeter Avalos {
202940b44dSPeter Avalos 	if (props_size == 0)
212940b44dSPeter Avalos 		return LZMA_OK;
222940b44dSPeter Avalos 
232940b44dSPeter Avalos 	if (props_size != 4)
242940b44dSPeter Avalos 		return LZMA_OPTIONS_ERROR;
252940b44dSPeter Avalos 
262940b44dSPeter Avalos 	lzma_options_bcj *opt = lzma_alloc(
272940b44dSPeter Avalos 			sizeof(lzma_options_bcj), allocator);
282940b44dSPeter Avalos 	if (opt == NULL)
292940b44dSPeter Avalos 		return LZMA_MEM_ERROR;
302940b44dSPeter Avalos 
31*e151908bSDaniel Fojt 	opt->start_offset = read32le(props);
322940b44dSPeter Avalos 
332940b44dSPeter Avalos 	// Don't leave an options structure allocated if start_offset is zero.
342940b44dSPeter Avalos 	if (opt->start_offset == 0)
352940b44dSPeter Avalos 		lzma_free(opt, allocator);
362940b44dSPeter Avalos 	else
372940b44dSPeter Avalos 		*options = opt;
382940b44dSPeter Avalos 
392940b44dSPeter Avalos 	return LZMA_OK;
402940b44dSPeter Avalos }
41