2 * Copyright (c) 2010, Charles Wilson
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by Charles Wilson <cygwin@cygwin.com>
16 #ifndef SETUP_COMPRESS_XZ_H
17 #define SETUP_COMPRESS_XZ_H
22 class compress_xz
:public compress
25 compress_xz (io_stream
*); /* decompress (read) only */
26 virtual ssize_t
read (void *buffer
, size_t len
);
27 virtual ssize_t
write (const void *buffer
, size_t len
); /* not implemented */
28 virtual ssize_t
peek (void *buffer
, size_t len
);
29 virtual long tell (); /* not implemented */
30 virtual int seek (long where
, io_stream_seek_t whence
);
32 virtual const char *next_file_name () { return NULL
; };
33 virtual int set_mtime (time_t);
34 virtual time_t get_mtime ();
35 virtual mode_t
get_mode ();
36 virtual size_t get_size () {return 0;};
37 virtual ~compress_xz ();
38 virtual void init_decoder (void);
39 static bool is_xz_or_lzma (void *buffer
, size_t len
);
40 static int bid_xz (void *buffer
, size_t len
);
41 static int bid_lzma (void *buffer
, size_t len
);
42 virtual void release_original(); /* give up ownership of original io_stream */
57 unsigned char *out_block
;
58 size_t out_block_size
;
60 char eof
; /* True = found end of compressed data. */
61 unsigned char *in_block
;
73 COMPRESSION_UNKNOWN
= -1,
78 compression_type_t compression_type
;
80 static const size_t out_block_size
= 64 * 1024;
81 static const size_t in_block_size
= 64 * 1024;
82 struct private_data
*state
;
85 #endif /* SETUP_COMPRESS_XZ_H */