forked from len0rd/rockbox
rbutil: Update libmspack to 0.10.1alpha.
Update to the most recent release. Fix name / include clashes, as has been done before. Change-Id: Ia712bb2b5f4b9018b65a46b8bdd04ba42363be8b
This commit is contained in:
parent
b0f22620a2
commit
729b6e4f33
19 changed files with 2066 additions and 1527 deletions
|
|
@ -1,5 +1,5 @@
|
|||
/* libmspack -- a library for working with Microsoft compression formats.
|
||||
* (C) 2003-2011 Stuart Caie <kyzer@4u.net>
|
||||
* (C) 2003-2019 Stuart Caie <kyzer@cabextract.org.uk>
|
||||
*
|
||||
* libmspack is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License (LGPL) version 2.1
|
||||
|
|
@ -30,6 +30,7 @@
|
|||
* - .CAB (MS Cabinet) files, which use deflate, LZX or Quantum compression
|
||||
* - .CHM (HTML Help) files, which use LZX compression
|
||||
* - .LIT (MS EBook) files, which use LZX compression and DES encryption
|
||||
* - .LZX (Exchange Offline Addressbook) files, which use LZX compression
|
||||
*
|
||||
* To determine the capabilities of the library, and the binary
|
||||
* compatibility version of any particular compressor or decompressor, use
|
||||
|
|
@ -60,6 +61,7 @@
|
|||
* - mspack_create_hlp_compressor() creates a mshlp_compressor
|
||||
* - mspack_create_szdd_compressor() creates a msszdd_compressor
|
||||
* - mspack_create_kwaj_compressor() creates a mskwaj_compressor
|
||||
* - mspack_create_oab_compressor() creates a msoab_compressor
|
||||
*
|
||||
* For decompression:
|
||||
* - mspack_create_cab_decompressor() creates a mscab_decompressor
|
||||
|
|
@ -68,6 +70,7 @@
|
|||
* - mspack_create_hlp_decompressor() creates a mshlp_decompressor
|
||||
* - mspack_create_szdd_decompressor() creates a msszdd_decompressor
|
||||
* - mspack_create_kwaj_decompressor() creates a mskwaj_decompressor
|
||||
* - mspack_create_oab_decompressor() creates a msoab_decompressor
|
||||
*
|
||||
* Once finished working with a format, each kind of
|
||||
* compressor/decompressor has its own specific destructor:
|
||||
|
|
@ -83,6 +86,8 @@
|
|||
* - mspack_destroy_szdd_decompressor()
|
||||
* - mspack_destroy_kwaj_compressor()
|
||||
* - mspack_destroy_kwaj_decompressor()
|
||||
* - mspack_destroy_oab_compressor()
|
||||
* - mspack_destroy_oab_decompressor()
|
||||
*
|
||||
* Destroying a compressor or decompressor does not destroy any objects,
|
||||
* structures or handles that have been created using that compressor or
|
||||
|
|
@ -208,6 +213,8 @@ extern int mspack_sys_selftest_internal(int);
|
|||
* - #MSPACK_VER_MSSZDDC: the msszdd_compressor interface
|
||||
* - #MSPACK_VER_MSKWAJD: the mskwaj_decompressor interface
|
||||
* - #MSPACK_VER_MSKWAJC: the mskwaj_compressor interface
|
||||
* - #MSPACK_VER_MSOABD: the msoab_decompressor interface
|
||||
* - #MSPACK_VER_MSOABC: the msoab_compressor interface
|
||||
*
|
||||
* The result of the function should be interpreted as follows:
|
||||
* - -1: this interface is completely unknown to the library
|
||||
|
|
@ -249,6 +256,10 @@ extern int mspack_version(int entity);
|
|||
#define MSPACK_VER_MSKWAJD (12)
|
||||
/** Pass to mspack_version() to get the mskwaj_compressor version */
|
||||
#define MSPACK_VER_MSKWAJC (13)
|
||||
/** Pass to mspack_version() to get the msoab_decompressor version */
|
||||
#define MSPACK_VER_MSOABD (14)
|
||||
/** Pass to mspack_version() to get the msoab_compressor version */
|
||||
#define MSPACK_VER_MSOABC (15)
|
||||
|
||||
/* --- file I/O abstraction ------------------------------------------------ */
|
||||
|
||||
|
|
@ -297,8 +308,8 @@ struct mspack_system {
|
|||
* @see close(), read(), write(), seek(), tell(), message()
|
||||
*/
|
||||
struct mspack_file * (*open)(struct mspack_system *self,
|
||||
const char *filename,
|
||||
int mode);
|
||||
const char *filename,
|
||||
int mode);
|
||||
|
||||
/**
|
||||
* Closes a previously opened file. If any memory was allocated for this
|
||||
|
|
@ -317,12 +328,14 @@ struct mspack_system {
|
|||
* @param bytes the number of bytes to read from the file.
|
||||
* @return the number of bytes successfully read (this can be less than
|
||||
* the number requested), zero to mark the end of file, or less
|
||||
* than zero to indicate an error.
|
||||
* than zero to indicate an error. The library does not "retry"
|
||||
* reads and assumes short reads are due to EOF, so you should
|
||||
* avoid returning short reads because of transient errors.
|
||||
* @see open(), write()
|
||||
*/
|
||||
int (*read)(struct mspack_file *file,
|
||||
void *buffer,
|
||||
int bytes);
|
||||
void *buffer,
|
||||
int bytes);
|
||||
|
||||
/**
|
||||
* Writes a given number of bytes to an open file.
|
||||
|
|
@ -338,8 +351,8 @@ struct mspack_system {
|
|||
* @see open(), read()
|
||||
*/
|
||||
int (*write)(struct mspack_file *file,
|
||||
void *buffer,
|
||||
int bytes);
|
||||
void *buffer,
|
||||
int bytes);
|
||||
|
||||
/**
|
||||
* Seeks to a specific file offset within an open file.
|
||||
|
|
@ -365,8 +378,8 @@ struct mspack_system {
|
|||
* @see open(), tell()
|
||||
*/
|
||||
int (*seek)(struct mspack_file *file,
|
||||
off_t offset,
|
||||
int mode);
|
||||
off_t offset,
|
||||
int mode);
|
||||
|
||||
/**
|
||||
* Returns the current file position (in bytes) of the given file.
|
||||
|
|
@ -392,8 +405,8 @@ struct mspack_system {
|
|||
* @see open()
|
||||
*/
|
||||
void (*message)(struct mspack_file *file,
|
||||
const char *format,
|
||||
...);
|
||||
const char *format,
|
||||
...);
|
||||
|
||||
/**
|
||||
* Allocates memory.
|
||||
|
|
@ -406,12 +419,12 @@ struct mspack_system {
|
|||
* @see free()
|
||||
*/
|
||||
void * (*alloc)(struct mspack_system *self,
|
||||
size_t bytes);
|
||||
size_t bytes);
|
||||
|
||||
/**
|
||||
* Frees memory.
|
||||
*
|
||||
* @param ptr the memory to be freed.
|
||||
* @param ptr the memory to be freed. NULL is accepted and ignored.
|
||||
* @see alloc()
|
||||
*/
|
||||
void (*free)(void *ptr);
|
||||
|
|
@ -429,8 +442,8 @@ struct mspack_system {
|
|||
* @param bytes the size of the memory region, in bytes
|
||||
*/
|
||||
void (*copy)(void *src,
|
||||
void *dest,
|
||||
size_t bytes);
|
||||
void *dest,
|
||||
size_t bytes);
|
||||
|
||||
/**
|
||||
* A null pointer to mark the end of mspack_system. It must equal NULL.
|
||||
|
|
@ -645,6 +658,31 @@ extern void mspack_destroy_kwaj_compressor(struct mskwaj_compressor *self);
|
|||
extern void mspack_destroy_kwaj_decompressor(struct mskwaj_decompressor *self);
|
||||
|
||||
|
||||
/** Creates a new OAB compressor.
|
||||
* @param sys a custom mspack_system structure, or NULL to use the default
|
||||
* @return a #msoab_compressor or NULL
|
||||
*/
|
||||
extern struct msoab_compressor *
|
||||
mspack_create_oab_compressor(struct mspack_system *sys);
|
||||
|
||||
/** Creates a new OAB decompressor.
|
||||
* @param sys a custom mspack_system structure, or NULL to use the default
|
||||
* @return a #msoab_decompressor or NULL
|
||||
*/
|
||||
extern struct msoab_decompressor *
|
||||
mspack_create_oab_decompressor(struct mspack_system *sys);
|
||||
|
||||
/** Destroys an existing OAB compressor.
|
||||
* @param self the #msoab_compressor to destroy
|
||||
*/
|
||||
extern void mspack_destroy_oab_compressor(struct msoab_compressor *self);
|
||||
|
||||
/** Destroys an existing OAB decompressor.
|
||||
* @param self the #msoab_decompressor to destroy
|
||||
*/
|
||||
extern void mspack_destroy_oab_decompressor(struct msoab_decompressor *self);
|
||||
|
||||
|
||||
/* --- support for .CAB (MS Cabinet) file format --------------------------- */
|
||||
|
||||
/**
|
||||
|
|
@ -896,6 +934,13 @@ struct mscabd_file {
|
|||
#define MSCABD_PARAM_FIXMSZIP (1)
|
||||
/** mscab_decompressor::set_param() parameter: size of decompression buffer */
|
||||
#define MSCABD_PARAM_DECOMPBUF (2)
|
||||
/** mscab_decompressor::set_param() parameter: salvage data from bad cabinets?
|
||||
* If enabled, open() will skip file with bad folder indices or filenames
|
||||
* rather than reject the whole cabinet, and extract() will limit rather than
|
||||
* reject files with invalid offsets and lengths, and bad data block checksums
|
||||
* will be ignored. Available only in CAB decoder version 2 and above.
|
||||
*/
|
||||
#define MSCABD_PARAM_SALVAGE (3)
|
||||
|
||||
/** TODO */
|
||||
struct mscab_compressor {
|
||||
|
|
@ -931,7 +976,7 @@ struct mscab_decompressor {
|
|||
* @see close(), search(), last_error()
|
||||
*/
|
||||
struct mscabd_cabinet * (*open) (struct mscab_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Closes a previously opened cabinet or cabinet set.
|
||||
|
|
@ -963,7 +1008,7 @@ struct mscab_decompressor {
|
|||
* @see open(), search(), append(), prepend()
|
||||
*/
|
||||
void (*close)(struct mscab_decompressor *self,
|
||||
struct mscabd_cabinet *cab);
|
||||
struct mscabd_cabinet *cab);
|
||||
|
||||
/**
|
||||
* Searches a regular file for embedded cabinets.
|
||||
|
|
@ -1000,7 +1045,7 @@ struct mscab_decompressor {
|
|||
* @see close(), open(), last_error()
|
||||
*/
|
||||
struct mscabd_cabinet * (*search) (struct mscab_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Appends one mscabd_cabinet to another, forming or extending a cabinet
|
||||
|
|
@ -1043,8 +1088,8 @@ struct mscab_decompressor {
|
|||
* @see prepend(), open(), close()
|
||||
*/
|
||||
int (*append) (struct mscab_decompressor *self,
|
||||
struct mscabd_cabinet *cab,
|
||||
struct mscabd_cabinet *nextcab);
|
||||
struct mscabd_cabinet *cab,
|
||||
struct mscabd_cabinet *nextcab);
|
||||
|
||||
/**
|
||||
* Prepends one mscabd_cabinet to another, forming or extending a
|
||||
|
|
@ -1065,8 +1110,8 @@ struct mscab_decompressor {
|
|||
* @see append(), open(), close()
|
||||
*/
|
||||
int (*prepend) (struct mscab_decompressor *self,
|
||||
struct mscabd_cabinet *cab,
|
||||
struct mscabd_cabinet *prevcab);
|
||||
struct mscabd_cabinet *cab,
|
||||
struct mscabd_cabinet *prevcab);
|
||||
|
||||
/**
|
||||
* Extracts a file from a cabinet or cabinet set.
|
||||
|
|
@ -1091,8 +1136,8 @@ struct mscab_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*extract)(struct mscab_decompressor *self,
|
||||
struct mscabd_file *file,
|
||||
const char *filename);
|
||||
struct mscabd_file *file,
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Sets a CAB decompression engine parameter.
|
||||
|
|
@ -1117,8 +1162,8 @@ struct mscab_decompressor {
|
|||
* @see search(), extract()
|
||||
*/
|
||||
int (*set_param)(struct mscab_decompressor *self,
|
||||
int param,
|
||||
int value);
|
||||
int param,
|
||||
int value);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -1403,8 +1448,8 @@ struct mschm_compressor {
|
|||
* @see use_temporary_file() set_param()
|
||||
*/
|
||||
int (*generate)(struct mschm_compressor *self,
|
||||
struct mschmc_file file_list[],
|
||||
const char *output_file);
|
||||
struct mschmc_file file_list[],
|
||||
const char *output_file);
|
||||
|
||||
/**
|
||||
* Specifies whether a temporary file is used during CHM generation.
|
||||
|
|
@ -1460,8 +1505,8 @@ struct mschm_compressor {
|
|||
* @see generate()
|
||||
*/
|
||||
int (*use_temporary_file)(struct mschm_compressor *self,
|
||||
int use_temp_file,
|
||||
const char *temp_file);
|
||||
int use_temp_file,
|
||||
const char *temp_file);
|
||||
/**
|
||||
* Sets a CHM compression engine parameter.
|
||||
*
|
||||
|
|
@ -1508,8 +1553,8 @@ struct mschm_compressor {
|
|||
* @see generate()
|
||||
*/
|
||||
int (*set_param)(struct mschm_compressor *self,
|
||||
int param,
|
||||
unsigned int value);
|
||||
int param,
|
||||
int value);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -1551,7 +1596,7 @@ struct mschm_decompressor {
|
|||
* @see close()
|
||||
*/
|
||||
struct mschmd_header *(*open)(struct mschm_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Closes a previously opened CHM helpfile.
|
||||
|
|
@ -1571,7 +1616,7 @@ struct mschm_decompressor {
|
|||
* @see open(), fast_open()
|
||||
*/
|
||||
void (*close)(struct mschm_decompressor *self,
|
||||
struct mschmd_header *chm);
|
||||
struct mschmd_header *chm);
|
||||
|
||||
/**
|
||||
* Extracts a file from a CHM helpfile.
|
||||
|
|
@ -1592,8 +1637,8 @@ struct mschm_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*extract)(struct mschm_decompressor *self,
|
||||
struct mschmd_file *file,
|
||||
const char *filename);
|
||||
struct mschmd_file *file,
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -1631,7 +1676,7 @@ struct mschm_decompressor {
|
|||
* @see open(), close(), fast_find(), extract()
|
||||
*/
|
||||
struct mschmd_header *(*fast_open)(struct mschm_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Finds file details quickly.
|
||||
|
|
@ -1672,10 +1717,10 @@ struct mschm_decompressor {
|
|||
* @see open(), close(), fast_find(), extract()
|
||||
*/
|
||||
int (*fast_find)(struct mschm_decompressor *self,
|
||||
struct mschmd_header *chm,
|
||||
const char *filename,
|
||||
struct mschmd_file *f_ptr,
|
||||
int f_size);
|
||||
struct mschmd_header *chm,
|
||||
const char *filename,
|
||||
struct mschmd_file *f_ptr,
|
||||
int f_size);
|
||||
};
|
||||
|
||||
/* --- support for .LIT (EBook) file format -------------------------------- */
|
||||
|
|
@ -1781,9 +1826,9 @@ struct msszdd_compressor {
|
|||
* @see set_param()
|
||||
*/
|
||||
int (*compress)(struct msszdd_compressor *self,
|
||||
const char *input,
|
||||
const char *output,
|
||||
off_t length);
|
||||
const char *input,
|
||||
const char *output,
|
||||
off_t length);
|
||||
|
||||
/**
|
||||
* Sets an SZDD compression engine parameter.
|
||||
|
|
@ -1807,8 +1852,8 @@ struct msszdd_compressor {
|
|||
* @see compress()
|
||||
*/
|
||||
int (*set_param)(struct msszdd_compressor *self,
|
||||
int param,
|
||||
unsigned int value);
|
||||
int param,
|
||||
int value);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -1849,7 +1894,7 @@ struct msszdd_decompressor {
|
|||
* @see close()
|
||||
*/
|
||||
struct msszddd_header *(*open)(struct msszdd_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Closes a previously opened SZDD file.
|
||||
|
|
@ -1865,7 +1910,7 @@ struct msszdd_decompressor {
|
|||
* @see open()
|
||||
*/
|
||||
void (*close)(struct msszdd_decompressor *self,
|
||||
struct msszddd_header *szdd);
|
||||
struct msszddd_header *szdd);
|
||||
|
||||
/**
|
||||
* Extracts the compressed data from a SZDD file.
|
||||
|
|
@ -1881,8 +1926,8 @@ struct msszdd_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*extract)(struct msszdd_decompressor *self,
|
||||
struct msszddd_header *szdd,
|
||||
const char *filename);
|
||||
struct msszddd_header *szdd,
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Decompresses an SZDD file to an output file in one step.
|
||||
|
|
@ -1902,8 +1947,8 @@ struct msszdd_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*decompress)(struct msszdd_decompressor *self,
|
||||
const char *input,
|
||||
const char *output);
|
||||
const char *input,
|
||||
const char *output);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -1937,6 +1982,8 @@ struct msszdd_decompressor {
|
|||
#define MSKWAJ_COMP_SZDD (2)
|
||||
/** KWAJ compression type: LZ+Huffman compression */
|
||||
#define MSKWAJ_COMP_LZH (3)
|
||||
/** KWAJ compression type: MSZIP */
|
||||
#define MSKWAJ_COMP_MSZIP (4)
|
||||
|
||||
/** KWAJ optional header flag: decompressed file length is included */
|
||||
#define MSKWAJ_HDR_HASLENGTH (0x01)
|
||||
|
|
@ -2015,9 +2062,9 @@ struct mskwaj_compressor {
|
|||
* @see set_param()
|
||||
*/
|
||||
int (*compress)(struct mskwaj_compressor *self,
|
||||
const char *input,
|
||||
const char *output,
|
||||
off_t length);
|
||||
const char *input,
|
||||
const char *output,
|
||||
off_t length);
|
||||
|
||||
/**
|
||||
* Sets an KWAJ compression engine parameter.
|
||||
|
|
@ -2043,8 +2090,8 @@ struct mskwaj_compressor {
|
|||
* @see generate()
|
||||
*/
|
||||
int (*set_param)(struct mskwaj_compressor *self,
|
||||
int param,
|
||||
unsigned int value);
|
||||
int param,
|
||||
int value);
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -2065,7 +2112,7 @@ struct mskwaj_compressor {
|
|||
* filename is too long
|
||||
*/
|
||||
int (*set_filename)(struct mskwaj_compressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Sets arbitrary data that will be stored in the header of the
|
||||
|
|
@ -2085,8 +2132,8 @@ struct mskwaj_compressor {
|
|||
* is too long
|
||||
*/
|
||||
int (*set_extra_data)(struct mskwaj_compressor *self,
|
||||
void *data,
|
||||
size_t bytes);
|
||||
void *data,
|
||||
size_t bytes);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -2127,7 +2174,7 @@ struct mskwaj_decompressor {
|
|||
* @see close()
|
||||
*/
|
||||
struct mskwajd_header *(*open)(struct mskwaj_decompressor *self,
|
||||
const char *filename);
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Closes a previously opened KWAJ file.
|
||||
|
|
@ -2142,7 +2189,7 @@ struct mskwaj_decompressor {
|
|||
* @see open()
|
||||
*/
|
||||
void (*close)(struct mskwaj_decompressor *self,
|
||||
struct mskwajd_header *kwaj);
|
||||
struct mskwajd_header *kwaj);
|
||||
|
||||
/**
|
||||
* Extracts the compressed data from a KWAJ file.
|
||||
|
|
@ -2158,8 +2205,8 @@ struct mskwaj_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*extract)(struct mskwaj_decompressor *self,
|
||||
struct mskwajd_header *kwaj,
|
||||
const char *filename);
|
||||
struct mskwajd_header *kwaj,
|
||||
const char *filename);
|
||||
|
||||
/**
|
||||
* Decompresses an KWAJ file to an output file in one step.
|
||||
|
|
@ -2179,8 +2226,8 @@ struct mskwaj_decompressor {
|
|||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*decompress)(struct mskwaj_decompressor *self,
|
||||
const char *input,
|
||||
const char *output);
|
||||
const char *input,
|
||||
const char *output);
|
||||
|
||||
/**
|
||||
* Returns the error code set by the most recently called method.
|
||||
|
|
@ -2196,6 +2243,141 @@ struct mskwaj_decompressor {
|
|||
int (*last_error)(struct mskwaj_decompressor *self);
|
||||
};
|
||||
|
||||
/* --- support for .LZX (Offline Address Book) file format ----------------- */
|
||||
|
||||
/**
|
||||
* A compressor for the Offline Address Book (OAB) format.
|
||||
*
|
||||
* All fields are READ ONLY.
|
||||
*
|
||||
* @see mspack_create_oab_compressor(), mspack_destroy_oab_compressor()
|
||||
*/
|
||||
struct msoab_compressor {
|
||||
/**
|
||||
* Compress a full OAB file.
|
||||
*
|
||||
* The input file will be read and the compressed contents written to the
|
||||
* output file.
|
||||
*
|
||||
* @param self a self-referential pointer to the msoab_decompressor
|
||||
* instance being called
|
||||
* @param input the filename of the input file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @param output the filename of the output file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*compress) (struct msoab_compressor *self,
|
||||
const char *input,
|
||||
const char *output);
|
||||
|
||||
/**
|
||||
* Generate a compressed incremental OAB patch file.
|
||||
*
|
||||
* The two uncompressed files "input" and "base" will be read, and an
|
||||
* incremental patch to generate "input" from "base" will be written to
|
||||
* the output file.
|
||||
*
|
||||
* @param self a self-referential pointer to the msoab_compressor
|
||||
* instance being called
|
||||
* @param input the filename of the input file containing the new
|
||||
* version of its contents. This is passed directly
|
||||
* to mspack_system::open().
|
||||
* @param base the filename of the original base file containing
|
||||
* the old version of its contents, against which the
|
||||
* incremental patch shall generated. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @param output the filename of the output file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*compress_incremental) (struct msoab_compressor *self,
|
||||
const char *input,
|
||||
const char *base,
|
||||
const char *output);
|
||||
};
|
||||
|
||||
/**
|
||||
* A decompressor for .LZX (Offline Address Book) files
|
||||
*
|
||||
* All fields are READ ONLY.
|
||||
*
|
||||
* @see mspack_create_oab_decompressor(), mspack_destroy_oab_decompressor()
|
||||
*/
|
||||
struct msoab_decompressor {
|
||||
/**
|
||||
* Decompresses a full Offline Address Book file.
|
||||
*
|
||||
* If the input file is a valid compressed Offline Address Book file,
|
||||
* it will be read and the decompressed contents will be written to
|
||||
* the output file.
|
||||
*
|
||||
* @param self a self-referential pointer to the msoab_decompressor
|
||||
* instance being called
|
||||
* @param input the filename of the input file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @param output the filename of the output file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*decompress) (struct msoab_decompressor *self,
|
||||
const char *input,
|
||||
const char *output);
|
||||
|
||||
/**
|
||||
* Decompresses an Offline Address Book with an incremental patch file.
|
||||
*
|
||||
* This requires both a full UNCOMPRESSED Offline Address Book file to
|
||||
* act as the "base", and a compressed incremental patch file as input.
|
||||
* If the input file is valid, it will be decompressed with reference to
|
||||
* the base file, and the decompressed contents will be written to the
|
||||
* output file.
|
||||
*
|
||||
* There is no way to tell what the right base file is for the given
|
||||
* incremental patch, but if you get it wrong, this will usually result
|
||||
* in incorrect data being decompressed, which will then fail a checksum
|
||||
* test.
|
||||
*
|
||||
* @param self a self-referential pointer to the msoab_decompressor
|
||||
* instance being called
|
||||
* @param input the filename of the input file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @param base the filename of the base file to which the
|
||||
* incremental patch shall be applied. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @param output the filename of the output file. This is passed
|
||||
* directly to mspack_system::open().
|
||||
* @return an error code, or MSPACK_ERR_OK if successful
|
||||
*/
|
||||
int (*decompress_incremental) (struct msoab_decompressor *self,
|
||||
const char *input,
|
||||
const char *base,
|
||||
const char *output);
|
||||
|
||||
/**
|
||||
* Sets an OAB decompression engine parameter. Available only in OAB
|
||||
* decompressor version 2 and above.
|
||||
*
|
||||
* - #MSOABD_PARAM_DECOMPBUF: How many bytes should be used as an input
|
||||
* buffer by decompressors? The minimum value is 16. The default value
|
||||
* is 4096.
|
||||
*
|
||||
* @param self a self-referential pointer to the msoab_decompressor
|
||||
* instance being called
|
||||
* @param param the parameter to set
|
||||
* @param value the value to set the parameter to
|
||||
* @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if there
|
||||
* is a problem with either parameter or value.
|
||||
*/
|
||||
int (*set_param)(struct msoab_decompressor *self,
|
||||
int param,
|
||||
int value);
|
||||
|
||||
};
|
||||
|
||||
/** msoab_decompressor::set_param() parameter: size of decompression buffer */
|
||||
#define MSOABD_PARAM_DECOMPBUF (0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue