- /* Circular linked list of streams that share the same lookup table
- * entry
- *
- * This list of streams may include streams from different hard link
- * sets that happen to be the same. */
- struct list_head lte_group_list;
+ /* Pointers to somewhere where the stream is actually located. See the
+ * comments for the @resource_location field above. */
+ union {
+ WIMStruct *wim;
+ tchar *file_on_disk;
+ tchar *staging_file_name;
+ void *attached_buffer;
+ #ifdef WITH_NTFS_3G
+ struct ntfs_location *ntfs_loc;
+ #endif
+ };
+
+ /* Pointer to inode that contains the opened file descriptors to
+ * this stream (valid iff resource_location ==
+ * RESOURCE_IN_STAGING_FILE) */
+ struct wim_inode *lte_inode;
+
+ u32 real_refcnt;
+
+ union {
+ #ifdef WITH_FUSE
+ u16 num_opened_fds;
+ #endif
+
+ /* This field is used for the special hardlink or symlink image
+ * extraction mode. In these mode, all identical files are linked
+ * together, and @extracted_file will be set to the filename of the
+ * first extracted file containing this stream. */
+ tchar *extracted_file;
+ };
+
+ union {
+ /* When a WIM file is written, @output_resource_entry is filled
+ * in with the resource entry for the output WIM. This will not
+ * necessarily be the same as the @resource_entry since: - The
+ * stream may have a different offset in the new WIM - The
+ * stream may have a different compressed size in the new WIM if
+ * the compression type changed
+ */
+ struct resource_entry output_resource_entry;
+
+ struct list_head msg_list;
+ struct list_head inode_list;
+
+ struct {
+ struct hlist_node hash_list_2;
+ struct list_head write_streams_list;
+ };
+ };