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, 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 = 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