X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Fresource.h;h=61ce69b5e22f337affc15bea35288162923089e3;hp=2c1cd9b4523068ddf504d9157ebfbb306de4627d;hb=9df357d0ac3ac1f5386873dd20df2639cecd64b3;hpb=e176e9731e696562bab8de7b9bd34c019deef3e8 diff --git a/include/wimlib/resource.h b/include/wimlib/resource.h index 2c1cd9b4..61ce69b5 100644 --- a/include/wimlib/resource.h +++ b/include/wimlib/resource.h @@ -2,11 +2,11 @@ #define _WIMLIB_RESOURCE_H #include "wimlib/callback.h" -#include "wimlib/file_io.h" #include "wimlib/list.h" #include "wimlib/sha1.h" #include "wimlib/types.h" +struct filedes; struct wim_lookup_table_entry; struct wim_image_metadata; @@ -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,10 +177,14 @@ struct alt_chunk_table_header_disk { * the chunks (4 bytes per entry). */ } _packed_attribute; -/* wimlib internal flags used when writing resources. */ -#define WIMLIB_WRITE_RESOURCE_FLAG_RECOMPRESS 0x00000001 -#define WIMLIB_WRITE_RESOURCE_FLAG_PIPABLE 0x00000002 -#define WIMLIB_WRITE_RESOURCE_FLAG_PACK_STREAMS 0x00000004 +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 */ @@ -192,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); @@ -201,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. * @@ -215,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 @@ -286,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. */ @@ -296,8 +306,7 @@ sha1_stream(struct wim_lookup_table_entry *lte); /* Functions to read/write metadata resources. */ extern int -read_metadata_resource(WIMStruct *wim, - struct wim_image_metadata *image_metadata); +read_metadata_resource(struct wim_image_metadata *imd); extern int write_metadata_resource(WIMStruct *wim, int image, int write_resource_flags);