X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=08d74b25c5cc2a0b95361eb15455f5a14c112465;hp=16f3ecb4d2476915a4e0b3c3f725b56b5150f165;hb=3f9b53a4a214a254bb27ed30994faf2a0fd12375;hpb=232c381f9f3ab814258aa8e2380f537498a50905 diff --git a/src/wimlib.h b/src/wimlib.h index 16f3ecb4..08d74b25 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.2. 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,23 @@ 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 + /****************************** * WIMLIB_EXPORT_FLAG_* * ******************************/ @@ -669,6 +730,17 @@ 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 + /****************************** * WIMLIB_MOUNT_FLAG_* * ******************************/ @@ -756,6 +828,68 @@ struct wimlib_capture_source { * deleting an image in this way. */ #define WIMLIB_WRITE_FLAG_SOFT_DELETE 0x00000010 + +#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. * @@ -787,14 +921,16 @@ 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_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,8 +942,8 @@ 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_RESOURCE_ORDER, @@ -816,13 +952,11 @@ enum wimlib_error_code { 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_WRITE, WIMLIB_ERR_XML, - WIMLIB_ERR_INVALID_OVERLAY, - WIMLIB_ERR_INVALID_MULTIBYTE_STRING, - WIMLIB_ERR_UNICODE_STRING_NOT_REPRESENTABLE, }; @@ -859,12 +993,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 +1047,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 +1080,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 +1264,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 +1395,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 +1469,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 +1482,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 +1501,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 +1523,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,12 +1559,17 @@ 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. * - * This function always returns 0. + * 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. + * + * This function currently always returns 0, but it may return other error codes + * in future releases. */ extern int wimlib_global_init(); @@ -1474,7 +1610,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 +1650,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 +1806,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 +1893,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. @@ -1942,7 +2133,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 +2176,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 +2199,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 +2224,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 +2317,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 +2381,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 +2454,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 */