X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=7a2fad7d8c3c87b595f848db31ba7876307fd39d;hp=16f3ecb4d2476915a4e0b3c3f725b56b5150f165;hb=500d90055cae33925961076f4eda19bb2ec57d8c;hpb=232c381f9f3ab814258aa8e2380f537498a50905 diff --git a/src/wimlib.h b/src/wimlib.h index 16f3ecb4..7a2fad7d 100644 --- a/src/wimlib.h +++ b/src/wimlib.h @@ -31,7 +31,7 @@ * * \section intro Introduction * - * This is the documentation for the library interface of wimlib 1.3.0. If you + * This is the documentation for the library interface of wimlib 1.3.3. If you * have installed wimlib and want to know how to use the @b wimlib-imagex * program, please see the man pages instead. Also: the actual project page * where you can download the source code for the library is at wimlib-imagex capture for more information about allowed + * patterns. */ + wimlib_tchar **pats; + + /** Number of patterns in the @a pats array. */ + size_t num_pats; + + /** Ignored; may be used by the calling code. */ + size_t num_allocated_pats; +}; + +/** A structure that contains lists of wildcards that match paths to treat + * specially when capturing a WIM image. */ +struct wimlib_capture_config { + /** Paths matching any pattern this list are excluded from being + * captured, except if the same path appears in @a + * exclusion_exception_pats. */ + struct wimlib_pattern_list exclusion_pats; + + /** Paths matching any pattern in this list are never excluded from + * being captured. */ + struct wimlib_pattern_list exclusion_exception_pats; + + /** Reserved for future capture configuration options. */ + struct wimlib_pattern_list reserved1; + + /** Reserved for future capture configuration options. */ + struct wimlib_pattern_list reserved2; + + /** Library internal use only. */ + wimlib_tchar *_prefix; + + /** Library internal use only. */ + size_t _prefix_num_tchars; +}; + /***************************** * WIMLIB_ADD_IMAGE_FLAG_* * @@ -633,6 +677,39 @@ struct wimlib_capture_source { * This flag cannot be combined with ::WIMLIB_ADD_IMAGE_FLAG_NTFS. */ #define WIMLIB_ADD_IMAGE_FLAG_UNIX_DATA 0x00000010 +/** Do not capture security descriptors. Only has an effect in NTFS capture + * mode, or in Win32 native builds. */ +#define WIMLIB_ADD_IMAGE_FLAG_NO_ACLS 0x00000020 + +/** Fail immediately if the full security descriptor of any file or directory + * cannot be accessed. Only has an effect in Win32 native builds. The default + * behavior without this flag is to first try omitting the SACL from the + * security descriptor, then to try omitting the security descriptor entirely. + * */ +#define WIMLIB_ADD_IMAGE_FLAG_STRICT_ACLS 0x00000040 + +/** Call the progress function with the message + * ::WIMLIB_PROGRESS_MSG_SCAN_DENTRY when a directory or file is excluded from + * capture. This is a subset of the messages provided by + * ::WIMLIB_ADD_IMAGE_FLAG_VERBOSE. */ +#define WIMLIB_ADD_IMAGE_FLAG_EXCLUDE_VERBOSE 0x00000080 + +/** Reparse-point fixups: Modify absolute symbolic links (or junction points, + * in the case of Windows) that point inside the directory being captured to + * instead be absolute relative to the directory being captured, rather than the + * current root; also exclude absolute symbolic links that point outside the + * directory tree being captured. + * + * Without this flag, the default is to do this if WIM_HDR_FLAG_RP_FIX is set in + * the WIM header or if this is the first image being added. + * WIM_HDR_FLAG_RP_FIX is set if the first image in a WIM is captured with + * reparse point fixups enabled and currently cannot be unset. */ +#define WIMLIB_ADD_IMAGE_FLAG_RPFIX 0x00000100 + +/* Don't do reparse point fixups. The default behavior is described in the + * documentation for ::WIMLIB_ADD_IMAGE_FLAG_RPFIX. */ +#define WIMLIB_ADD_IMAGE_FLAG_NORPFIX 0x00000200 + /****************************** * WIMLIB_EXPORT_FLAG_* * ******************************/ @@ -669,6 +746,27 @@ struct wimlib_capture_source { * Cannot be used with ::WIMLIB_EXTRACT_FLAG_NTFS. */ #define WIMLIB_EXTRACT_FLAG_UNIX_DATA 0x00000020 +/** Do not extract security descriptors. Only has an effect in NTFS apply mode, + * or in Win32 native builds. */ +#define WIMLIB_EXTRACT_FLAG_NO_ACLS 0x00000040 + +/** Fail immediately if the full security descriptor of any file or directory + * cannot be set exactly as specified in the WIM file. The default behavior + * without this flag is to fall back to setting the security descriptor with the + * SACL omitted, then only the default inherited security descriptor, if we do + * not have permission to set the desired one. */ +#define WIMLIB_EXTRACT_FLAG_STRICT_ACLS 0x00000080 + +/* Extract equivalent to ::WIMLIB_ADD_IMAGE_FLAG_RPFIX; force reparse-point + * fixups on, so absolute symbolic links or junction points will be fixed to be + * absolute relative to the actual extraction root. Done by default if + * WIM_HDR_FLAG_RP_FIX is set in the WIM header. */ +#define WIMLIB_EXTRACT_FLAG_RPFIX 0x00000100 + +/** Force reparse-point fixups on extraction off, regardless of the state of the + * WIM_HDR_FLAG_RP_FIX flag in the WIM header. */ +#define WIMLIB_EXTRACT_FLAG_NORPFIX 0x00000200 + /****************************** * WIMLIB_MOUNT_FLAG_* * ******************************/ @@ -756,6 +854,72 @@ struct wimlib_capture_source { * deleting an image in this way. */ #define WIMLIB_WRITE_FLAG_SOFT_DELETE 0x00000010 +/** Assume that strings are represented in UTF-8, even if this is not the + * locale's character encoding. */ +#define WIMLIB_INIT_FLAG_ASSUME_UTF8 0x00000001 + + +#if 0 +/**************************************************************** + * Definition of struct wimlib_modify_command, with various flags + ****************************************************************/ + +enum { + WIMLIB_MOVE_TREE_FLAG_OVERWRITE_ALL = 0x1, + WIMLIB_MOVE_TREE_FLAG_OVERWRITE_NONDIRECTORIES = 0x2, + WIMLIB_MOVE_TREE_FLAG_OVERWRITE_EMPTY_DIRECTORIES = 0x4, + WIMLIB_MOVE_TREE_FLAG_OVERWRITE_DIRECTORIES = 0x8, +}; + +enum { + WIMLIB_DELETE_TREE_FLAG_FORCE = 0x1, + WIMLIB_DELETE_TREE_FLAG_RECURSIVE = 0x2, + WIMLIB_DELETE_TREE_FLAG_REMOVE_EMPTY_DIR = 0x4, +}; + +enum { + WIMLIB_ADD_TREE_FLAG_DEREFERENCE = 0x1, + WIMLIB_ADD_TREE_FLAG_VERBOSE = 0x2, + WIMLIB_ADD_TREE_FLAG_UNIX_DATA = 0x4, + WIMLIB_ADD_TREE_FLAG_NOACLS = 0x8, + WIMLIB_ADD_TREE_FLAG_NTFS_VOLUME = 0x01, + WIMLIB_ADD_TREE_FLAG_OVERLAY = 0x02, + WIMLIB_ADD_TREE_FLAG_MAKE_NECESSARY_DIRS = 0x04, +}; + +enum wimlib_modify_op { + WIMLIB_MODIFY_OP_DELETE_TREE, + WIMLIB_MODIFY_OP_ADD_TREE, + WIMLIB_MODIFY_OP_MOVE_TREE, +}; + +struct wimlib_modify_command { + enum wimlib_modify_op op; + union { + struct wimlib_modify_command_delete_tree { + int delete_tree_flags; + const wimlib_tchar *tree_wim_path; + unsigned long reserved; + } delete_tree; + + struct wimlib_modify_command_add_tree { + int add_tree_flags; + const wimlib_tchar *fs_source_path; + const wimlib_tchar *wim_target_path; + unsigned long reserved; + } add_tree; + + struct wimlib_modify_command_move_tree { + int move_tree_flags; + const wimlib_tchar *wim_source_path; + const wimlib_tchar *wim_target_path; + unsigned long reserved; + } move_tree; + }; +}; +#endif + + /** * Possible values of the error code returned by many functions in wimlib. * @@ -778,6 +942,7 @@ enum wimlib_error_code { WIMLIB_ERR_ICONV_NOT_AVAILABLE, WIMLIB_ERR_IMAGE_COUNT, WIMLIB_ERR_IMAGE_NAME_COLLISION, + WIMLIB_ERR_INSUFFICIENT_PRIVILEGES_TO_EXTRACT, WIMLIB_ERR_INTEGRITY, WIMLIB_ERR_INVALID_CAPTURE_CONFIG, WIMLIB_ERR_INVALID_CHUNK_SIZE, @@ -787,14 +952,17 @@ enum wimlib_error_code { WIMLIB_ERR_INVALID_IMAGE, WIMLIB_ERR_INVALID_INTEGRITY_TABLE, WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY, + WIMLIB_ERR_INVALID_MULTIBYTE_STRING, + WIMLIB_ERR_INVALID_OVERLAY, WIMLIB_ERR_INVALID_PARAM, WIMLIB_ERR_INVALID_PART_NUMBER, + WIMLIB_ERR_INVALID_REPARSE_DATA, WIMLIB_ERR_INVALID_RESOURCE_HASH, WIMLIB_ERR_INVALID_RESOURCE_SIZE, WIMLIB_ERR_INVALID_SECURITY_DATA, WIMLIB_ERR_INVALID_UNMOUNT_MESSAGE, - WIMLIB_ERR_INVALID_UTF8_STRING, WIMLIB_ERR_INVALID_UTF16_STRING, + WIMLIB_ERR_INVALID_UTF8_STRING, WIMLIB_ERR_LIBXML_UTF16_HANDLER_NOT_AVAILABLE, WIMLIB_ERR_LINK, WIMLIB_ERR_MKDIR, @@ -806,23 +974,23 @@ enum wimlib_error_code { WIMLIB_ERR_NTFS_3G, WIMLIB_ERR_OPEN, WIMLIB_ERR_OPENDIR, - WIMLIB_ERR_READLINK, WIMLIB_ERR_READ, + WIMLIB_ERR_READLINK, WIMLIB_ERR_RENAME, WIMLIB_ERR_REOPEN, + WIMLIB_ERR_REPARSE_POINT_FIXUP_FAILED, WIMLIB_ERR_RESOURCE_ORDER, WIMLIB_ERR_SPECIAL_FILE, WIMLIB_ERR_SPLIT_INVALID, WIMLIB_ERR_SPLIT_UNSUPPORTED, WIMLIB_ERR_STAT, WIMLIB_ERR_TIMEOUT, + WIMLIB_ERR_UNICODE_STRING_NOT_REPRESENTABLE, WIMLIB_ERR_UNKNOWN_VERSION, WIMLIB_ERR_UNSUPPORTED, + WIMLIB_ERR_VOLUME_LACKS_FEATURES, WIMLIB_ERR_WRITE, WIMLIB_ERR_XML, - WIMLIB_ERR_INVALID_OVERLAY, - WIMLIB_ERR_INVALID_MULTIBYTE_STRING, - WIMLIB_ERR_UNICODE_STRING_NOT_REPRESENTABLE, }; @@ -835,12 +1003,9 @@ enum wimlib_error_code { /** * Adds an image to a WIM file from an on-disk directory tree or NTFS volume. * - * The directory tree of NTFS volume is read immediately for the purpose of - * constructing a directory entry tree in-memory. Also, all files are read to - * calculate their SHA1 message digests. However, because the directory tree - * may contain a very large amount of data, the files themselves are not read - * into memory permanently, and instead references to their paths saved. The - * files are then read on-demand if wimlib_write() or wimlib_overwrite() is + * The directory tree or NTFS volume is scanned immediately to load the dentry + * tree into memory, and file attributes and symbolic links are read. However, + * actual file data is not read until wimlib_write() or wimlib_overwrite() is * called. * * See the manual page for the @b wimlib-imagex program for more information @@ -859,12 +1024,9 @@ enum wimlib_error_code { * @param name * The name to give the image. This must be non-@c NULL. * @param config - * Pointer to the contents of an image capture configuration file. If @c - * NULL, a default string is used. Please see the manual page for - * wimlib-imagex capture for more information. - * @param config_len - * Length of the string @a config in bytes, not including an optional - * null-terminator. Ignored if @a config is @c NULL. + * Capture configuration that specifies files, directories, or path globs + * to exclude from being captured. If @c NULL, a dummy configuration where + * no paths are treated specially is used. * @param add_image_flags * Bitwise OR of flags prefixed with WIMLIB_ADD_IMAGE_FLAG. * @param progress_func @@ -916,10 +1078,11 @@ enum wimlib_error_code { * wimlib was configured with the @c --without-ntfs-3g flag. */ extern int -wimlib_add_image(WIMStruct *wim, const wimlib_mbchar *source, - const wimlib_utf8char *name, - const wimlib_mbchar *config, - size_t config_len, int add_image_flags, +wimlib_add_image(WIMStruct *wim, + const wimlib_tchar *source, + const wimlib_tchar *name, + struct wimlib_capture_config *config, + int add_image_flags, wimlib_progress_func_t progress_func); /** This function is equivalent to wimlib_add_image() except it allows for @@ -948,9 +1111,8 @@ extern int wimlib_add_image_multisource(WIMStruct *w, struct wimlib_capture_source *sources, size_t num_sources, - const wimlib_utf8char *name, - const wimlib_mbchar *config_str, - size_t config_len, + const wimlib_tchar *name, + struct wimlib_capture_config *config, int add_image_flags, wimlib_progress_func_t progress_func); @@ -1133,8 +1295,8 @@ wimlib_delete_image(WIMStruct *wim, int image); extern int wimlib_export_image(WIMStruct *src_wim, int src_image, WIMStruct *dest_wim, - const wimlib_utf8char *dest_name, - const wimlib_utf8char *dest_description, + const wimlib_tchar *dest_name, + const wimlib_tchar *dest_description, int export_flags, WIMStruct **additional_swms, unsigned num_additional_swms, @@ -1264,7 +1426,7 @@ wimlib_export_image(WIMStruct *src_wim, int src_image, */ extern int wimlib_extract_image(WIMStruct *wim, int image, - const wimlib_mbchar *target, + const wimlib_tchar *target, int extract_flags, WIMStruct **additional_swms, unsigned num_additional_swms, @@ -1338,7 +1500,7 @@ wimlib_get_compression_type(const WIMStruct *wim); * A statically allocated string: "None", "LZX", "XPRESS", or "Invalid", * respectively. */ -extern const wimlib_mbchar * +extern const wimlib_tchar * wimlib_get_compression_type_string(int ctype); /** @@ -1351,7 +1513,7 @@ wimlib_get_compression_type_string(int ctype); * Pointer to a statically allocated string describing the error code, * or @c NULL if the error code is not valid. */ -extern const wimlib_mbchar * +extern const wimlib_tchar * wimlib_get_error_string(enum wimlib_error_code code); /** @@ -1370,7 +1532,7 @@ wimlib_get_error_string(enum wimlib_error_code code); * in addition, the string will become invalid if the description of the * image is changed, the image is deleted, or the ::WIMStruct is destroyed. */ -extern const wimlib_utf8char * +extern const wimlib_tchar * wimlib_get_image_description(const WIMStruct *wim, int image); /** @@ -1392,7 +1554,7 @@ wimlib_get_image_description(const WIMStruct *wim, int image); * the WIM to be unnamed, in which case an empty string will be returned * when the corresponding name is requested. */ -extern const wimlib_utf8char * +extern const wimlib_tchar * wimlib_get_image_name(const WIMStruct *wim, int image); @@ -1428,15 +1590,27 @@ wimlib_get_part_number(const WIMStruct *wim, int *total_parts_ret); /** * Since wimlib 1.2.6: Initialization function for wimlib. This is not * re-entrant. If you are calling wimlib functions concurrently in different - * threads, then you must call this function serially first. Also, since wimlib - * 1.3.0, you must call this function if the character encoding of the current - * locale is not UTF-8. Otherwise, calling this function this function is not - * required. + * threads, then you must call this function serially first. + * + * Since wimlib 1.3.0, you must call this function if the character encoding of + * the current locale is not UTF-8 and you do not want wimlib to assume a UTF-8 + * encoding. + * + * Since wimlib 1.3.2, you must call this function if using the Windows-native + * build of the library so that certain functions can be dynamically loaded from + * system DLLs. + * + * Since wimlib 1.3.3, this function takes the @a init_flags parameter. * - * This function always returns 0. + * @param init_flags + * ::WIMLIB_INIT_FLAG_ASSUME_UTF8 if wimlib should assume that all input + * data, including filenames, are in UTF-8, and that UTF-8 data can be + * directly printed to the console. + * + * @return 0; other error codes may be returned in future releases. */ extern int -wimlib_global_init(); +wimlib_global_init(int init_flags); /** * Since wimlib 1.2.6: Cleanup function for wimlib. This is not re-entrant. @@ -1474,7 +1648,7 @@ wimlib_has_integrity_table(const WIMStruct *wim); * the empty string, @c false is returned. */ extern bool -wimlib_image_name_in_use(const WIMStruct *wim, const wimlib_utf8char *name); +wimlib_image_name_in_use(const WIMStruct *wim, const wimlib_tchar *name); /** * Joins a split WIM into a stand-alone one-part WIM. @@ -1514,13 +1688,63 @@ wimlib_image_name_in_use(const WIMStruct *wim, const wimlib_utf8char *name); * wimlib_join(), since it is possible to export all images from a split WIM. */ extern int -wimlib_join(const wimlib_mbchar * const *swms, +wimlib_join(const wimlib_tchar * const *swms, unsigned num_swms, - const wimlib_mbchar *output_path, + const wimlib_tchar *output_path, int swm_open_flags, 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. * @@ -1620,10 +1844,13 @@ wimlib_join(const wimlib_mbchar * const *swms, * support mounting a split WIM read-only. */ extern int -wimlib_mount_image(WIMStruct *wim, int image, const wimlib_mbchar *dir, - int mount_flags, WIMStruct **additional_swms, +wimlib_mount_image(WIMStruct *wim, + int image, + const wimlib_tchar *dir, + int mount_flags, + WIMStruct **additional_swms, unsigned num_additional_swms, - const wimlib_mbchar *staging_dir); + const wimlib_tchar *staging_dir); /** * Opens a WIM file and creates a ::WIMStruct for it. @@ -1704,8 +1931,10 @@ wimlib_mount_image(WIMStruct *wim, int image, const wimlib_mbchar *dir, * The XML data for @a wim_file is invalid. */ extern int -wimlib_open_wim(const wimlib_mbchar *wim_file, int open_flags, - WIMStruct **wim_ret, wimlib_progress_func_t progress_func); +wimlib_open_wim(const wimlib_tchar *wim_file, + int open_flags, + WIMStruct **wim_ret, + wimlib_progress_func_t progress_func); /** * Overwrites the file that the WIM was originally read from, with changes made. @@ -1745,6 +1974,10 @@ wimlib_open_wim(const wimlib_mbchar *wim_file, int open_flags, * and while abnormal termination of the program will result in extra data * appended to the original WIM, it should still be a valid WIM. * + * If this function completes successfully, no functions should be called on @a + * wim other than wimlib_free(). You must use wimlib_open_wim() to read the WIM + * file anew. + * * @param wim * Pointer to the ::WIMStruct for the WIM file to write. There may have * been in-memory changes made to it, which are then reflected in the @@ -1772,11 +2005,6 @@ wimlib_open_wim(const wimlib_mbchar *wim_file, int open_flags, * @retval ::WIMLIB_ERR_RENAME * The temporary file that the WIM was written to could not be renamed to * the original filename of @a wim. - * @retval ::WIMLIB_ERR_REOPEN - * The WIM was overwritten successfully, but it could not be re-opened - * read-only. Therefore, the resources in the WIM can no longer be - * accessed, so this limits the functions that can be called on @a wim - * before calling wimlib_free(). */ extern int wimlib_overwrite(WIMStruct *wim, int write_flags, unsigned num_threads, @@ -1942,7 +2170,7 @@ wimlib_print_wim_information(const WIMStruct *wim); */ extern int wimlib_resolve_image(WIMStruct *wim, - const wimlib_utf8char *image_name_or_num); + const wimlib_tchar *image_name_or_num); /** * Sets which image in the WIM is marked as bootable. @@ -1985,7 +2213,7 @@ wimlib_set_boot_idx(WIMStruct *wim, int boot_idx); */ extern int wimlib_set_image_descripton(WIMStruct *wim, int image, - const wimlib_utf8char *description); + const wimlib_tchar *description); /** * Changes what is written in the \ element in the WIM XML data @@ -2008,7 +2236,7 @@ wimlib_set_image_descripton(WIMStruct *wim, int image, * Failed to allocate the memory needed to duplicate the @a flags string. */ extern int wimlib_set_image_flags(WIMStruct *wim, int image, - const wimlib_utf8char *flags); + const wimlib_tchar *flags); /** * Changes the name of an image in the WIM. @@ -2033,7 +2261,7 @@ extern int wimlib_set_image_flags(WIMStruct *wim, int image, * Failed to allocate the memory needed to duplicate the @a name string. */ extern int wimlib_set_image_name(WIMStruct *wim, int image, - const wimlib_utf8char *name); + const wimlib_tchar *name); /** * Set the functions that wimlib uses to allocate and free memory. @@ -2126,8 +2354,10 @@ wimlib_set_print_errors(bool show_messages); * compressed resources re-compressed. */ extern int -wimlib_split(WIMStruct *wim, const wimlib_mbchar *swm_name, - size_t part_size, int write_flags, +wimlib_split(WIMStruct *wim, + const wimlib_tchar *swm_name, + size_t part_size, + int write_flags, wimlib_progress_func_t progress_func); /** @@ -2188,7 +2418,8 @@ wimlib_split(WIMStruct *wim, const wimlib_mbchar *swm_name, * been made to files in the staging directory. */ extern int -wimlib_unmount_image(const wimlib_mbchar *dir, int unmount_flags, +wimlib_unmount_image(const wimlib_tchar *dir, + int unmount_flags, wimlib_progress_func_t progress_func); /** @@ -2260,8 +2491,26 @@ wimlib_unmount_image(const wimlib_mbchar *dir, int unmount_flags, * path. */ extern int -wimlib_write(WIMStruct *wim, const wimlib_mbchar *path, int image, - int write_flags, unsigned num_threads, +wimlib_write(WIMStruct *wim, + const wimlib_tchar *path, + int image, + int write_flags, + 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 */