X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.h;h=d9d8959c339c171fcdd517902dc07d37017f8ac3;hp=83796aae2d8bca57cf4566de9467755444da9cfa;hb=48c05c63f94c294d4b9982a228682c27e8d41dd2;hpb=394c5bd3292c0f3168416c0a5f25989e557b3cfc diff --git a/src/lookup_table.h b/src/lookup_table.h index 83796aae..d9d8959c 100644 --- a/src/lookup_table.h +++ b/src/lookup_table.h @@ -63,11 +63,11 @@ enum resource_location { * WIM file will be pointed to by the @wim member. */ RESOURCE_IN_WIM, +#ifndef __WIN32__ /* The stream resource is located in an external file. The name of the - * file will be provided by @file_on_disk member. In addition, if - * @file_on_disk_fp is not NULL, it will be an open FILE * to the file. - * */ + * file will be provided by @file_on_disk member. */ RESOURCE_IN_FILE_ON_DISK, +#endif /* The stream resource is directly attached in an in-memory buffer * pointed to by @attached_buffer. */ @@ -141,9 +141,14 @@ struct wim_lookup_table_entry { /* 1 if this stream is a unique size (only set while writing streams). */ u8 unique_size : 1; - /* 1 if this stream had a SHA1-message digest calculated for it yet? */ + /* 1 if this stream has not had a SHA1 message digest calculated for it + * yet */ u8 unhashed : 1; + u8 deferred : 1; + + u8 no_progress : 1; + /* (On-disk field) * Number of times this lookup table entry is referenced by dentries. * Unfortunately, this field is not always set correctly in Microsoft's @@ -216,14 +221,17 @@ struct wim_lookup_table_entry { 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 + * 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 { + struct list_head msg_list; + struct list_head being_compressed_list; + }; struct list_head inode_list; struct { @@ -276,10 +284,12 @@ wim_resource_compression_type(const struct wim_lookup_table_entry *lte) static inline bool lte_filename_valid(const struct wim_lookup_table_entry *lte) { - return lte->resource_location == RESOURCE_IN_FILE_ON_DISK + return 0 #ifdef __WIN32__ || lte->resource_location == RESOURCE_WIN32 || lte->resource_location == RESOURCE_WIN32_ENCRYPTED + #else + || lte->resource_location == RESOURCE_IN_FILE_ON_DISK #endif #ifdef WITH_FUSE || lte->resource_location == RESOURCE_IN_STAGING_FILE @@ -453,34 +463,12 @@ inode_stream_name_nbytes(const struct wim_inode *inode, unsigned stream_idx) return inode->i_ads_entries[stream_idx - 1].stream_name_nbytes; } -static inline struct wim_lookup_table_entry * -inode_unnamed_lte_resolved(const struct wim_inode *inode) -{ - wimlib_assert(inode->i_resolved); - for (unsigned i = 0; i <= inode->i_num_ads; i++) { - if (inode_stream_name_nbytes(inode, i) == 0 && - !is_zero_hash(inode_stream_hash_resolved(inode, i))) - { - return inode_stream_lte_resolved(inode, i); - } - } - return NULL; -} +extern struct wim_lookup_table_entry * +inode_unnamed_lte_resolved(const struct wim_inode *inode); -static inline struct wim_lookup_table_entry * +extern struct wim_lookup_table_entry * inode_unnamed_lte_unresolved(const struct wim_inode *inode, - const struct wim_lookup_table *table) -{ - wimlib_assert(!inode->i_resolved); - for (unsigned i = 0; i <= inode->i_num_ads; i++) { - if (inode_stream_name_nbytes(inode, i) == 0 && - !is_zero_hash(inode_stream_hash_unresolved(inode, i))) - { - return inode_stream_lte_unresolved(inode, i, table); - } - } - return NULL; -} + const struct wim_lookup_table *table); extern struct wim_lookup_table_entry * inode_unnamed_lte(const struct wim_inode *inode, const struct wim_lookup_table *table);