uint64_t num_dirs_scanned;
/** The number of non-directories scanned so far, not counting
- * excluded/unsupported files. If a file has multiple names
- * (hard links), it is only counted one time. */
+ * excluded/unsupported files. */
uint64_t num_nondirs_scanned;
/** The number of bytes of file data detected so far, not
- * counting excluded/unsupported files. If a file has multiple
- * names (hard links), its data is counted only one time. */
+ * counting excluded/unsupported files. */
uint64_t num_bytes_scanned;
} scan;
*/
#define WIMLIB_ADD_FLAG_TEST_FILE_EXCLUSION 0x00004000
-/* Note: the WIMLIB_ADD_IMAGE_FLAG names are retained for source compatibility.
- * Use the WIMLIB_ADD_FLAG names in new code. */
-#define WIMLIB_ADD_IMAGE_FLAG_NTFS WIMLIB_ADD_FLAG_NTFS
-#define WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE WIMLIB_ADD_FLAG_DEREFERENCE
-#define WIMLIB_ADD_IMAGE_FLAG_VERBOSE WIMLIB_ADD_FLAG_VERBOSE
-#define WIMLIB_ADD_IMAGE_FLAG_BOOT WIMLIB_ADD_FLAG_BOOT
-#define WIMLIB_ADD_IMAGE_FLAG_UNIX_DATA WIMLIB_ADD_FLAG_UNIX_DATA
-#define WIMLIB_ADD_IMAGE_FLAG_NO_ACLS WIMLIB_ADD_FLAG_NO_ACLS
-#define WIMLIB_ADD_IMAGE_FLAG_STRICT_ACLS WIMLIB_ADD_FLAG_STRICT_ACLS
-#define WIMLIB_ADD_IMAGE_FLAG_EXCLUDE_VERBOSE WIMLIB_ADD_FLAG_EXCLUDE_VERBOSE
-#define WIMLIB_ADD_IMAGE_FLAG_RPFIX WIMLIB_ADD_FLAG_RPFIX
-#define WIMLIB_ADD_IMAGE_FLAG_NORPFIX WIMLIB_ADD_FLAG_NORPFIX
-#define WIMLIB_ADD_IMAGE_FLAG_NO_UNSUPPORTED_EXCLUDE \
- WIMLIB_ADD_FLAG_NO_UNSUPPORTED_EXCLUDE
-#define WIMLIB_ADD_IMAGE_FLAG_WINCONFIG WIMLIB_ADD_FLAG_WINCONFIG
-#define WIMLIB_ADD_IMAGE_FLAG_WIMBOOT WIMLIB_ADD_FLAG_WIMBOOT
-
+/**
+ * EXPERIMENTAL, since wimlib v1.9.0: create a temporary filesystem snapshot of
+ * the source directory and add the files from it. Currently, this option is
+ * only supported on Windows, where it uses the Volume Shadow Copy Service
+ * (VSS). Using this option, you can create a consistent backup of the system
+ * volume of a running Windows system without running into problems with locked
+ * files. For the VSS snapshot to be successfully created, your application
+ * must be run as an Administrator, and it cannot be run in WoW64 mode (i.e. if
+ * Windows is 64-bit, then your application must be 64-bit as well).
+ */
+#define WIMLIB_ADD_FLAG_SNAPSHOT 0x00008000
/** @} */
/** @addtogroup G_modifying_wims
WIMLIB_ERR_IMAGE_HAS_MULTIPLE_REFERENCES = 86,
WIMLIB_ERR_DUPLICATE_EXPORTED_IMAGE = 87,
WIMLIB_ERR_CONCURRENT_MODIFICATION_DETECTED = 88,
+ WIMLIB_ERR_SNAPSHOT_FAILURE = 89,
};
/**
* @ingroup G_wim_information
*
- * Get the description of the specified image.
- *
- * @param wim
- * Pointer to the ::WIMStruct to query. This need not represent a
- * standalone WIM (e.g. it could represent part of a split WIM).
- * @param image
- * The 1-based index of the image for which to query the description.
- *
- * @return
- * The description of the image, or @c NULL if there is no such image, or
- * @c NULL if the specified image has no description. The string may not
- * remain valid after later library calls, so the caller should duplicate
- * it if needed.
+ * Get the description of the specified image. Equivalent to
+ * <tt>wimlib_get_image_property(wim, image, "DESCRIPTION")</tt>.
*/
extern const wimlib_tchar *
wimlib_get_image_description(const WIMStruct *wim, int image);
/**
* @ingroup G_wim_information
*
- * Get the name of the specified image.
- *
- * @param wim
- * Pointer to the ::WIMStruct to query. This need not represent a
- * standalone WIM (e.g. it could represent part of a split WIM).
- * @param image
- * The 1-based index of the image for which to query the name.
- *
- * @return
- * The name of the image, or @c NULL if there is no such image, or an empty
- * string if the image is unnamed. The string may not remain valid after
- * later library calls, so the caller should duplicate it if needed.
+ * Get the name of the specified image. Equivalent to
+ * <tt>wimlib_get_image_property(wim, image, "NAME")</tt>, except that
+ * wimlib_get_image_name() will return an empty string if the image is unnamed
+ * whereas wimlib_get_image_property() may return @c NULL in that case.
*/
extern const wimlib_tchar *
wimlib_get_image_name(const WIMStruct *wim, int image);
* "TOTALBYTES". The name can contain forward slashes to indicate a nested
* XML element; for example, "WINDOWS/VERSION/BUILD" indicates the BUILD
* element nested within the VERSION element nested within the WINDOWS
- * element. Since wimlib v1.8.4, a bracketed number can be used to
+ * element. Since wimlib v1.9.0, a bracketed number can be used to
* indicate one of several identically-named elements; for example,
* "WINDOWS/LANGUAGES/LANGUAGE[2]" indicates the second "LANGUAGE" element
* nested within the "WINDOWS/LANGUAGES" element. Note that element names
/**
* @ingroup G_modifying_wims
*
- * Change the description of a WIM image.
- *
- * @param wim
- * Pointer to the ::WIMStruct for the WIM.
- * @param image
- * The 1-based index of the image for which to change the description.
- * @param description
- * The new description to give the image. It may be @c NULL, which
- * indicates that the image is to be given no description.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- * @p image does not exist in @p wim.
+ * Change the description of a WIM image. Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "DESCRIPTION", description)</tt>.
*/
extern int
wimlib_set_image_descripton(WIMStruct *wim, int image,
* @ingroup G_modifying_wims
*
* Change what is stored in the \<FLAGS\> element in the WIM XML document
- * (usually something like "Core" or "Ultimate")
- *
- * @param wim
- * Pointer to the ::WIMStruct for the WIM.
- * @param image
- * The 1-based index of the image for which to change the flags.
- * @param flags
- * The new \<FLAGS\> element to give the image. It may be @c NULL, which
- * indicates that the image is to be given no \<FLAGS\> element.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- * @p image does not exist in @p wim.
+ * (usually something like "Core" or "Ultimate"). Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "FLAGS", flags)</tt>.
*/
extern int
wimlib_set_image_flags(WIMStruct *wim, int image, const wimlib_tchar *flags);
/**
* @ingroup G_modifying_wims
*
- * Change the name of a WIM image.
- *
- * @param wim
- * Pointer to the ::WIMStruct for the WIM.
- * @param image
- * The 1-based index of the image for which to change the name.
- * @param name
- * New name to give the new image. If @c NULL or empty, the new image is
- * given no name. Otherwise, it must specify a name that does not already
- * exist in @p wim.
- *
- * @return 0 on success; a ::wimlib_error_code value on failure.
- *
- * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
- * The WIM already contains an image with the requested name.
- * @retval ::WIMLIB_ERR_INVALID_IMAGE
- * @p image does not exist in @p wim.
+ * Change the name of a WIM image. Equivalent to
+ * <tt>wimlib_set_image_property(wim, image, "NAME", name)</tt>.
*/
extern int
wimlib_set_image_name(WIMStruct *wim, int image, const wimlib_tchar *name);
*
* @return 0 on success; a ::wimlib_error_code value on failure.
*
+ * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION
+ * The user requested to set the image name (the <tt>NAME</tt> property),
+ * but another image in the WIM already had the requested name.
* @retval ::WIMLIB_ERR_INVALID_IMAGE
* @p image does not exist in @p wim.
* @retval ::WIMLIB_ERR_INVALID_PARAM