Blame view

lib/xz/xz_stream.h 1.43 KB
24fa0402a   Lasse Collin   decompressors: ad...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  /*
   * 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