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);