X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=1ccdd3b3e3b737b467437d8f0188a5d1a8893b82;hp=f875afb9bc3f9c4f111c202e15dec81157926c5e;hb=abd1f36d19f9be9ca1efc66ae7a642dd227b1f3c;hpb=14baa6ae892debbaa18dba8119931580efd0e517 diff --git a/src/wimlib.h b/src/wimlib.h index f875afb9..1ccdd3b3 100644 --- a/src/wimlib.h +++ b/src/wimlib.h @@ -31,18 +31,19 @@ * * \section intro Introduction * - * This is the documentation for the library interface of wimlib 1.3.0. If you - * have installed wimlib and want to know how to use the @c 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 https://sourceforge.net/projects/wimlib. * * wimlib is a C library to read, write, and mount archive files in the Windows - * Imaging Format (WIM files). These files are normally created using the @c - * imagex.exe utility on Windows, but this library provides a free - * implementetion of @c imagex for UNIX-based systems and an API to allow other - * programs to read, write, and mount WIM files. wimlib is comparable to - * Microsoft's WIMGAPI, but was designed independently and is not a clone of it. + * Imaging Format (WIM files). These files are normally created using the + * ImageX (@a imagex.exe) utility on Windows, but this library provides a free + * implementation of ImageX for UNIX-based systems (and, since v1.3.0, for + * Windows systems) and an API to allow other programs to read, write, and mount + * WIM files. wimlib is comparable to Microsoft's WIMGAPI, but was designed + * independently and is not a clone of it. * * \section format WIM files * @@ -81,6 +82,10 @@ * Configuration Data. In addition, a Windows installation can be captured (or * backed up) into a WIM file, and then re-applied later. * + * wimlib v1.3.0 and later also supports NTFS capture and apply in the native + * Windows build, which works slightly differently and relies on native Win32 + * API calls rather than libntfs-3g. + * * \section winpe Windows PE * * A major use for this library is to create customized images of Windows PE, the @@ -170,28 +175,42 @@ * the WIM operation(s) to report on the progress of the operation (for example, * how many bytes have been written so far). * - * \section imagex imagex + * \section imagex wimlib-imagex * - * wimlib comes with a command-line interface, the @b imagex program. It is - * documented with man pages. See its source code (@c programs/imagex.c in - * wimlib's source tree) for an example of how to use wimlib in your program. + * wimlib comes with a command-line interface, the @b wimlib-imagex program. It + * is documented with man pages. This program was originally just called @b + * imagex, but has been changed to @b wimlib-imagex to avoid confusion with + * Microsoft's @a imagex.exe (which would otherwise have exactly the same + * filename on Windows). * * \section mkwinpeimg mkwinpeimg * * wimlib also comes with the mkwinpeimg script, which is documented in a * man page. + * + * \section encodings Locales and character encodings + * + * To support Windows as well as UNIX, wimlib's API typically takes and returns + * strings of ::wimlib_tchar, which are in a platform-dependent encoding. + * + * On Windows, each ::wimlib_tchar is 2 bytes and is the same as a "wchar_t", + * and the encoding is UTF-16LE. + * + * On UNIX, each ::wimlib_tchar is 1 byte and is simply a "char", and the +* encoding is the locale-dependent multibyte encoding. I recommend you set your +* locale to a UTF-8 capable locale to avoid any issues. Also, by default, + * wimlib on UNIX will assume the locale is UTF-8 capable unless you call +* wimlib_global_init() after having set your desired locale. * * \section Limitations * * While wimlib supports the main features of WIM files, wimlib currently has * the following limitations: - * - wimlib cannot be used on MS-Windows. * - There is no way to add, remove, modify, or extract specific files in a WIM * without mounting it, other than by adding, removing, or extracting an * entire image. The FUSE mount feature should be used for this purpose. * - Currently, Microsoft's @a image.exe can create slightly smaller WIM files - * than wimlib when using maximum (LZX) compression because it knows how to - * split up LZX compressed blocks, which is not yet implemented in wimlib. + * than wimlib (~2% or 3% smaller) when using maximum (LZX) compression. * - wimlib is experimental and likely contains bugs; use Microsoft's @a * imagex.exe if you want to make sure your WIM files are made "correctly". * - The old WIM format from Vista pre-releases is not supported. @@ -207,12 +226,16 @@ * script for a similar purpose, however. With regards to adding drivers to * Windows PE, you have the option of putting them anywhere in the Windows PE * image, then loading them after boot using @b drvload.exe. + * - Although wimlib 1.3.0 and later can be used on Windows as well as UNIX, the + * Windows build has some limitations compared to the UNIX build. + * (The differences are documented better in the man pages for + * @b wimlib-imagex than here.) * * \section legal License * * The wimlib library, as well as the programs and scripts distributed with it - * (@b imagex and @b mkwinpeimg), is licensed under the GNU General Public - * License version 3 or later. + * (@b wimlib-imagex and @b mkwinpeimg), is licensed under the GNU General + * Public License version 3 or later. */ #ifndef _WIMLIB_H @@ -230,7 +253,7 @@ #define WIMLIB_MINOR_VERSION 3 /** Patch version of the library (for example, the 5 in 1.2.5). */ -#define WIMLIB_PATCH_VERSION 0 +#define WIMLIB_PATCH_VERSION 2 /** * Opaque structure that represents a WIM file. This is an in-memory structure @@ -247,8 +270,12 @@ */ typedef struct WIMStruct WIMStruct; -typedef char wimlib_mbchar; -typedef char wimlib_utf8char; +#ifdef __WIN32__ +typedef wchar_t wimlib_tchar; +#else +/** See \ref encodings */ +typedef char wimlib_tchar; +#endif /** * Specifies the compression type of a WIM file. @@ -409,12 +436,12 @@ union wimlib_progress_info { * ::WIMLIB_PROGRESS_MSG_SCAN_END. */ struct wimlib_progress_info_scan { /** Directory or NTFS volume that is being scanned. */ - const wimlib_mbchar *source; + const wimlib_tchar *source; /** Path to the file or directory that is about to be scanned, * relative to the root of the image capture or the NTFS volume. * */ - const wimlib_mbchar *cur_path; + const wimlib_tchar *cur_path; /** True iff @a cur_path is being excluded from the image * capture due to the capture configuration file. */ @@ -423,7 +450,7 @@ union wimlib_progress_info { /** Target path in the WIM. Only valid on messages * ::WIMLIB_PROGRESS_MSG_SCAN_BEGIN and * ::WIMLIB_PROGRESS_MSG_SCAN_END. */ - const wimlib_mbchar *wim_target_path; + const wimlib_tchar *wim_target_path; } scan; /** Valid on messages ::WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_BEGIN, @@ -439,18 +466,18 @@ union wimlib_progress_info { int extract_flags; /** Full path to the WIM file being extracted. */ - const wimlib_mbchar *wimfile_name; + const wimlib_tchar *wimfile_name; /** Name of the image being extracted. */ - const wimlib_utf8char *image_name; + const wimlib_tchar *image_name; /** Directory or NTFS volume to which the image is being * extracted. */ - const wimlib_mbchar *target; + const wimlib_tchar *target; /** Current dentry being extracted. (Valid only if message is * ::WIMLIB_PROGRESS_MSG_EXTRACT_DENTRY.) */ - const wimlib_mbchar *cur_path; + const wimlib_tchar *cur_path; /** Number of bytes of uncompressed data that will be extracted. * Takes into account hard links (they are not counted for each @@ -472,11 +499,11 @@ union wimlib_progress_info { /** Valid on messages ::WIMLIB_PROGRESS_MSG_RENAME. */ struct wimlib_progress_info_rename { /** Name of the temporary file that the WIM was written to. */ - const wimlib_mbchar *from; + const wimlib_tchar *from; /** Name of the original WIM file to which the temporary file is * being renamed. */ - const wimlib_mbchar *to; + const wimlib_tchar *to; } rename; /** Valid on messages ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY and @@ -504,7 +531,7 @@ union wimlib_progress_info { /** Filename of the WIM (only valid if the message is * ::WIMLIB_PROGRESS_MSG_VERIFY_INTEGRITY). */ - const wimlib_mbchar *filename; + const wimlib_tchar *filename; } integrity; /** Valid on messages ::WIMLIB_PROGRESS_MSG_JOIN_STREAMS. */ @@ -546,7 +573,7 @@ union wimlib_progress_info { /** Name of the split WIM part that is about to be started * (::WIMLIB_PROGRESS_MSG_SPLIT_BEGIN_PART) or has just been * finished (::WIMLIB_PROGRESS_MSG_SPLIT_END_PART). */ - const wimlib_mbchar *part_name; + const wimlib_tchar *part_name; } split; }; @@ -567,12 +594,12 @@ typedef int (*wimlib_progress_func_t)(enum wimlib_progress_msg msg_type, struct wimlib_capture_source { /** Absolute or relative path to a file or directory on the external * filesystem to be included in the WIM image. */ - wimlib_mbchar *fs_source_path; + wimlib_tchar *fs_source_path; /** Destination path in the WIM image. Leading and trailing slashes are * ignored. The empty string or @c NULL means the root directory of the * WIM image. */ - wimlib_mbchar *wim_target_path; + wimlib_tchar *wim_target_path; /** Reserved; set to 0. */ long reserved; @@ -603,11 +630,21 @@ struct wimlib_capture_source { /** Store the UNIX owner, group, and mode. This is done by adding a special * alternate data stream to each regular file, symbolic link, and directory to * contain this information. Please note that this flag is for convenience - * only; Microsoft's version of imagex.exe will not understand this special - * information. This flag cannot be combined with ::WIMLIB_ADD_IMAGE_FLAG_NTFS. - * */ + * only; Microsoft's @a imagex.exe will not understand this special information. + * 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 + /****************************** * WIMLIB_EXPORT_FLAG_* * ******************************/ @@ -644,6 +681,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_* * ******************************/ @@ -731,6 +779,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. * @@ -818,9 +928,9 @@ enum wimlib_error_code { * files are then read on-demand if wimlib_write() or wimlib_overwrite() is * called. * - * See the manual page for the @c imagex program for more information about the - * "normal" capture mode versus the NTFS capture mode (entered by providing the - * flag ::WIMLIB_ADD_IMAGE_FLAG_NTFS). + * See the manual page for the @b wimlib-imagex program for more information + * about the "normal" capture mode versus the NTFS capture mode (entered by + * providing the flag ::WIMLIB_ADD_IMAGE_FLAG_NTFS). * * Note that @b no changes are committed to the underlying WIM file (if * any) until wimlib_write() or wimlib_overwrite() is called. @@ -836,7 +946,7 @@ enum wimlib_error_code { * @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 - * imagex capture for more information. + * 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. @@ -891,18 +1001,20 @@ 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, + const wimlib_tchar *config, + size_t config_len, + int add_image_flags, wimlib_progress_func_t progress_func); /** This function is equivalent to wimlib_add_image() except it allows for * multiple sources to be combined into a single WIM image. This is done by * specifying the @a sources and @a num_sources parameters instead of the @a * source parameter of wimlib_add_image(). The rest of the parameters are the - * same as wimlib_add_image(). See the documentation for imagex capture - * for full details on how this mode works. + * same as wimlib_add_image(). See the documentation for wimlib-imagex + * capture for full details on how this mode works. * * Additional note: @a sources is not a @c const parameter and you cannot * assume that its contents are valid after this function returns. You must @@ -923,8 +1035,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, + const wimlib_tchar *name, + const wimlib_tchar *config_str, size_t config_len, int add_image_flags, wimlib_progress_func_t progress_func); @@ -1108,8 +1220,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, @@ -1119,9 +1231,9 @@ wimlib_export_image(WIMStruct *src_wim, int src_image, * Extracts an image, or all images, from a standalone or split WIM file to a * directory or a NTFS volume. * - * Please see the manual page for the @c imagex program for more information - * about the "normal" extraction mode versus the NTFS extraction mode - * (entered by providing flag ::WIMLIB_EXTRACT_FLAG_NTFS). + * Please see the manual page for the @c wimlib-imagex program for more + * information about the "normal" extraction mode versus the NTFS extraction + * mode (entered by providing flag ::WIMLIB_EXTRACT_FLAG_NTFS). * * Extraction is done with one thread. * @@ -1239,7 +1351,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, @@ -1313,7 +1425,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); /** @@ -1326,7 +1438,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); /** @@ -1345,7 +1457,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); /** @@ -1367,7 +1479,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); @@ -1403,21 +1515,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. Otherwise, calling - * this function is not required. + * threads, then you must call this function serially first. * - * @return 0 on success; nonzero on error. - * @retval ::WIMLIB_ERR_NOMEM - * Could not allocate memory. - * @retval ::WIMLIB_ERR_ICONV_NOT_AVAILABLE - * wimlib was configured @c --without-libntfs-3g at compilation time, and - * at runtime the @c iconv() set of functions did not seem to be available, - * perhaps due to missing files in the C library installation. - * - * If this function is not called or returns nonzero, then it will not be safe - * to use wimlib in multiple threads. Furthermore, a nonzero return value here - * indicates that further calls into wimlib will probably fail when they try to - * repeat the same initializations. + * Since wimlib 1.3.0, you must call this function if the character encoding of + * the current locale is not UTF-8. + * + * 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(); @@ -1458,7 +1566,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. @@ -1498,9 +1606,9 @@ 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); @@ -1604,10 +1712,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. @@ -1688,8 +1799,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. @@ -1926,7 +2039,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. @@ -1969,7 +2082,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 @@ -1992,7 +2105,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. @@ -2017,7 +2130,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. @@ -2110,8 +2223,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); /** @@ -2172,7 +2287,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); /** @@ -2244,8 +2360,11 @@ 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); #endif /* _WIMLIB_H */