X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.h;h=921a47c3e627fdb968ee9d6a7e48a66d4afbb04c;hp=83796aae2d8bca57cf4566de9467755444da9cfa;hb=5de5f74ca8a3bd8d013c97418320f54cd52f8e1a;hpb=394c5bd3292c0f3168416c0a5f25989e557b3cfc diff --git a/src/lookup_table.h b/src/lookup_table.h index 83796aae..921a47c3 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 { @@ -237,6 +245,7 @@ struct wim_lookup_table_entry { union { struct list_head unhashed_list; struct list_head swm_stream_list; + struct list_head lookup_table_list; struct list_head extraction_list; struct list_head export_stream_list; }; @@ -276,10 +285,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 @@ -296,6 +307,11 @@ read_lookup_table(WIMStruct *w); extern int write_lookup_table(WIMStruct *w, int image, struct resource_entry *out_res_entry); +extern int +write_lookup_table_from_stream_list(struct list_head *stream_list, + int out_fd, + struct resource_entry *out_res_entry); + extern void free_lookup_table(struct wim_lookup_table *table); @@ -370,9 +386,6 @@ inode_resolve_ltes(struct wim_inode *inode, struct wim_lookup_table *table); extern void inode_unresolve_ltes(struct wim_inode *inode); -extern int -write_lookup_table_entry(struct wim_lookup_table_entry *lte, void *__out); - static inline struct wim_lookup_table_entry * inode_stream_lte_resolved(const struct wim_inode *inode, unsigned stream_idx) { @@ -453,34 +466,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);