5056b238a2
using xz embedded (public domain code). in order to be enable to use ordinary xz files, support for crc64 was activated. (if using crc32 only, one would need to use a command like xz --check=crc32 --lzma2=preset=6e,dict=64KiB to create the files. with crc64, one can use files that have been compressed with settings up to -9 (however, those need 64+1MB for decompression). since gb/gbc files are small anyway, using compression level 6-8 might be preferable to keep client memory consumption down. every step in xz compression level downwards decreases decomp mem usage by 50% (so level 8 would need 32+1 MB, etc).
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
/*
|
|
* Definitions for handling the .xz file format
|
|
*
|
|
* Author: Lasse Collin <lasse.collin@tukaani.org>
|
|
*
|
|
* This file has been put into the public domain.
|
|
* You can do whatever you want with this file.
|
|
*/
|
|
|
|
#ifndef XZ_STREAM_H
|
|
#define XZ_STREAM_H
|
|
|
|
#if defined(__KERNEL__) && !XZ_INTERNAL_CRC32
|
|
# include <linux/crc32.h>
|
|
# undef crc32
|
|
# define xz_crc32(buf, size, crc) \
|
|
(~crc32_le(~(uint32_t)(crc), buf, size))
|
|
#endif
|
|
|
|
/*
|
|
* See the .xz file format specification at
|
|
* http://tukaani.org/xz/xz-file-format.txt
|
|
* to understand the container format.
|
|
*/
|
|
|
|
#define STREAM_HEADER_SIZE 12
|
|
|
|
#define HEADER_MAGIC "\3757zXZ"
|
|
#define HEADER_MAGIC_SIZE 6
|
|
|
|
#define FOOTER_MAGIC "YZ"
|
|
#define FOOTER_MAGIC_SIZE 2
|
|
|
|
/*
|
|
* Variable-length integer can hold a 63-bit unsigned integer or a special
|
|
* value indicating that the value is unknown.
|
|
*
|
|
* Experimental: vli_type can be defined to uint32_t to save a few bytes
|
|
* in code size (no effect on speed). Doing so limits the uncompressed and
|
|
* compressed size of the file to less than 256 MiB and may also weaken
|
|
* error detection slightly.
|
|
*/
|
|
typedef uint64_t vli_type;
|
|
|
|
#define VLI_MAX ((vli_type)-1 / 2)
|
|
#define VLI_UNKNOWN ((vli_type)-1)
|
|
|
|
/* Maximum encoded size of a VLI */
|
|
#define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7)
|
|
|
|
/* Integrity Check types */
|
|
enum xz_check {
|
|
XZ_CHECK_NONE = 0,
|
|
XZ_CHECK_CRC32 = 1,
|
|
XZ_CHECK_CRC64 = 4,
|
|
XZ_CHECK_SHA256 = 10
|
|
};
|
|
|
|
/* Maximum possible Check ID */
|
|
#define XZ_CHECK_MAX 15
|
|
|
|
#endif
|