mirror of
https://git.tukaani.org/xz.git
synced 2025-02-12 11:38:16 +00:00
143 lines
4.6 KiB
C
143 lines
4.6 KiB
C
/**
|
|
* \file lzma/stream_flags.h
|
|
* \brief .lzma Stream Header and Stream tail encoder and decoder
|
|
*
|
|
* \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 Size of Stream Header
|
|
*
|
|
* Magic Bytes (6) + Stream Flags (1) + CRC32 (4)
|
|
*/
|
|
#define LZMA_STREAM_HEADER_SIZE (6 + 1 + 4)
|
|
|
|
|
|
/**
|
|
* \brief Size of Stream tail
|
|
*
|
|
* Because Stream Footer already has a defined meaning in the file format
|
|
* specification, we use Stream tail to denote these two fields:
|
|
* Stream Flags (1) + Magic Bytes (2)
|
|
*/
|
|
#define LZMA_STREAM_TAIL_SIZE (1 + 2)
|
|
|
|
|
|
/**
|
|
* Options for encoding and decoding Stream Header and Stream tail
|
|
*/
|
|
typedef struct {
|
|
/**
|
|
* Type of the Check calculated from uncompressed data
|
|
*/
|
|
lzma_check_type check;
|
|
|
|
/**
|
|
* True if Block Headers have the CRC32 field. Note that the CRC32
|
|
* field is always present in the Stream Header.
|
|
*/
|
|
lzma_bool has_crc32;
|
|
|
|
/**
|
|
* True if the Stream is a Multi-Block Stream.
|
|
*/
|
|
lzma_bool is_multi;
|
|
|
|
} lzma_stream_flags;
|
|
|
|
|
|
#define lzma_stream_flags_is_equal(a, b) \
|
|
((a).check == (b).check \
|
|
&& (a).has_crc32 == (b).has_crc32 \
|
|
&& (a).is_multi == (b).is_multi)
|
|
|
|
|
|
/**
|
|
* \brief Encodes Stream Header
|
|
*
|
|
* Encoding of the Stream Header is done with a single call instead of
|
|
* first initializing and then doing the actual work with lzma_code().
|
|
*
|
|
* \param out Beginning of the output buffer
|
|
* \param out_pos out[*out_pos] is the next write position. This
|
|
* is updated by the encoder.
|
|
* \param out_size out[out_size] is the first byte to not write.
|
|
* \param options Stream Header options to be encoded.
|
|
*
|
|
* \return - LZMA_OK: Encoding was successful.
|
|
* - LZMA_PROG_ERROR: Invalid options.
|
|
* - LZMA_BUF_ERROR: Not enough output buffer space.
|
|
*/
|
|
extern lzma_ret lzma_stream_header_encode(
|
|
uint8_t *out, const lzma_stream_flags *options);
|
|
|
|
|
|
/**
|
|
* \brief Encodes Stream tail
|
|
*
|
|
* \param footer Pointer to a pointer that will hold the
|
|
* allocated buffer. Caller must free it once
|
|
* it isn't needed anymore.
|
|
* \param footer_size Pointer to a variable that will the final size
|
|
* of the footer buffer.
|
|
* \param allocator lzma_allocator for custom allocator functions.
|
|
* Set to NULL to use malloc().
|
|
* \param options Stream Header options to be encoded.
|
|
*
|
|
* \return - LZMA_OK: Success; *header and *header_size set.
|
|
* - LZMA_PROG_ERROR: *options is invalid.
|
|
* - LZMA_MEM_ERROR: Cannot allocate memory.
|
|
*/
|
|
extern lzma_ret lzma_stream_tail_encode(
|
|
uint8_t *out, const lzma_stream_flags *options);
|
|
|
|
|
|
/**
|
|
* \brief Initializes Stream Header decoder
|
|
*
|
|
* \param strm Pointer to lzma_stream used to pass input data
|
|
* \param options Target structure for parsed results
|
|
*
|
|
* \return - LZMA_OK: Successfully initialized
|
|
* - LZMA_MEM_ERROR: Cannot allocate memory
|
|
*
|
|
* The actual decoding is done with lzma_code() and freed with lzma_end().
|
|
*/
|
|
extern lzma_ret lzma_stream_header_decoder(
|
|
lzma_stream *strm, lzma_stream_flags *options);
|
|
|
|
|
|
/**
|
|
* \brief Initializes Stream tail decoder
|
|
*
|
|
* \param strm Pointer to lzma_stream used to pass input data
|
|
* \param options Target structure for parsed results.
|
|
* \param decode_uncompressed_size
|
|
* Set to true if the first field to decode is
|
|
* Uncompressed Size. Set to false if the first
|
|
* field to decode is Backward Size.
|
|
*
|
|
* \return - LZMA_OK: Successfully initialized
|
|
* - LZMA_MEM_ERROR: Cannot allocate memory
|
|
*
|
|
* The actual decoding is done with lzma_code() and freed with lzma_end().
|
|
*/
|
|
extern lzma_ret lzma_stream_tail_decoder(
|
|
lzma_stream *strm, lzma_stream_flags *options);
|