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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#ifndef GZIP_H
#define GZIP_H
#include <stdint.h>
/* RFC 1952 */
#define ID1 31
#define ID2 139
enum compression_method {
DEFLATE = 8,
};
enum flag {
FTEXT = 1 << 0,
FHCRC = 1 << 1,
FEXTRA = 1 << 2,
FNAME = 1 << 3,
FCOMMENT = 1 << 4,
};
const char *flag_str (enum flag f) {
switch (f) {
case FTEXT: return "Content is probably text";
case FHCRC: return "CRC16 is present";
case FEXTRA: return "Extra field is populated";
case FNAME: return "A file name is present";
case FCOMMENT: return "A comment is present";
default: return "unknown flag";
}
}
enum operating_system {
FAT = 0,
AMIGA,
VMS,
UNIX,
CMS,
ATARI_TOS,
HPFS,
MACINTOSH,
Z_SYSTEM,
CP_M,
TOPS20,
NTFS,
QDOS,
ACORN_RISCOS,
};
const char *os_str(enum operating_system os) {
switch (os) {
case FAT: return "FAT filesystem (MS-DOS, OS/2, NT/Win32)";
case AMIGA: return "Amiga";
case VMS: return "VMS (or OpenVMS)";
case UNIX: return "Unix";
case CMS: return "VM/CMS";
case ATARI_TOS: return "Atari TOS";
case HPFS: return "HPFS filesystem (OS/2, NT)";
case MACINTOSH: return "Macintosh";
case Z_SYSTEM: return "Z-System";
case CP_M: return "CP/M";
case TOPS20: return "TOPS-20";
case NTFS: return "NTFS filesystem (NT)";
case QDOS: return "QDOS";
case ACORN_RISCOS: return "Acorn RISCOS";
default: return "unknown";
}
}
struct member {
uint8_t id1, id2, cm, flg;
uint32_t mtime;
uint8_t xfl, os;
} __attribute__((packed));
#endif /* GZIP_H */
|