X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=df2dffabab4d10c3b250b99a384983ef5892bd51;hp=34f52e7e1d67170c8a0e780a4af638c72fc8afb3;hb=dd5dc12f1e65715541c85d40684f5a2d6fb5e877;hpb=107fbdbce29bf5ae32bfe469a1d4078414381986 diff --git a/src/wimlib.h b/src/wimlib.h index 34f52e7e..df2dffab 100644 --- a/src/wimlib.h +++ b/src/wimlib.h @@ -108,10 +108,9 @@ * that this is for convenience only, and some errors can occur without a * message being printed. * - * wimlib is thread-safe as long as different ::WIMStruct's are used, with the - * following exceptions: wimlib_set_print_errors() and - * wimlib_set_memory_allocator() apply globally, and wimlib_mount() can only be - * used by one ::WIMStruct at a time. + * wimlib is thread-safe as long as different ::WIMStruct's are used, except for + * the fact that wimlib_set_print_errors() and wimlib_set_memory_allocator() + * both apply globally. * * To open an existing WIM, use wimlib_open_wim(). * @@ -263,7 +262,8 @@ enum wim_compression_type { /** Include an integrity table in the new WIM file. */ #define WIMLIB_WRITE_FLAG_CHECK_INTEGRITY 0x00000001 -/** Print progress information when writing the integrity table. */ +/** Print progress information when writing streams and when writing the + * integrity table. */ #define WIMLIB_WRITE_FLAG_SHOW_PROGRESS 0x00000002 /** Print file paths as we write then */ @@ -279,6 +279,9 @@ enum wim_compression_type { /** Follow symlinks; archive and dump the files they point to. */ #define WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE 0x00000004 +/** Show progress information when scanning a directory tree */ +#define WIMLIB_ADD_IMAGE_FLAG_SHOW_PROGRESS 0x00000008 + /** See documentation for wimlib_export_image(). */ #define WIMLIB_EXPORT_FLAG_BOOT 0x00000001 @@ -400,7 +403,9 @@ enum wimlib_error_code { * printed as it is scanned or captured. If * ::WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE is specified, the files or * directories pointed to by symbolic links are archived rather than the - * symbolic links themselves. + * symbolic links themselves. If ::WIMLIB_ADD_IMAGE_FLAG_SHOW_PROGRESS is + * specified, progress information will be printed (distinct from the + * verbose information). * * @return 0 on success; nonzero on error. On error, changes to @a wim are * discarded so that it appears to be in the same state as when this function @@ -909,11 +914,16 @@ extern int wimlib_join(const char **swms, unsigned num_swms, * If the mount is read-write, modifications to the WIM are staged in a staging * directory. * - * wimlib_mount() currently cannot be used with multiple ::WIMStruct's without - * intervening wimlib_unmount()s. + * wimlib_mount() may be called from multiple threads without intervening calls + * to wimlib_unmount(), provided that different ::WIMStruct's are used. (This + * was not the case for versions of this library 1.0.3 and earlier.) * * wimlib_mount() cannot be used on an image that was exported with - * wimlib_export() while the dentry trees for both images are still in memory. + * wimlib_export_image() while the dentry trees for both images are still in + * memory. In addition, wimlib_mount() may not be used to mount an image that + * has just been added with wimlib_add_image() or + * wimlib_add_image_from_ntfs_volume(), unless the WIM has been written and read + * into a new ::WIMStruct. * * @param wim * Pointer to the ::WIMStruct for the WIM file to be mounted. @@ -953,7 +963,8 @@ extern int wimlib_join(const char **swms, unsigned num_swms, * @a image does not specify an existing, single image in @a wim. * @retval ::WIMLIB_ERR_INVALID_PARAM * @a image is shared among multiple ::WIMStruct's as a result of a call to - * wimlib_export(). + * wimlib_export_image(), or @a image has been added with + * wimlib_add_image() or wimlib_add_image_from_ntfs_volume(). * @retval ::WIMLIB_ERR_INVALID_RESOURCE_SIZE * The metadata resource for @a image in @a wim is invalid. * @retval ::WIMLIB_ERR_INVALID_SECURITY_DATA @@ -997,7 +1008,7 @@ extern int wimlib_mount(WIMStruct *wim, int image, const char *dir, int flags, * If ::WIMLIB_OPEN_FLAG_SHOW_PROGRESS is given, progress information will * be shown if the integrity of the WIM is checked. * If ::WIMLIB_OPEN_FLAG_SPLIT_OK is given, no error will be issued if the - * WIM is part of a split WIM; otherwise WIMLIB_ERR_SPLIT_UNSUPPORTED is + * WIM is part of a split WIM; otherwise ::WIMLIB_ERR_SPLIT_UNSUPPORTED is * returned. (This flag may be removed in the future, in which case no * error will be issued when opening a split WIM.) * @@ -1071,9 +1082,11 @@ extern int wimlib_open_wim(const char *wim_file, int flags, * 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 * output file. - * @param flags + * @param write_flags * Bitwise OR of ::WIMLIB_WRITE_FLAG_CHECK_INTEGRITY and/or * ::WIMLIB_WRITE_FLAG_SHOW_PROGRESS. + * @param num_threads + * Number of threads to use for compression (see wimlib_write()). * * @return 0 on success; nonzero on error. This function may return any value * returned by wimlib_write() as well as the following error codes: @@ -1084,7 +1097,8 @@ extern int wimlib_open_wim(const char *wim_file, int flags, * The temporary file that the WIM was written to could not be renamed to * the original filename of @a wim. */ -extern int wimlib_overwrite(WIMStruct *wim, int flags); +extern int wimlib_overwrite(WIMStruct *wim, int write_flags, + unsigned num_threads); /** * Updates the header and XML data of the WIM file, without the need to write @@ -1099,7 +1113,7 @@ extern int wimlib_overwrite(WIMStruct *wim, int flags); * * @param wim * Pointer to the ::WIMStruct for the WIM file to overwrite. - * @param flags + * @param write_flags * Bitwise OR of ::WIMLIB_WRITE_FLAG_CHECK_INTEGRITY and/or * ::WIMLIB_WRITE_FLAG_SHOW_PROGRESS. * @@ -1126,7 +1140,7 @@ extern int wimlib_overwrite(WIMStruct *wim, int flags); * Failed to write the WIM header, the XML data, or the integrity table to * the WIM file associated with @a wim. */ -extern int wimlib_overwrite_xml_and_header(WIMStruct *wim, int flags); +extern int wimlib_overwrite_xml_and_header(WIMStruct *wim, int write_flags); /** * Prints information about one image, or all images, contained in a WIM. @@ -1524,13 +1538,19 @@ extern int wimlib_unmount(const char *dir, int flags); * @param image * The image inside the WIM to write. Use ::WIM_ALL_IMAGES to include all * images. - * @param flags + * @param write_flags * Bitwise OR of ::WIMLIB_WRITE_FLAG_CHECK_INTEGRITY and/or * ::WIMLIB_WRITE_FLAG_SHOW_PROGRESS. If * ::WIMLIB_WRITE_FLAG_CHECK_INTEGRITY is given, an integrity table is * included in the WIM being written. If ::WIMLIB_WRITE_FLAG_SHOW_PROGRESS * is given, the progress of the calculation of the integrity table is * shown. + * @param num_threads + * Number of threads to use for compressing data. Autodetected if set to + * 0. Note: if no data compression needs to be done, no threads will be + * created regardless of this parameter (e.g. if writing an uncompressed + * WIM, or exporting an image from a compressed WIM to another WIM of the + * same compression type). * * @return 0 on success; nonzero on error. * @retval ::WIMLIB_ERR_DECOMPRESSION @@ -1569,7 +1589,8 @@ extern int wimlib_unmount(const char *dir, int flags); * An error occurred when trying to write data to the new WIM file at @a * path. */ -extern int wimlib_write(WIMStruct *wim, const char *path, int image, int flags); +extern int wimlib_write(WIMStruct *wim, const char *path, int image, + int write_flags, unsigned num_threads);