]> wimlib.net Git - wimlib/blobdiff - src/wimlib.h
wimlib_apply_image_to_ntfs_volume() API function
[wimlib] / src / wimlib.h
index 1bc239702f4b251675043352e0c35eebab4edc9c..ba787c32539d1c911f8ed8feefdea9ee7a1de4d4 100644 (file)
@@ -2,23 +2,25 @@
  * wimlib.h
  *
  * External header for wimlib.
- *
+ */
+
+/* 
  * Copyright (C) 2012 Eric Biggers
  *
- * wimlib - Library for working with WIM files 
+ * This file is part of wimlib, a library for working with WIM files.
  *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option) any
- * later version.
+ * wimlib is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
  *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * wimlib is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
  *
- * You should have received a copy of the GNU Lesser General Public License along
- * with this library; if not, write to the Free Software Foundation, Inc., 59
- * Temple Place, Suite 330, Boston, MA 02111-1307 USA 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wimlib; if not, see http://www.gnu.org/licenses/.
  */
 
 /** \mainpage
  *
  * While wimlib supports the main features of WIM files, wimlib currently has
  * the following limitations:
- * - wimlib does not support "security data", which describes the access rights
- *   of the files in the WIM.  This data is very Windows-specific, and it would
- *   be difficult to do anything with it.  Microsoft's software can still read a
- *   WIM without security data, including a boot.wim for Windows PE, but <b>do
- *   not expect to be able to use wimlib to image a Windows installation and
- *   preserve file attributes</b>.
- * - There is no way to create split WIMs.
+ * - wimlib does not support modifying or creating "security data", which
+ *   describes the access rights of the files in the WIM.  This data is very
+ *   Windows-specific, and it would be difficult to do anything with it.
+ *   Microsoft's software can still read a WIM without security data, including
+ *   a boot.wim for Windows PE, but <b>do not expect to be able to use wimlib to
+ *   image a Windows installation and preserve file attributes</b>.  However, by
+ *   default, wimlib will preserve security data for existing WIMs.
+ * - There is no way to directly extract or mount split WIMs.
  * - There is not yet any code to verify that there are no collisions between
  *   different files that happen to have the same SHA1 message digest.
  *   This is extremely unlikely, but could result in something bad such as a
  *   file going missing.
- * - Alternate stream entries for directory entries are ignored.  I'm not sure
- *   if these are ever used for anything important.
+ * - Alternate stream entries for directory entries are ignored.
  * - Different versions of the WIM file format, if they even exist, are
  *   unsupported.  Let me know if you notice WIM files with a different version.
  * - Chunk sizes other than 32768 are unsupported (except for uncompressed WIMs,
  * split up LZX compressed blocks, which is not yet implemented in wimlib.
  *
  * wimlib is experimental and likely contains bugs; use Microsoft's @a
- * imagex.exe if you want to make sure your WIM files are made correctly.
+ * imagex.exe if you want to make sure your WIM files are made "correctly".
  *
  * \section legal License
  *
@@ -232,40 +234,73 @@ enum wim_compression_type {
 };
 
 /** 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
 
 /** 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
+
+/** Apply NTFS-specific information to the captured WIM image.  This flag can
+ * only be specified if the directory being captured is on a NTFS filesystem
+ * mounted with NTFS-3g, and wimlib was compiled with support for NTFS-3g  */
+#define WIMLIB_ADD_IMAGE_FLAG_NTFS             0x00000004
+
+/** Follow symlinks; archive and dump the files they point to. */
+#define WIMLIB_ADD_IMAGE_FLAG_DEREFERENCE      0x00000008
 
 /** 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, hard link them together. */
