X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=08d74b25c5cc2a0b95361eb15455f5a14c112465;hp=d3b0c9a6212188bb9e614da412d69c230ff7e519;hb=3f9b53a4a214a254bb27ed30994faf2a0fd12375;hpb=7e7070982833be4292431b7dbffa8280e27b3d8a diff --git a/src/wimlib.h b/src/wimlib.h index d3b0c9a6..08d74b25 100644 --- a/src/wimlib.h +++ b/src/wimlib.h @@ -431,6 +431,7 @@ union wimlib_progress_info { * ::WIMLIB_COMPRESSION_TYPE_LZX. */ int compression_type; + /** Library internal use only. */ uint64_t _private; } write_streams; @@ -613,7 +614,7 @@ struct wimlib_pattern_list { * but the @a pats pointer itself will not. See the man page for * wimlib-imagex capture for more information about allowed * patterns. */ - tchar **pats; + wimlib_tchar **pats; /** Number of patterns in the @a pats array. */ size_t num_pats; @@ -641,7 +642,7 @@ struct wimlib_capture_config { struct wimlib_pattern_list reserved2; /** Library internal use only. */ - tchar *_prefix; + wimlib_tchar *_prefix; /** Library internal use only. */ size_t _prefix_num_tchars; @@ -899,7 +900,8 @@ struct wimlib_modify_command { * added at the end to maintain a compatible ABI, except when it's being broken * anyway. */ enum wimlib_error_code { - WIMLIB_ERR_ALREADY_LOCKED = 1, + WIMLIB_ERR_SUCCESS = 0, + WIMLIB_ERR_ALREADY_LOCKED, WIMLIB_ERR_COMPRESSED_LOOKUP_TABLE, WIMLIB_ERR_DECOMPRESSION, WIMLIB_ERR_DELETE_STAGING_DIR, @@ -949,7 +951,6 @@ enum wimlib_error_code { WIMLIB_ERR_SPLIT_INVALID, WIMLIB_ERR_SPLIT_UNSUPPORTED, WIMLIB_ERR_STAT, - WIMLIB_ERR_SUCCESS = 0, WIMLIB_ERR_TIMEOUT, WIMLIB_ERR_UNICODE_STRING_NOT_REPRESENTABLE, WIMLIB_ERR_UNKNOWN_VERSION, @@ -1656,6 +1657,56 @@ wimlib_join(const wimlib_tchar * const *swms, int wim_write_flags, wimlib_progress_func_t progress_func); +/** + * Compress a chunk of a WIM resource using LZX compression. + * + * This function is exported for convenience only and need not be used. + * + * @param chunk + * Uncompressed data of the chunk. + * @param chunk_size + * Size of the uncompressed chunk, in bytes. + * @param out + * Pointer to output buffer of size at least (@a chunk_size - 1) bytes. + * + * @return + * The size of the compressed data written to @a out in bytes, or 0 if the + * data could not be compressed to (@a chunk_size - 1) bytes or fewer. + * + * As a special requirement, the compression code is optimized for the WIM + * format and therefore requires (@a chunk_size <= 32768). + */ +extern unsigned +wimlib_lzx_compress(const void *chunk, unsigned chunk_size, void *out); + +/** + * Decompresses a block of LZX-compressed data as used in the WIM file format. + * + * Note that this will NOT work unmodified for LZX as used in the cabinet + * format, which is not the same as in the WIM format! + * + * This function is exported for convenience only and need not be used. + * + * @param compressed_data + * Pointer to the compressed data. + * + * @param compressed_len + * Length of the compressed data, in bytes. + * + * @param uncompressed_data + * Pointer to the buffer into which to write the uncompressed data. + * + * @param uncompressed_len + * Length of the uncompressed data. It must be 32768 bytes or less. + * + * @return + * 0 on success; non-zero on failure. + */ +extern int +wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len, + void *uncompressed_data, unsigned uncompressed_len); + + /** * Mounts an image in a WIM file on a directory read-only or read-write. * @@ -2410,4 +2461,19 @@ wimlib_write(WIMStruct *wim, unsigned num_threads, wimlib_progress_func_t progress_func); +/** + * This function is equivalent to wimlib_lzx_compress(), but instead compresses + * the data using "XPRESS" compression. + */ +extern unsigned +wimlib_xpress_compress(const void *chunk, unsigned chunk_size, void *out); + +/** + * This function is equivalent to wimlib_lzx_decompress(), but instead assumes + * the data is compressed using "XPRESS" compression. + */ +extern int +wimlib_xpress_decompress(const void *compressed_data, unsigned compressed_len, + void *uncompressed_data, unsigned uncompressed_len); + #endif /* _WIMLIB_H */