src/liblzma/api/lzma/index_hash.h File Reference

Validates Index by using a hash function. More...


Typedefs

typedef struct lzma_index_hash_s lzma_index_hash
 Opaque data type to hold the Index hash.

Functions

 LZMA_API (lzma_index_hash *) lzma_index_hash_init(lzma_index_hash *index_hash
 Allocate and initialize a new lzma_index_hash structure.
 LZMA_API (void) lzma_index_hash_end(lzma_index_hash *index_hash
 Deallocate lzma_index_hash structure.
 LZMA_API (lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash
 Add a new Record to an Index hash.
 LZMA_API (lzma_vli) lzma_index_hash_size(const lzma_index_hash *index_hash) lzma_attr_pure
 Get the size of the Index field as bytes.

Variables

lzma_allocator *allocator lzma_attr_warn_unused_result
lzma_allocatorallocator
lzma_vli unpadded_size
const uint8_t * in
const uint8_t size_t * in_pos


Detailed Description

Validates Index by using a hash function.

Instead of constructing complete Index while decoding Blocks, Index hash calculates a hash of the Block sizes and Index, and then compares the hashes. This way memory usage is constant even with large number of Blocks and huge Index.

Author:
Copyright (C) 2008 Lasse Collin
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.


Typedef Documentation

typedef struct lzma_index_hash_s lzma_index_hash

Opaque data type to hold the Index hash.


Function Documentation

LZMA_API ( lzma_index_hash  ) 

Allocate and initialize a new lzma_index_hash structure.

If index_hash is NULL, a new lzma_index_hash structure is allocated, initialized, and a pointer to it returned. If allocation fails, NULL is returned.

If index_hash is non-NULL, it is reinitialized and the same pointer returned. In this case, return value cannot be NULL or a different pointer than the index_hash that was given as an argument.

LZMA_API ( void   ) 

Deallocate lzma_index_hash structure.

Free memory allocated for the coder data structures.

LZMA_API ( lzma_ret   ) 

Add a new Record to an Index hash.

Calculate Block Header Size.

Decode and validate the Index field.

Parameters:
index Pointer to a lzma_index_hash structure
unpadded_size Unpadded Size of a Block
uncompressed_size Uncompressed Size of a Block
Returns:
- LZMA_OK
  • LZMA_DATA_ERROR: Compressed or uncompressed size of the Stream or size of the Index field would grow too big.
  • LZMA_PROG_ERROR: Invalid arguments or this function is being used when lzma_index_hash_decode() has already been used.
After telling the sizes of all Blocks with lzma_index_hash_append(), the actual Index field is decoded with this function. Specifically, once decoding of the Index field has been started, no more Records can be added using lzma_index_hash_append().

This function doesn't use lzma_stream structure to pass the input data. Instead, the input buffer is specified using three arguments. This is because it matches better the internal APIs of liblzma.

Parameters:
index_hash Pointer to a lzma_index_hash structure
in Pointer to the beginning of the input buffer
in_pos in[*in_pos] is the next byte to process
in_size in[in_size] is the first byte not to process
Returns:
- LZMA_OK: So far good, but more input is needed.
  • LZMA_STREAM_END: Index decoded successfully and it matches the Records given with lzma_index_hash_append().
  • LZMA_DATA_ERROR: Index is corrupt or doesn't match the information given with lzma_index_hash_append().
  • LZMA_BUF_ERROR: Cannot progress because *in_pos >= in_size.
  • LZMA_PROG_ERROR

LZMA_API ( uint64_t   )  const

Get the size of the Index field as bytes.

This is needed to verify the Backward Size field in the Stream Footer.

Get the size of the Index field as bytes.

Calculate rough memory requirements for raw encoder.

Calculate Unpadded Size.

Get the memory usage of decoder filter chain.

Calculates CRC64 using the polynomial from the ECMA-182 standard.

This function is used similarly to lzma_crc32(). See its documentation.

References LZMA_VLI_UNKNOWN.


Generated on Wed May 25 10:35:38 2011 for XZ Utils by  doxygen 1.5.5