+#define WIMLIB_EXTRACT_FLAG_HARDLINK           0x00000001
+
+/** When identical files are extracted from the WIM, 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.
@@ -292,17 +327,22 @@ enum wimlib_error_code {
        WIMLIB_ERR_INVALID_INTEGRITY_TABLE,
        WIMLIB_ERR_INVALID_PARAM,
        WIMLIB_ERR_INVALID_RESOURCE_SIZE,
+       WIMLIB_ERR_INVALID_SECURITY_DATA,
        WIMLIB_ERR_LINK,
        WIMLIB_ERR_MKDIR,
        WIMLIB_ERR_MQUEUE,
        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,
@@ -354,7 +394,10 @@ enum wimlib_error_code {
  *     marked as bootable to the one being added. Otherwise, leave the boot
  *     index unchanged.
  *
- * @return 0 on success; nonzero on error.
+ * @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
+ * was called.
+ *
  * @retval ::WIMLIB_ERR_IMAGE_NAME_COLLISION 
  *     There is already an image named @a name in @a w.
  * @retval ::WIMLIB_ERR_INVALID_PARAM 
@@ -377,6 +420,9 @@ extern int wimlib_add_image(WIMStruct *wim, const char *dir,
                            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.
  *
@@ -410,7 +456,8 @@ extern int wimlib_create_new_wim(int ctype, WIMStruct **wim_ret);
  * @param image
  *     The number of the image to delete, or ::WIM_ALL_IMAGES to delete all
  *     images.
- * @return 0 on success; nonzero on error.
+ * @return 0 on success; nonzero on error.  On error, @a wim is left in an
+ * indeterminate state and should be freed with wimlib_free().
  * @retval ::WIMLIB_ERR_DECOMPRESSION
  *     Could not decompress the metadata resource for @a image.
  * @retval ::WIMLIB_ERR_INVALID_DENTRY
@@ -458,7 +505,8 @@ extern int wimlib_delete_image(WIMStruct *wim, int image);
  *     currently marked as bootable in @a src_wim; if that is the case, then
  *     that image is marked as bootable in the destination WIM.
  *
- * @return 0 on success; nonzero on error.
+ * @return 0 on success; nonzero on error.  On error, @dest_wim is left in an
+ * indeterminate state and should be freed with wimlib_free().
  * @retval ::WIMLIB_ERR_DECOMPRESSION
  *     Could not decompress the metadata resource for @a src_image
  *     in @a src_wim
@@ -484,8 +532,8 @@ extern int wimlib_delete_image(WIMStruct *wim, int image);
  *     Could not read the metadata resource for @a src_image from @a src_wim.
  */
 extern int wimlib_export_image(WIMStruct *src_wim, int src_image, 
-                       WIMStruct *dest_wim, const char *dest_name, 
-                       const char *dest_description, int flags);
+                              WIMStruct *dest_wim, const char *dest_name, 
+                              const char *dest_description, int flags);
 
 /**
  * Extracts an image, or all images, from a WIM file.
@@ -527,7 +575,8 @@ extern int wimlib_export_image(WIMStruct *src_wim, int src_image,
  * @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
@@ -706,7 +755,7 @@ extern bool wimlib_image_name_in_use(const WIMStruct *wim, const char *name);
  *     the parts of the original WIM, there are duplicate parts, or not all the
  *     parts have the same GUID and compression type.
  * @retval ::WIMLIB_ERR_WRITE
- *     An error occurred when trying to write data to to the new WIM at @a output_path.
+ *     An error occurred when trying to write data to the new WIM at @a output_path.
  *
  * Note that this function merely copies the resources, so it will not check to
  * see if the resources, including the metadata resource, are valid or not.
@@ -1171,39 +1220,32 @@ int wimlib_set_memory_allocator(void *(*malloc_func)(size_t),
 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().
+ * Splits a WIM into multiple parts.
+ *
+ * @param wimfile
+ *     Name of the WIM file to split.  It must be a standalone, one-part WIM.
+ * @param swm_name
+ *     Name of the SWM file to create.  This will be the name of the first
+ *     part.  The other parts will have the same name with 2, 3, 4, ..., etc.
+ *     appended.
+ * @param part_size
+ *     The maximum size per part.  It is not guaranteed that this will really
+ *     be the maximum size per part, because some file resources in the WIM may
+ *     be larger than this size, and the WIM file format provides no way to
+ *     split up file resources among multiple WIMs.
+ * @param flags
+ *     Bitwise OR of ::WIMLIB_OPEN_FLAG_CHECK_INTEGRITY and/or
+ *     ::WIMLIB_OPEN_FLAG_SHOW_PROGRESS.
  *
- * @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.
+ * @return 0 on success; nonzero on error.  This function may return any value
+ * returned by wimlib_open_wim() as well as the following error codes:
  *
- * @param wim
- *     Pointer to the ::WIMStruct for the WIM file.
- * @param dir
- *     The name of the directory to extract files to.
+ * @retval ::WIMLIB_ERR_WRITE
+ *     An error occurred when trying to write data to one of the split WIMs.
  *
- * @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);
+extern int wimlib_split(const char *wimfile, const char *swm_name, 
+                       size_t part_size, int flags);
 
 /**
  * Unmounts a WIM image that was mounted using wimlib_mount().