annotate src/lib-compression/compression.c @ 22325:e01bc3015b2f

lib-index: Check .log.2 rotation only when syncing Instead of also whenever appending transactions to .log file. This shouldn't change the behavior much, and it's needed for the following change to work correctly.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 11 Jul 2017 15:33:56 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21322
diff changeset
1 /* Copyright (c) 2010-2017 Dovecot authors, see the included COPYING file */
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "istream.h"
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "istream-zlib.h"
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "ostream-zlib.h"
17104
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
7 #include "iostream-lz4.h"
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "compression.h"
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #ifndef HAVE_ZLIB
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 # define i_stream_create_gz NULL
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 # define o_stream_create_gz NULL
15990
65705d9d94f1 Fixed compiling without zlib.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
13 # define i_stream_create_deflate NULL
65705d9d94f1 Fixed compiling without zlib.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
14 # define o_stream_create_deflate NULL
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 #endif
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 #ifndef HAVE_BZLIB
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 # define i_stream_create_bz2 NULL
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 # define o_stream_create_bz2 NULL
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 #endif
17028
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
20 #ifndef HAVE_LZMA
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
21 # define i_stream_create_lzma NULL
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
22 # define o_stream_create_lzma NULL
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
23 #endif
17104
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
24 #ifndef HAVE_LZ4
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
25 # define i_stream_create_lz4 NULL
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
26 # define o_stream_create_lz4 NULL
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
27 #endif
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 static bool is_compressed_zlib(struct istream *input)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 const unsigned char *data;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 size_t size;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 /* Peek in to the stream and see if it looks like it's compressed
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 (based on its header). This also means that users can try to exploit
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 security holes in the uncompression library by APPENDing a specially
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 crafted mail. So let's hope zlib is free of holes. */
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 if (i_stream_read_data(input, &data, &size, 1) <= 0)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 return FALSE;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 i_assert(size >= 2);
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 return data[0] == 31 && data[1] == 139;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 static bool is_compressed_bzlib(struct istream *input)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 const unsigned char *data;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 size_t size;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 if (i_stream_read_data(input, &data, &size, 4+6 - 1) <= 0)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 return FALSE;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 if (data[0] != 'B' || data[1] != 'Z')
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 return FALSE;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 if (data[2] != 'h' && data[2] != '0')
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 return FALSE;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 if (data[3] < '1' || data[3] > '9')
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 return FALSE;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 return memcmp(data + 4, "\x31\x41\x59\x26\x53\x59", 6) == 0;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60
17028
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
61 static bool is_compressed_xz(struct istream *input)
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
62 {
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
63 const unsigned char *data;
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
64 size_t size;
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
65
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
66 if (i_stream_read_data(input, &data, &size, 6 - 1) <= 0)
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
67 return FALSE;
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
68 return memcmp(data, "\xfd\x37\x7a\x58\x5a", 6) == 0;
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
69 }
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
70
17104
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
71 static bool is_compressed_lz4(struct istream *input)
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
72 {
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
73 const unsigned char *data;
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
74 size_t size;
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
75
19519
7de67ada80b3 lib-compress: lz4 istream wasn't detected reliably in some situations.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18137
diff changeset
76 if (i_stream_read_data(input, &data, &size,
7de67ada80b3 lib-compress: lz4 istream wasn't detected reliably in some situations.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18137
diff changeset
77 IOSTREAM_LZ4_MAGIC_LEN - 1) <= 0)
17104
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
78 return FALSE;
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
79 /* there is no standard LZ4 header, so we've created our own */
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
80 return memcmp(data, IOSTREAM_LZ4_MAGIC, IOSTREAM_LZ4_MAGIC_LEN) == 0;
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
81 }
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
82
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 const struct compression_handler *compression_lookup_handler(const char *name)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 unsigned int i;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 for (i = 0; compression_handlers[i].name != NULL; i++) {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 if (strcmp(name, compression_handlers[i].name) == 0)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 return &compression_handlers[i];
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 return NULL;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 const struct compression_handler *
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 compression_detect_handler(struct istream *input)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 unsigned int i;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 for (i = 0; compression_handlers[i].name != NULL; i++) {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 if (compression_handlers[i].is_compressed != NULL &&
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 compression_handlers[i].is_compressed(input))
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 return &compression_handlers[i];
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 return NULL;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 const struct compression_handler *
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 compression_lookup_handler_from_ext(const char *path)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 {
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
110 unsigned int i;
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
111 size_t len, path_len = strlen(path);
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 for (i = 0; compression_handlers[i].name != NULL; i++) {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 if (compression_handlers[i].ext == NULL)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 continue;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 len = strlen(compression_handlers[i].ext);
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 if (path_len > len &&
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 strcmp(path + path_len - len, compression_handlers[i].ext) == 0)
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 return &compression_handlers[i];
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 return NULL;
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 const struct compression_handler compression_handlers[] = {
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 { "gz", ".gz", is_compressed_zlib,
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 i_stream_create_gz, o_stream_create_gz },
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 { "bz2", ".bz2", is_compressed_bzlib,
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 i_stream_create_bz2, o_stream_create_bz2 },
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 { "deflate", NULL, NULL,
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 i_stream_create_deflate, o_stream_create_deflate },
17028
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
132 { "xz", ".xz", is_compressed_xz,
81e486aacbc7 lib-compression: Added support for liblzma (xz)
Timo Sirainen <tss@iki.fi>
parents: 15990
diff changeset
133 i_stream_create_lzma, o_stream_create_lzma },
17104
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
134 { "lz4", ".lz4", is_compressed_lz4,
fb4a0a84da50 lib-compression: Added initial support for LZ4
Timo Sirainen <tss@iki.fi>
parents: 17028
diff changeset
135 i_stream_create_lz4, o_stream_create_lz4 },
14739
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 { NULL, NULL, NULL, NULL, NULL }
378ba560ea9f Moved zlib/bzlib code to lib-compression library.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 };