diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/highlevel.h | 9 | ||||
| -rw-r--r-- | include/sqfs/compress.h | 91 | 
2 files changed, 90 insertions, 10 deletions
diff --git a/include/highlevel.h b/include/highlevel.h index b9d9339..6b8e2e2 100644 --- a/include/highlevel.h +++ b/include/highlevel.h @@ -141,4 +141,13 @@ int meta_writer_write_dir(meta_writer_t *dm, dir_info_t *dir,  int meta_writer_write_inode(fstree_t *fs, id_table_t *idtbl, meta_writer_t *im,  			    meta_writer_t *dm, tree_node_t *node); +void compressor_print_available(void); + +E_SQFS_COMPRESSOR compressor_get_default(void); + +int compressor_cfg_init_options(compressor_config_t *cfg, E_SQFS_COMPRESSOR id, +				size_t block_size, char *options); + +void compressor_print_help(E_SQFS_COMPRESSOR id); +  #endif /* HIGHLEVEL_H */ diff --git a/include/sqfs/compress.h b/include/sqfs/compress.h index 3860353..cb3994f 100644 --- a/include/sqfs/compress.h +++ b/include/sqfs/compress.h @@ -51,22 +51,93 @@ struct compressor_t {  	void (*destroy)(compressor_t *stream);  }; +typedef struct { +	uint16_t id; +	uint16_t flags; +	uint32_t block_size; + +	union { +		struct { +			uint16_t level; +			uint16_t window_size; +		} gzip; + +		struct { +			uint16_t level; +		} zstd; + +		struct { +			uint16_t algorithm; +			uint16_t level; +		} lzo; + +		struct { +			uint32_t dict_size; +		} xz; +	} opt; +} compressor_config_t; + +typedef enum { +	SQFS_COMP_FLAG_LZ4_HC = 0x0001, +	SQFS_COMP_FLAG_LZ4_ALL = 0x0001, + +	SQFS_COMP_FLAG_XZ_X86 = 0x0001, +	SQFS_COMP_FLAG_XZ_POWERPC = 0x0002, +	SQFS_COMP_FLAG_XZ_IA64 = 0x0004, +	SQFS_COMP_FLAG_XZ_ARM = 0x0008, +	SQFS_COMP_FLAG_XZ_ARMTHUMB = 0x0010, +	SQFS_COMP_FLAG_XZ_SPARC = 0x0020, +	SQFS_COMP_FLAG_XZ_ALL = 0x003F, + +	SQFS_COMP_FLAG_GZIP_DEFAULT = 0x0001, +	SQFS_COMP_FLAG_GZIP_FILTERED = 0x0002, +	SQFS_COMP_FLAG_GZIP_HUFFMAN = 0x0004, +	SQFS_COMP_FLAG_GZIP_RLE = 0x0008, +	SQFS_COMP_FLAG_GZIP_FIXED = 0x0010, +	SQFS_COMP_FLAG_GZIP_ALL = 0x001F, + +	SQFS_COMP_FLAG_UNCOMPRESS = 0x8000, +	SQFS_COMP_FLAG_GENERIC_ALL = 0x8000, +} SQFS_COMP_FLAG; + +typedef enum { +	SQFS_LZO1X_1 = 0, +	SQFS_LZO1X_1_11 = 1, +	SQFS_LZO1X_1_12 = 2, +	SQFS_LZO1X_1_15 = 3, +	SQFS_LZO1X_999	= 4, +} SQFS_LZO_ALGORITHM; + +#define SQFS_GZIP_DEFAULT_LEVEL (9) +#define SQFS_GZIP_DEFAULT_WINDOW (15) + +#define SQFS_LZO_DEFAULT_ALG SQFS_LZO1X_999 +#define SQFS_LZO_DEFAULT_LEVEL (8) + +#define SQFS_ZSTD_DEFAULT_LEVEL (15) + +#define SQFS_GZIP_MIN_LEVEL (1) +#define SQFS_GZIP_MAX_LEVEL (9) + +#define SQFS_LZO_MIN_LEVEL (0) +#define SQFS_LZO_MAX_LEVEL (9) + +#define SQFS_ZSTD_MIN_LEVEL (1) +#define SQFS_ZSTD_MAX_LEVEL (22) + +#define SQFS_GZIP_MIN_WINDOW (8) +#define SQFS_GZIP_MAX_WINDOW (15) +  #ifdef __cplusplus  extern "C" {  #endif -bool compressor_exists(E_SQFS_COMPRESSOR id); - -/* block_size is the configured block size for the SquashFS image. Needed -   by some compressors to set internal defaults. */ -compressor_t *compressor_create(E_SQFS_COMPRESSOR id, bool compress, -				size_t block_size, char *options); +int compressor_config_init(compressor_config_t *cfg, E_SQFS_COMPRESSOR id, +			   size_t block_size, uint16_t flags); -void compressor_print_help(E_SQFS_COMPRESSOR id); - -void compressor_print_available(void); +bool compressor_exists(E_SQFS_COMPRESSOR id); -E_SQFS_COMPRESSOR compressor_get_default(void); +compressor_t *compressor_create(const compressor_config_t *cfg);  const char *compressor_name_from_id(E_SQFS_COMPRESSOR id);  | 
