diff options
Diffstat (limited to 'squashfs-tools/compressor.h')
-rw-r--r-- | squashfs-tools/compressor.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/squashfs-tools/compressor.h b/squashfs-tools/compressor.h new file mode 100644 index 0000000..ba0de25 --- /dev/null +++ b/squashfs-tools/compressor.h @@ -0,0 +1,132 @@ +#ifndef COMPRESSOR_H +#define COMPRESSOR_H +/* + * + * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2022 + * Phillip Lougher <phillip@squashfs.org.uk> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2, + * or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * compressor.h + */ + +struct compressor { + int id; + char *name; + int supported; + int (*init)(void **, int, int); + int (*compress)(void *, void *, void *, int, int, int *); + int (*uncompress)(void *, void *, int, int, int *); + int (*options)(char **, int); + int (*options_post)(int); + void *(*dump_options)(int, int *); + int (*extract_options)(int, void *, int); + int (*check_options)(int, void *, int); + void (*display_options)(void *, int); + void (*usage)(FILE *); + int (*option_args)(char *); +}; + +extern struct compressor *lookup_compressor(char *); +extern struct compressor *lookup_compressor_id(int); +extern void display_compressors(FILE *stream, char *, char *); +extern void display_compressor_usage(FILE *stream, char *); + +static inline int compressor_init(struct compressor *comp, void **stream, + int block_size, int datablock) +{ + if(comp->init == NULL) + return 0; + return comp->init(stream, block_size, datablock); +} + + +static inline int compressor_compress(struct compressor *comp, void *strm, + void *dest, void *src, int size, int block_size, int *error) +{ + return comp->compress(strm, dest, src, size, block_size, error); +} + + +static inline int compressor_uncompress(struct compressor *comp, void *dest, + void *src, int size, int block_size, int *error) +{ + return comp->uncompress(dest, src, size, block_size, error); +} + + +/* + * For the following functions please see the lzo, lz4 or xz + * compressors for commented examples of how they are used. + */ +static inline int compressor_options(struct compressor *comp, char *argv[], + int argc) +{ + if(comp->options == NULL) + return -1; + + return comp->options(argv, argc); +} + + +static inline int compressor_options_post(struct compressor *comp, int block_size) +{ + if(comp->options_post == NULL) + return 0; + return comp->options_post(block_size); +} + + +static inline void *compressor_dump_options(struct compressor *comp, + int block_size, int *size) +{ + if(comp->dump_options == NULL) + return NULL; + return comp->dump_options(block_size, size); +} + + +static inline int compressor_extract_options(struct compressor *comp, + int block_size, void *buffer, int size) +{ + if(comp->extract_options == NULL) + return size ? -1 : 0; + return comp->extract_options(block_size, buffer, size); +} + + +static inline int compressor_check_options(struct compressor *comp, + int block_size, void *buffer, int size) +{ + if(comp->check_options == NULL) + return 0; + return comp->check_options(block_size, buffer, size); +} + + +static inline void compressor_display_options(struct compressor *comp, + void *buffer, int size) +{ + if(comp->display_options != NULL) + comp->display_options(buffer, size); +} + +static inline int compressor_option_args(struct compressor *comp, char *option) +{ + if(comp == NULL || comp->option_args == NULL) + return 0; + return comp->option_args(option); +} +#endif |