summaryrefslogtreecommitdiff
path: root/Build/source/utils/lzma/src/liblzmadec/lzmadec.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/lzma/src/liblzmadec/lzmadec.h')
-rw-r--r--Build/source/utils/lzma/src/liblzmadec/lzmadec.h305
1 files changed, 305 insertions, 0 deletions
diff --git a/Build/source/utils/lzma/src/liblzmadec/lzmadec.h b/Build/source/utils/lzma/src/liblzmadec/lzmadec.h
new file mode 100644
index 00000000000..146d832630f
--- /dev/null
+++ b/Build/source/utils/lzma/src/liblzmadec/lzmadec.h
@@ -0,0 +1,305 @@
+/******************************************************************************
+
+ LZMA decoder library with a zlib like API
+
+ * WARNING WARNING WARNING WARNING WARNING WARNING *
+ * *
+ * This library hasn't been maintained since 2005. *
+ * This will be replaced by liblzma once it is *
+ * finished. liblzma will provide all the features *
+ * of liblzmadec and a lot more. *
+ * *
+ * WARNING WARNING WARNING WARNING WARNING WARNING *
+
+ Copyright (C) 1999-2005 Igor Pavlov (http://7-zip.org/)
+ Copyright (C) 2005 Lasse Collin <lasse.collin@tukaani.org>
+ Based on zlib.h and bzlib.h.
+
+ 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.
+
+******************************************************************************/
+
+
+/*************************
+ WARNING WARNING WARNING
+ Comments about return
+ codes etc. are not up
+ to date.
+ *************************/
+
+
+#ifndef LZMADEC_H
+#define LZMADEC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********
+ Includes
+ **********/
+
+#include <sys/types.h>
+#include <inttypes.h>
+
+/* Define LZMADEC_NO_STDIO to not include stdio.h and lzmadec_FILE functions. */
+#ifndef LZMADEC_NO_STDIO
+#include <stdio.h>
+#endif
+
+
+/*******************
+ Defines/Constants
+ *******************/
+
+/* Size in bytes of the smallest possible LZMA encoded file */
+#define LZMADEC_MINIMUM_SIZE 18
+
+/* Return values */
+#define LZMADEC_OK 0
+#define LZMADEC_STREAM_END 1
+#define LZMADEC_HEADER_ERROR (-2)
+#define LZMADEC_DATA_ERROR (-3)
+#define LZMADEC_MEM_ERROR (-4)
+#define LZMADEC_BUF_ERROR (-5)
+#define LZMADEC_SEQUENCE_ERROR (-6)
+/*
+ LZMADEC_OK
+ Operation succeeded or some progress has been made.
+
+ LZMADEC_STREAM_END
+ The end of the encoded data has been reached. Note that this is
+ a possible return value even when finish_decoding == LZMADEC_RUN.
+
+ LZMADEC_DATA_ERROR
+ Something wrong with the input data.
+
+ LZMADEC_MEM_ERROR
+ The memory allocation function returned a NULL pointer. The same
+ function can be called again with the same arguments to try again.
+
+ LZMADEC_BUF_ERROR
+ You should provide more input in next_in and set avail_in accordingly.
+ The first call to lzmadec_decode() must provide at least 18 bytes of
+ input data. Subsequent calls can any amount of data (or no data at all).
+ Note that LZMADEC_BUF_ERROR is not fatal and decoding can continue by
+ supplying more input data.
+*/
+
+
+/**********
+ typedefs
+ **********/
+
+typedef struct {
+ uint8_t *next_in;
+ size_t avail_in;
+ uint_fast64_t total_in;
+
+ uint8_t *next_out;
+ size_t avail_out;
+ uint_fast64_t total_out;
+
+ void *state; /* Internal state, not visible outside the library */
+
+ void *(*lzma_alloc)(void *, size_t, size_t);
+ void (*lzma_free)(void *, void *);
+ void *opaque;
+} lzmadec_stream;
+
+typedef struct {
+ uint_fast64_t uncompressed_size;
+ uint_fast32_t dictionary_size;
+ uint_fast32_t internal_data_size;
+ uint_fast8_t is_streamed;
+ uint_fast8_t pb;
+ uint_fast8_t lp;
+ uint_fast8_t lc;
+} lzmadec_info;
+
+#ifndef LZMADEC_NO_STDIO
+typedef void lzmadec_FILE;
+#endif
+
+
+/*********************
+ Single call decoding
+ *********************/
+
+extern int_fast8_t lzmadec_buffer (
+ uint8_t *dest, size_t *dest_len,
+ uint8_t *source, const size_t source_len);
+/*
+ Decode the data from source buffer to destination buffer with
+ a single pass.
+
+ Return values:
+ LZMADEC_OK Decoding successful
+ LZMADEC_HEADER_ERROR Invalid header
+ LZMADEC_MEM_ERROR Not enough memory
+ LZMADEC_DATA_ERROR Corrupted source data
+ LZMADEC_BUF_ERROR Destination buffer too small
+
+ Equivalent in zlib: uncompress()
+*/
+
+
+/*********************
+ Multi call decoding
+ *********************/
+
+extern int_fast8_t lzmadec_init (lzmadec_stream *strm);
+/*
+ Initialize the decoder.
+
+ Return values:
+ LZMADEC_OK
+ LZMADEC_HEADER_ERROR
+ LZMADEC_MEM_ERROR
+
+ Equivalent in zlib: inflateInit()
+*/
+
+extern int_fast8_t
+lzmadec_decode (lzmadec_stream *strm, const int_fast8_t finish_decoding);
+/*
+ The finish_decoding flag
+
+ In contrast to zlib and bzlib, liblzmadec can detect the end of the
+ compressed stream only with streamed LZMA data. Non-streamed data
+ does not contain any end of stream marker and thus needs the
+ finish_decoding flag to be set to decode the last bytes of the data.
+
+ When the finish_decoding is zero,
+ This is a sign to the decoder that even if avail_in == 0 happened to
+ be true, there can still be more input data not passed to the library
+ yet. It is safe to call lzmadec_decode with LZMADEC_RUN even if all
+ the data has been passed to the library already; in that case there
+ there will usually be bytes left in the internal output buffer.
+
+ Set the finish_decoding to non-zero to sign the decoder that all
+ the input has been given to it via next_in buffer. Once called with
+ non-zero finish_decoding flag, it should not be unset or an error
+ will be returned.
+
+ If you can assure that (avail_in > 0) on every lzmadec_decode() call
+ before all the data has been passed to the decoder library, the
+ simplest way is to use (strm.avail_in == 0) as the finish_decoding
+ value.
+
+ Return values:
+ LZMADEC_OK
+ LZMADEC_STREAM_END
+ LZMADEC_DATA_ERROR
+ LZMADEC_HEADER_ERROR (only right after initialization)
+ LZMADEC_MEM_ERROR (only right after initialization)
+
+ Equivalent in zlib: inflate()
+*/
+
+int_fast8_t lzmadec_end (lzmadec_stream *strm);
+/*
+ Return values:
+ LZMADEC_OK
+ LZMADEC_STREAM_ERROR FIXME
+
+ Equivalent in zlib: inflateEnd()
+*/
+
+
+/*************
+ Information
+ *************/
+
+extern int_fast8_t lzmadec_buffer_info (
+ lzmadec_info *info, const uint8_t *buffer, const size_t len);
+/*
+ Parse the header of a LZMA stream. The header size is
+ 13 bytes; make sure there is at least 13 bytes available
+ in the buffer. Information about parsed header will be stored
+ to *info.
+
+ Most common uses for this function are checking
+ - the uncompressed size of the file (if availabe)
+ - how much RAM is needed to decompress the data.
+
+ uncompressed_size Uncompressed size of the data as bytes
+
+ dictionary_size Dictionary size as bytes; depends only on
+ settings used when compressing the data.
+
+ internal_data_size The amount of memory needed by liblzmadec
+ to decode the data excluding the dictionary
+ size. Note that this value depends not only
+ about the used compression settings but
+ also the implementation and/or compile time
+ settings; specifically sizeof(uint_fast16_t).
+
+ is_streamed Zero if the data is non-streamed LZMA, and
+ non-zero for streamed. This flag is set
+ simply by checking the size field.
+
+ pb Number of pos bits; can be from 0 to 4.
+
+ lp Number of literal pos bits; from 0 to 4.
+
+ lc Number of literal context bits; from 0 to 8.
+
+ To know how much memory is needed to compress a specific stream,
+ add up dictionary_size and internal_data_size. Note that if the
+ dictionary is extremely huge, the result might not fit in
+ uint_fast32_t. ;-)
+
+ WARNING: LZMA streams have no magic first bytes. All data
+ that has 0x00 - 0xE1 as the first byte in the buffer will
+ return LZMADEC_OK.
+
+ Return values:
+ LZMADEC_OK All OK, the information was stored to *info.
+ LZMADEC_BUF_ERROR len is too small.
+ LZMADEC_HEADER_ERROR Invalid header data.
+*/
+
+extern const uint8_t *lzmadec_version (void);
+/*
+ Return a pointer to a statically allocated string containing the version
+ number of the liblzmadec. The version number format is x.yy.z where
+ x.yy is the version of LZMA SDK from http://7-zip.org/sdk.html, and x
+ is
+
+ Equivalent in zlib: zlibVersion()
+*/
+
+
+/**********
+ File I/O
+ **********/
+#ifndef LZMADEC_NO_STDIO
+
+extern lzmadec_FILE *lzmadec_open (const char *path);
+extern lzmadec_FILE *lzmadec_dopen (int fd);
+extern ssize_t lzmadec_read (lzmadec_FILE *file, uint8_t *buf, size_t len);
+extern uint8_t *lzmadec_gets (lzmadec_FILE *file, uint8_t *buf, size_t len);
+extern int lzmadec_getc (lzmadec_FILE *file);
+extern int_fast8_t lzmadec_seek (lzmadec_FILE *file, off_t offset, int whence);
+extern off_t lzmadec_tell (lzmadec_FILE *file);
+extern int_fast8_t lzmadec_rewind (lzmadec_FILE *file);
+extern int_fast8_t lzmadec_eof (lzmadec_FILE *file);
+extern int_fast8_t lzmadec_close (lzmadec_FILE *file);
+/* extern const char *lzmadec_error (lzmadec_FILE *file, int *errnum) */
+
+#endif /* ifndef LZMADEC_NO_STDIO */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ifndef LZMADEC_H */