]> wimlib.net Git - wimlib/blobdiff - src/wimlib.h
Fix wimlib_mount() documentation
[wimlib] / src / wimlib.h
index 1957f6bad090bd7fbbd81bb39f3c9409ab3b9ae4..a547d3a824e1588a3e4b450e663450c8d1926c5f 100644 (file)
  *
  * \section intro Introduction
  *
+ * This is the documentation for the library interface of wimlib 1.2.0.  If you
+ * have installed wimlib and want to know how to use the @c imagex program,
+ * please see the man pages instead.
+ *
  * 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
  * imagex.exe utility on Windows, but this library provides a free
 #include <stdbool.h>
 #include <inttypes.h>
 
+#define WIMLIB_MAJOR_VERSION 1
+#define WIMLIB_MINOR_VERSION 2
+#define WIMLIB_PATCH_VERSION 0
+
 /**
  * Opaque structure that represents a WIM file.  This is an in-memory structure
  * and need not correspond to a specific on-disk file.  However, a ::WIMStruct
@@ -293,17 +301,17 @@ enum wimlib_progress_msg {
         * ::wimlib_progress_info.scan. */
        WIMLIB_PROGRESS_MSG_SCAN_END,
 
-       /** 
+       /**
         * File resources are currently being written to the WIM.
         * @a info will point to ::wimlib_progress_info.write_streams. */
        WIMLIB_PROGRESS_MSG_WRITE_STREAMS,
 
-       /** 
+       /**
         * The metadata resource for each image is about to be written to the
         * WIM. @a info will not be valid. */
        WIMLIB_PROGRESS_MSG_WRITE_METADATA_BEGIN,
 
-       /** 
+       /**
         * The metadata resource for each image has successfully been writen to
         * the WIM.  @a info will not be valid. */
        WIMLIB_PROGRESS_MSG_WRITE_METADATA_END,
@@ -406,6 +414,12 @@ union wimlib_progress_info {
                /** Number of the image being extracted (1-based). */
                int image;
 
+               /** Flags passed to to wimlib_extract_image() */
+               int extract_flags;
+
+               /** Full path to the WIM file being extracted. */
+               const char *wimfile_name;
+
                /** Name of the image being extracted. */
                const char *image_name;
 
@@ -530,6 +544,7 @@ union wimlib_progress_info {
 typedef int (*wimlib_progress_func_t)(enum wimlib_progress_msg msg_type,
                                      const union wimlib_progress_info *info);
 
+
 /*****************************
  * WIMLIB_ADD_IMAGE_FLAG_*   *
  *****************************/
@@ -662,6 +677,7 @@ typedef int (*wimlib_progress_func_t)(enum wimlib_progress_msg msg_type,
  */
 enum wimlib_error_code {
        WIMLIB_ERR_SUCCESS = 0,
+       WIMLIB_ERR_ALREADY_LOCKED,
        WIMLIB_ERR_COMPRESSED_LOOKUP_TABLE,
        WIMLIB_ERR_DECOMPRESSION,
        WIMLIB_ERR_DELETE_STAGING_DIR,
@@ -1335,27 +1351,21 @@ extern int wimlib_join(const char **swms, unsigned num_swms,
 /**
  * Mounts an image in a WIM file on a directory read-only or read-write.
  *
- * A daemon will be forked to service the filesystem, unless
- * ::WIMLIB_MOUNT_FLAG_DEBUG is specified in @a mount_flags.  In other words,
- * this function returns @b before the image is unmounted, and filesystem
- * requests are handled by a new thread.  This also means that no functions may
- * be safely called on @a wim after wimlib_mount_image() has been called on any
- * images from it.  (@a wim will be freed by the filesystem thread after the
- * filesystem is unmounted.)
+ * The calling thread will be daemonized service the filesystem, and this
+ * function will not return until the image is unmounted, unless an error occurs
+ * before the filesystem is successfully mounted.
  *
  * If the mount is read-write (::WIMLIB_MOUNT_FLAG_READWRITE specified),
- * modifications to the WIM are staged in a temporary directory created in the
- * process's working directory when this function is called.
+ * modifications to the WIM are staged in a temporary directory.
  *
  * It is safe to mount multiple images from the same WIM file read-only at the
- * same time (but different ::WIMStruct's should be used).  However, it is @b
- * not safe to mount multiple images from the same WIM file read-write at the
- * same time.
+ * same time, but only if different ::WIMStruct's are used.  It is @b not safe
+ * to mount multiple images from the same WIM file read-write at the same time.
  *
  * wimlib_mount_image() cannot be used on an image that was exported with
  * wimlib_export_image() while the dentry trees for both images are still in
  * memory.  In addition, wimlib_mount_image() may not be used to mount an image
- * that has just been added with wimlib_add_image(), or unless the WIM has been
+ * that has just been added with wimlib_add_image(), unless the WIM has been
  * written and read into a new ::WIMStruct.
  *
  * @param wim
@@ -1389,10 +1399,17 @@ extern int wimlib_join(const char **swms, unsigned num_swms,
  *     This number should be one less than the total number of parts in the
  *     split WIM.  Set to 0 if the WIM is a standalone WIM.
  * @param staging_dir
- *     Currently ignored, but may provide a way to specify the staging
- *     directory in the future.  Set to @c NULL.
+ *     If non-NULL, the name of a directory in which the staging directory will
+ *     be created.  Ignored if ::WIMLIB_MOUNT_FLAG_READWRITE is not specified
+ *     in @a mount_flags.  If left @c NULL, the staging directory is created in
+ *     the same directory as the WIM file that @a wim was originally read from.
  *
  * @return 0 on success; nonzero on error.
+ * @retval ::WIMLIB_ERR_ALREADY_LOCKED
+ *     A read-write mount was requested, but an an exclusive advisory lock on
+ *     the on-disk WIM file could not be acquired because another thread or
+ *     process has mounted an image from the WIM read-write or is currently
+ *     modifying the WIM in-place.
  * @retval ::WIMLIB_ERR_DECOMPRESSION
  *     Could not decompress the metadata resource for @a image in @a wim.
  * @retval ::WIMLIB_ERR_FUSE
@@ -1570,6 +1587,11 @@ extern int wimlib_open_wim(const char *wim_file, int open_flags,
  *
  * @return 0 on success; nonzero on error.  This function may return any value
  * returned by wimlib_write() as well as the following error codes:
+ * @retval ::WIMLIB_ERR_ALREADY_LOCKED
+ *     The WIM was going to be modifien in-place (with no temporary file), but
+ *     an exclusive advisory lock on the on-disk WIM file could not be acquired
+ *     because another thread or process has mounted an image from the WIM
+ *     read-write or is currently modifying the WIM in-place.
  * @retval ::WIMLIB_ERR_NO_FILENAME
  *     @a wim corresponds to a WIM created with wimlib_create_new_wim() rather
  *     than a WIM read with wimlib_open_wim().
@@ -1739,8 +1761,8 @@ extern void wimlib_print_wim_information(const WIMStruct *wim);
  *     image, indexed starting at 1, is returned.  If the keyword "all" or "*"
  *     was specified, ::WIMLIB_ALL_IMAGES is returned.  Otherwise,
  *     ::WIMLIB_NO_IMAGE is returned.  If @a image_name_or_num was @c NULL or
- *     the empty string, ::WIM_NO_IMAGE is returned, even if one or more images
- *     in @a wim has no name.
+ *     the empty string, ::WIMLIB_NO_IMAGE is returned, even if one or more
+ *     images in @a wim has no name.
  */
 extern int wimlib_resolve_image(WIMStruct *wim, const char *image_name_or_num);