]>
Commit | Line | Data |
---|---|---|
24fa0402 LC |
1 | /* |
2 | * Definitions for handling the .xz file format | |
3 | * | |
4 | * Author: Lasse Collin <[email protected]> | |
5 | * | |
6 | * This file has been put into the public domain. | |
7 | * You can do whatever you want with this file. | |
8 | */ | |
9 | ||
10 | #ifndef XZ_STREAM_H | |
11 | #define XZ_STREAM_H | |
12 | ||
13 | #if defined(__KERNEL__) && !XZ_INTERNAL_CRC32 | |
14 | # include <linux/crc32.h> | |
15 | # undef crc32 | |
16 | # define xz_crc32(buf, size, crc) \ | |
17 | (~crc32_le(~(uint32_t)(crc), buf, size)) | |
18 | #endif | |
19 | ||
20 | /* | |
21 | * See the .xz file format specification at | |
d89775fc | 22 | * https://tukaani.org/xz/xz-file-format.txt |
24fa0402 LC |
23 | * to understand the container format. |
24 | */ | |
25 | ||
26 | #define STREAM_HEADER_SIZE 12 | |
27 | ||
28 | #define HEADER_MAGIC "\3757zXZ" | |
29 | #define HEADER_MAGIC_SIZE 6 | |
30 | ||
31 | #define FOOTER_MAGIC "YZ" | |
32 | #define FOOTER_MAGIC_SIZE 2 | |
33 | ||
34 | /* | |
35 | * Variable-length integer can hold a 63-bit unsigned integer or a special | |
36 | * value indicating that the value is unknown. | |
37 | * | |
38 | * Experimental: vli_type can be defined to uint32_t to save a few bytes | |
39 | * in code size (no effect on speed). Doing so limits the uncompressed and | |
40 | * compressed size of the file to less than 256 MiB and may also weaken | |
41 | * error detection slightly. | |
42 | */ | |
43 | typedef uint64_t vli_type; | |
44 | ||
45 | #define VLI_MAX ((vli_type)-1 / 2) | |
46 | #define VLI_UNKNOWN ((vli_type)-1) | |
47 | ||
48 | /* Maximum encoded size of a VLI */ | |
49 | #define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7) | |
50 | ||
51 | /* Integrity Check types */ | |
52 | enum xz_check { | |
53 | XZ_CHECK_NONE = 0, | |
54 | XZ_CHECK_CRC32 = 1, | |
55 | XZ_CHECK_CRC64 = 4, | |
56 | XZ_CHECK_SHA256 = 10 | |
57 | }; | |
58 | ||
59 | /* Maximum possible Check ID */ | |
60 | #define XZ_CHECK_MAX 15 | |
61 | ||
62 | #endif |