X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fresource.h;h=dfb2d0f43a6ad851cad3915ffca070ab6b8a1ef2;hb=919b97754cedca6f37dd1808b00198dc3cb8bf98;hp=9694259d844082bbcf3ebe0acbeb18aa655a3da1;hpb=a15d2daaeb81d829a21d497f63cce66af1db0b03;p=wimlib diff --git a/include/wimlib/resource.h b/include/wimlib/resource.h index 9694259d..dfb2d0f4 100644 --- a/include/wimlib/resource.h +++ b/include/wimlib/resource.h @@ -52,6 +52,13 @@ struct wim_resource_spec { /* Temporary flag. */ u32 raw_copy_ok : 1; + + /* Compression type of this resource. */ + u32 compression_type : 22; + + /* Compression chunk size of this resource. Irrelevant if the resource + * is uncompressed. */ + u32 chunk_size; }; /* On-disk version of a WIM resource header. */ @@ -159,8 +166,8 @@ struct alt_chunk_table_header_disk { /* Compression format used for compressed chunks: * 0 = None - * 1 = LZX - * 2 = XPRESS + * 1 = XPRESS + * 2 = LZX * 3 = LZMS * * This overrides the compression type specified by the WIM header. */ @@ -170,6 +177,15 @@ struct alt_chunk_table_header_disk { * the chunks (4 bytes per entry). */ } _packed_attribute; +static inline unsigned int +get_chunk_entry_size(u64 res_size, bool is_alt) +{ + if (res_size <= UINT32_MAX || is_alt) + return 4; + else + return 8; +} + /* Functions to read streams */ extern int @@ -187,6 +203,10 @@ extern int wim_reshdr_to_data(const struct wim_reshdr *reshdr, WIMStruct *wim, void **buf_ret); +extern int +wim_reshdr_to_hash(const struct wim_reshdr *reshdr, WIMStruct *wim, + u8 hash[SHA1_HASH_SIZE]); + extern int skip_wim_stream(struct wim_lookup_table_entry *lte); @@ -196,11 +216,6 @@ skip_wim_stream(struct wim_lookup_table_entry *lte); * @lte: * Stream that is about to be read. * - * @is_partial_res: - * Set to true if the stream is just one of several being read from a - * single pack and therefore would be extra expensive to read - * independently. - * * @ctx: * User-provided context. * @@ -210,7 +225,6 @@ skip_wim_stream(struct wim_lookup_table_entry *lte); * (without calling @consume_chunk or @end_stream). */ typedef int (*read_stream_list_begin_stream_t)(struct wim_lookup_table_entry *lte, - bool is_partial_res, void *ctx); #define BEGIN_STREAM_STATUS_SKIP_STREAM -1 @@ -281,7 +295,8 @@ extract_stream_to_fd(struct wim_lookup_table_entry *lte, struct filedes *fd, u64 size); extern int -extract_chunk_to_fd(const void *chunk, size_t size, void *_fd_p); +extract_full_stream_to_fd(struct wim_lookup_table_entry *lte, + struct filedes *fd); /* Miscellaneous stream functions. */