]> wimlib.net Git - wimlib/blobdiff - include/wimlib/lookup_table.h
Cache compression type in WIMStruct and wim_lookup_table_entry
[wimlib] / include / wimlib / lookup_table.h
index 2b2cfcd9184c65f8b311e328198c52c6ff7f033e..097750588454a733ad3167cc085b5e9dd2470eb4 100644 (file)
@@ -138,15 +138,21 @@ struct wim_lookup_table_entry {
        u16 resource_location : 5;
 
        /* 1 if this stream is a unique size (only set while writing streams). */
-       u8 unique_size : 1;
+       u16 unique_size : 1;
 
        /* 1 if this stream has not had a SHA1 message digest calculated for it
         * yet */
-       u8 unhashed : 1;
+       u16 unhashed : 1;
 
-       u8 deferred : 1;
+       u16 deferred : 1;
 
-       u8 no_progress : 1;
+       u16 no_progress : 1;
+
+       /* If resource_location == RESOURCE_IN_WIM, this will be a cached value
+        * that specifies the compression type of this stream as one of
+        * WIMLIB_COMPRESSION_TYPE_*.  Otherwise this will be 0, which is the
+        * same as WIMLIB_COMPRESSION_TYPE_NONE.  */
+       u16 compression_type : 2;
 
        /* (On-disk field)
         * Number of times this lookup table entry is referenced by dentries.
@@ -259,7 +265,7 @@ wim_resource_size(const struct wim_lookup_table_entry *lte)
 static inline u64
 wim_resource_chunks(const struct wim_lookup_table_entry *lte)
 {
-       return (wim_resource_size(lte) + WIM_CHUNK_SIZE - 1) / WIM_CHUNK_SIZE;
+       return DIV_ROUND_UP(wim_resource_size(lte), WIM_CHUNK_SIZE);
 }
 
 static inline u64
@@ -268,8 +274,12 @@ wim_resource_compressed_size(const struct wim_lookup_table_entry *lte)
        return lte->resource_entry.size;
 }
 
-extern int
-wim_resource_compression_type(const struct wim_lookup_table_entry *lte);
+static inline int
+wim_resource_compression_type(const struct wim_lookup_table_entry *lte)
+{
+       BUILD_BUG_ON(WIMLIB_COMPRESSION_TYPE_NONE != 0);
+       return lte->compression_type;
+}
 
 static inline bool
 lte_filename_valid(const struct wim_lookup_table_entry *lte)
@@ -370,7 +380,7 @@ lte_zero_real_refcnt(struct wim_lookup_table_entry *entry, void *ignore);
 extern int
 lte_free_extracted_file(struct wim_lookup_table_entry *lte, void *ignore);
 
-extern void
+extern int
 inode_resolve_ltes(struct wim_inode *inode, struct wim_lookup_table *table);
 
 extern void