| /** |
| * \file lzma/metadata.h |
| * \brief Metadata handling |
| * |
| * \author Copyright (C) 1999-2006 Igor Pavlov |
| * \author Copyright (C) 2007 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. |
| */ |
| |
| #ifndef LZMA_H_INTERNAL |
| # error Never include this file directly. Use <lzma.h> instead. |
| #endif |
| |
| |
| /** |
| * \brief Information stored into a Metadata Block |
| * |
| * This structure holds all the information that can be stored to |
| * a Metadata Block. |
| */ |
| typedef struct { |
| /** |
| * \brief Size of Header Metadata Block |
| */ |
| lzma_vli header_metadata_size; |
| |
| /** |
| * \brief Total Size of the Stream |
| */ |
| lzma_vli total_size; |
| |
| /** |
| * \brief Uncompressed Size of the Stream |
| */ |
| lzma_vli uncompressed_size; |
| |
| /** |
| * \brief Index of the Blocks stored in the Stream |
| */ |
| lzma_index *index; |
| |
| /** |
| * \brief Extra information |
| */ |
| lzma_extra *extra; |
| |
| } lzma_metadata; |
| |
| |
| /** |
| * \brief Calculate the encoded size of Metadata |
| * |
| * \return Uncompressed size of the Metadata in encoded form. This value |
| * may be passed to Block encoder as Uncompressed Size when using |
| * Metadata filter. On error, zero is returned. |
| */ |
| extern lzma_vli lzma_metadata_size(const lzma_metadata *metadata); |
| |
| |
| /** |
| * \brief Initializes Metadata encoder |
| * |
| * \param coder Pointer to a pointer to hold Metadata encoder's |
| * internal state. Original value is ignored, thus |
| * you don't need to initialize the pointer. |
| * \param allocator Custom memory allocator; usually NULL. |
| * \param metadata Pointer to Metadata to encoded |
| * |
| * \return - LZMA_OK: Initialization succeeded. |
| * - LZMA_MEM_ERROR: Cannot allocate memory for *coder. |
| * |
| * The initialization function makes internal copy of the *metadata structure. |
| * However, the linked lists metadata->index and metadata->extra are NOT |
| * copied. Thus, the application may destroy *metadata after initialization |
| * if it likes, but not Index or Extra. |
| */ |
| extern lzma_ret lzma_metadata_encoder(lzma_stream *strm, |
| lzma_options_block *options, const lzma_metadata *metadata); |
| |
| |
| /** |
| * \brief Initializes Metadata decoder |
| * |
| * \param want_extra If this is true, Extra Records will be stored |
| * to metadata->extra. If this is false, Extra |
| * Records will be parsed but not stored anywhere, |
| * metadata->extra will be set to NULL. |
| */ |
| extern lzma_ret lzma_metadata_decoder( |
| lzma_stream *strm, lzma_options_block *options, |
| lzma_metadata *metadata, lzma_bool want_extra); |