typedef struct WIMStruct WIMStruct;
#endif
-/**
- * Specifies the way in which identical files are linked when extracting
- * image(s) from the WIM.
- */
-enum wim_link_type {
-/** Hard link identical files when extracting files from the WIM. */
- WIM_LINK_TYPE_HARD = 0,
-/** Symbolic link identical files when extracting files from the WIM. */
- WIM_LINK_TYPE_SYMBOLIC = 1,
-/** Do not create links when extracting identical files from the WIM (default).
- * */
- WIM_LINK_TYPE_NONE = 2,
-};
-
/**
* Specifies the compression type of a WIM file.
*/
};
/** Mount the WIM read-write. */
-#define WIMLIB_MOUNT_FLAG_READWRITE 0x1
+#define WIMLIB_MOUNT_FLAG_READWRITE 0x00000001
/** For debugging only. (This passes the @c -d flag to @c fuse_main()).*/
-#define WIMLIB_MOUNT_FLAG_DEBUG 0x2
+#define WIMLIB_MOUNT_FLAG_DEBUG 0x00000002
+
+/** Do not allow accessing alternate data streams. */
+#define WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_NONE 0x00000010
+
+/** Access alternate data streams through extended file attributes. This is the
+ * default mode. */
+#define WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_XATTR 0x00000020
+
+/** Access alternate data streams by specifying the file name, a colon, then the
+ * alternate file stream name. */
+#define WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_WINDOWS 0x00000040
/** Include an integrity table in the new WIM being written during the unmount.
* Ignored for read-only mounts. */
-#define WIMLIB_UNMOUNT_FLAG_CHECK_INTEGRITY 0x1
+#define WIMLIB_UNMOUNT_FLAG_CHECK_INTEGRITY 0x00000001
/** Unless this flag is given, changes to a mounted WIM are discarded. Ignored
* for read-only mounts. */
-#define WIMLIB_UNMOUNT_FLAG_COMMIT 0x2
+#define WIMLIB_UNMOUNT_FLAG_COMMIT 0x00000002
/** Include an integrity table in the new WIM file. */
-#define WIMLIB_WRITE_FLAG_CHECK_INTEGRITY 0x1
+#define WIMLIB_WRITE_FLAG_CHECK_INTEGRITY 0x00000001
/** Print progress information when writing the integrity table. */
-#define WIMLIB_WRITE_FLAG_SHOW_PROGRESS 0x2
+#define WIMLIB_WRITE_FLAG_SHOW_PROGRESS 0x00000002
+
+/** Print file paths as we write then */
+#define WIMLIB_WRITE_FLAG_VERBOSE 0x00000004
/** Mark the image being added as the bootable image of the WIM. */
-#define WIMLIB_ADD_IMAGE_FLAG_BOOT 0x1
+#define WIMLIB_ADD_IMAGE_FLAG_BOOT 0x00000001
+
+/** Print the name of each file or directory as it is scanned to be included in
+ * the WIM image. */
+#define WIMLIB_ADD_IMAGE_FLAG_VERBOSE 0x00000002
+
+/** Follow symlinks; archive and dump the files they point to. */
+#define WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE 0x00000004
/** See documentation for wimlib_export_image(). */
-#define WIMLIB_EXPORT_FLAG_BOOT 0x1
+#define WIMLIB_EXPORT_FLAG_BOOT 0x00000001
/** Verify the integrity of the WIM if an integrity table is present. */
-#define WIMLIB_OPEN_FLAG_CHECK_INTEGRITY 0x1
+#define WIMLIB_OPEN_FLAG_CHECK_INTEGRITY 0x00000001
/** Print progress information when verifying integrity table. */
-#define WIMLIB_OPEN_FLAG_SHOW_PROGRESS 0x2
+#define WIMLIB_OPEN_FLAG_SHOW_PROGRESS 0x00000002
/** If this flag is not given, an error is issued if the WIM is part of a split
* WIM. */
-#define WIMLIB_OPEN_FLAG_SPLIT_OK 0x4
+#define WIMLIB_OPEN_FLAG_SPLIT_OK 0x00000004
+
+
+/** When identical files are extracted from the WIM, always hard link them
+ * together. */
+#define WIMLIB_EXTRACT_FLAG_HARDLINK 0x00000001
+
+/** When identical files are extracted from the WIM, always symlink them
+ * together. */
+#define WIMLIB_EXTRACT_FLAG_SYMLINK 0x00000002
+
+/** Print the name of each file as it is extracted from the WIM image. */
+#define WIMLIB_EXTRACT_FLAG_VERBOSE 0x00000008
/**
* Possible values of the error code returned by many functions in wimlib.
WIMLIB_ERR_INVALID_HEADER_SIZE,
WIMLIB_ERR_INVALID_IMAGE,
WIMLIB_ERR_INVALID_INTEGRITY_TABLE,
+ WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY,
WIMLIB_ERR_INVALID_PARAM,
+ WIMLIB_ERR_INVALID_RESOURCE_HASH,
WIMLIB_ERR_INVALID_RESOURCE_SIZE,
WIMLIB_ERR_INVALID_SECURITY_DATA,
WIMLIB_ERR_LINK,
WIMLIB_ERR_NOMEM,
WIMLIB_ERR_NOTDIR,
WIMLIB_ERR_NOT_A_WIM_FILE,
+ WIMLIB_ERR_NOT_ROOT,
WIMLIB_ERR_NO_FILENAME,
+ WIMLIB_ERR_NTFS_3G,
WIMLIB_ERR_OPEN,
WIMLIB_ERR_OPENDIR,
+ WIMLIB_ERR_READLINK,
WIMLIB_ERR_READ,
WIMLIB_ERR_RENAME,
+ WIMLIB_ERR_SPECIAL_FILE,
WIMLIB_ERR_SPLIT_INVALID,
WIMLIB_ERR_SPLIT_UNSUPPORTED,
WIMLIB_ERR_STAT,
const char *name, const char *description,
const char *flags_element, int flags);
+extern int wimlib_apply_image_to_ntfs_volume(WIMStruct *w, int image,
+ const char *device, int flags);
+
/**
* Creates a WIMStruct for a new WIM file.
*
* @retval ::WIMLIB_ERR_WRITE
* Failed to write a file being extracted.
*/
-extern int wimlib_extract_image(WIMStruct *wim, int image);
+extern int wimlib_extract_image(WIMStruct *wim, int image,
+ const char *output_dir, int flags);
/**
* Extracts the XML data for a WIM file to a file stream. Every WIM file
*/
extern int wimlib_set_image_name(WIMStruct *wim, int image, const char *name);
-/**
- * Sets the link type to use when extracting files from a WIM. This applies
- * when extracting one image as well as when extracting all images. Cross-image
- * links may save a lot of space because it is common for files to be referenced
- * multiple times in WIM files. By default, the link type used for extraction
- * is ::WIM_LINK_TYPE_NONE, meaning that links are not created.
- *
- * @param wim
- * Pointer to the ::WIMStruct for a WIM file
- * @param link_type
- * ::WIM_LINK_TYPE_NONE, ::WIM_LINK_TYPE_SYMBOLIC, or ::WIM_LINK_TYPE_HARD.
- *
- * @return 0 on success; nonzero on error.
- * @retval ::WIMLIB_ERR_INVALID_PARAM
- * @a link_type was not ::WIM_LINK_TYPE_NONE, ::WIM_LINK_TYPE_SYMBOLIC,
- * or ::WIM_LINK_TYPE_HARD.
- */
-extern int wimlib_set_link_type(WIMStruct *wim, int link_type);
-
/**
* Set the functions that wimlib uses to allocate and free memory.
*
*/
extern int wimlib_set_print_errors(bool show_messages);
-/**
- * Sets whether wimlib is to be verbose when extracting files from a WIM or when
- * creating an image from a directory (i.e. whether it will print all affected
- * files or not.) This is a per-WIM parameter.
- *
- * @param wim
- * Pointer to the ::WIMStruct for the WIM file.
- * @param verbose
- * Whether wimlib is to be verbose when extracting files from @a wim using
- * wimlib_extract_image() or when adding an image to @a wim using
- * wimlib_add_image().
- *
- * @return This function has no return value.
- */
-extern void wimlib_set_verbose(WIMStruct *wim, bool verbose);
-
-/**
- * Sets and creates the directory to which files are to be extracted when
- * extracting files from the WIM.
- *
- * @param wim
- * Pointer to the ::WIMStruct for the WIM file.
- * @param dir
- * The name of the directory to extract files to.
- *
- * @return 0 on success; nonzero on error.
- * @retval ::WIMLIB_ERR_INVALID_PARAM
- * @a dir was @c NULL.
- * @retval ::WIMLIB_ERR_MKDIR
- * @a dir does not already exist and it could not created.
- * @retval ::WIMLIB_ERR_NOMEM
- * Failed to allocate the memory needed to duplicate the @a dir string.
- */
-extern int wimlib_set_output_dir(WIMStruct *wim, const char *dir);
-
/**
* Splits a WIM into multiple parts.
*