X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fwimlib.h;h=0b46a8cc0ce216186a744ca083f2348b521b2217;hp=d1ee1221a3a3790b85fadb9d4920e83ee94a6b76;hb=63b76b34c79107cba091d1ea62e304d2666ec86d;hpb=8eaff5673d8e133e72e20cf4409ab4c901831424 diff --git a/src/wimlib.h b/src/wimlib.h index d1ee1221..0b46a8cc 100644 --- a/src/wimlib.h +++ b/src/wimlib.h @@ -9,7 +9,7 @@ */ /* - * Copyright (C) 2012 Eric Biggers + * Copyright (C) 2012, 2013 Eric Biggers * * This file is part of wimlib, a library for working with WIM files. * @@ -31,9 +31,11 @@ * * \section intro Introduction * - * This is the documentation for the library interface of wimlib 1.2.6. If you + * This is the documentation for the library interface of wimlib 1.2.7. If you * have installed wimlib and want to know how to use the @c imagex program, - * please see the man pages instead. + * 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 @@ -228,7 +230,7 @@ #define WIMLIB_MINOR_VERSION 2 /** Patch version of the library (for example, the 5 in 1.2.5). */ -#define WIMLIB_PATCH_VERSION 6 +#define WIMLIB_PATCH_VERSION 7 /** * Opaque structure that represents a WIM file. This is an in-memory structure @@ -414,6 +416,11 @@ union wimlib_progress_info { /** True iff @a cur_path is being excluded from the image * capture due to the capture configuration file. */ bool excluded; + + /** Target path in the WIM. Only valid on messages + * ::WIMLIB_PROGRESS_MSG_SCAN_BEGIN and + * ::WIMLIB_PROGRESS_MSG_SCAN_END. */ + const char *wim_target_path; } scan; /** Valid on messages ::WIMLIB_PROGRESS_MSG_EXTRACT_IMAGE_BEGIN, @@ -552,6 +559,22 @@ union wimlib_progress_info { typedef int (*wimlib_progress_func_t)(enum wimlib_progress_msg msg_type, const union wimlib_progress_info *info); +/** An array of these structures is passed to wimlib_add_image_multisource() to + * specify the sources from which to create a WIM image. */ +struct wimlib_capture_source { + /** Absolute or relative path to a file or directory on the external + * filesystem to be included in the WIM image. */ + char *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. */ + char *wim_target_path; + + /** Reserved; set to 0. */ + long reserved; +}; + /***************************** * WIMLIB_ADD_IMAGE_FLAG_* * @@ -769,6 +792,7 @@ enum wimlib_error_code { WIMLIB_ERR_UNSUPPORTED, WIMLIB_ERR_WRITE, WIMLIB_ERR_XML, + WIMLIB_ERR_INVALID_OVERLAY, }; @@ -809,8 +833,8 @@ enum wimlib_error_code { * NULL, a default string is used. Please see the manual page for * imagex capture for more information. * @param config_len - * Length of the string @a config in bytes. Ignored if @a config is @c - * NULL. + * Length of the string @a config in bytes, not including an optional + * null-terminator. Ignored if @a config is @c NULL. * @param add_image_flags * Bitwise OR of flags prefixed with WIMLIB_ADD_IMAGE_FLAG. * @param progress_func @@ -866,6 +890,37 @@ extern int wimlib_add_image(WIMStruct *wim, const char *source, 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. + * + * 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 + * save pointers to the strings in these structures if you need to free them + * later, and/or save copies if needed. + * + * In addition to the error codes that wimlib_add_image() can return, + * wimlib_add_image_multisource() can return ::WIMLIB_ERR_INVALID_OVERLAY + * when trying to overlay a non-directory on a directory or when otherwise + * trying to overlay multiple conflicting files to the same location in the WIM + * image. It will also return ::WIMLIB_ERR_INVALID_PARAM if + * ::WIMLIB_ADD_IMAGE_FLAG_NTFS was specified in @a add_image_flags but there + * was not exactly one capture source with the target being the root directory. + * (In this respect, there is no advantage to using + * wimlib_add_image_multisource() instead of wimlib_add_image() when requesting + * NTFS mode.) */ +extern int wimlib_add_image_multisource(WIMStruct *w, + struct wimlib_capture_source *sources, + size_t num_sources, + const char *name, + const char *config_str, + size_t config_len, + int add_image_flags, + wimlib_progress_func_t progress_func); + /** * Creates a ::WIMStruct for a new WIM file. * @@ -1414,7 +1469,7 @@ extern bool wimlib_image_name_in_use(const WIMStruct *wim, const char *name); * Note: wimlib_export_image() can provide similar functionality to * wimlib_join(), since it is possible to export all images from a split WIM. */ -extern int wimlib_join(const char **swms, unsigned num_swms, +extern int wimlib_join(const char * const *swms, unsigned num_swms, const char *output_path, int swm_open_flags, int wim_write_flags, wimlib_progress_func_t progress_func);