+#define WIMFS_MQUEUE_NAME_LEN 32
+
+#define WIMLIB_UNMOUNT_FLAG_SEND_PROGRESS 0x80000000
+
+struct wimfs_unmount_info {
+ unsigned unmount_flags;
+ char mq_name[WIMFS_MQUEUE_NAME_LEN + 1];
+};
+
+struct commit_progress_report {
+ enum wimlib_progress_msg msg;
+ union wimlib_progress_info info;
+};
+
+/* Description of an open file on a mounted WIM image. Actually, this
+ * represents the open state of a particular data stream of an inode, rather
+ * than the inode itself. (An inode might have multiple named data streams in
+ * addition to the default, unnamed data stream.) At a given time, an inode in
+ * the WIM image might have multiple file descriptors open to it, each to any
+ * one of its data streams. */
+struct wimfs_fd {
+
+ /* Pointer to the inode of this open file.
+ * 'i_num_opened_fds' of the inode tracks the number of file descriptors
+ * that reference it. */
+ struct wim_inode *f_inode;
+
+ /* Pointer to the lookup table entry for the data stream that has been
+ * opened. 'num_opened_fds' of the lookup table entry tracks the number
+ * of file descriptors that reference it. Or, this value may be NULL,
+ * which indicates that the opened stream is empty and consequently does
+ * not have a lookup table entry. */
+ struct wim_lookup_table_entry *f_lte;
+
+ /* If valid (filedes_valid(&f_staging_fd)), this contains the
+ * corresponding native file descriptor for the staging file that has
+ * been created for reading from and/or writing to this open stream. A
+ * single staging file might have multiple file descriptors open to it
+ * simultaneously, each used by a different 'struct wimfs_fd'.
+ *
+ * Or, if invalid (!filedes_valid(&f_staging_fd)), this 'struct
+ * wimfs_fd' is not associated with a staging file. This is permissible
+ * only if this 'struct wimfs_fd' was opened read-only and the stream
+ * has not yet been extracted to a staging file. */
+ struct filedes f_staging_fd;
+
+ /* 0-based index of this file descriptor in the file descriptor table of
+ * its inode. */
+ u16 f_idx;
+
+ /* Unique ID of the opened stream in the inode. This will stay the same
+ * even if the indices of the inode's alternate data streams are changed
+ * by a deletion. */
+ u32 f_stream_id;