X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib.h;h=cf47751ab5bcc218cc0fb54caac004804e7d4f46;hb=1c3c0358979da71761ac52736e8355c54c7a77f2;hp=930422a87075e853fe582a9429aaf1d9cf186e26;hpb=2e6b4c5e5343353b1edaa695fff0ee4143e65af6;p=wimlib diff --git a/include/wimlib.h b/include/wimlib.h index 930422a8..cf47751a 100644 --- a/include/wimlib.h +++ b/include/wimlib.h @@ -426,7 +426,11 @@ enum wimlib_compression_type { /** Compressed resources in the WIM use XPRESS compression. */ WIMLIB_COMPRESSION_TYPE_XPRESS = 2, - /** TODO */ + /** Compressed resources in the WIM use LZMS compression. Currently, + * wimlib has a decompressor for this format but not a compressor. LZMS + * compression is only compatible with wimlib v1.6.0 and later and with + * WIMGAPI Windows 8 and later (and some restrictions apply on the + * latter). */ WIMLIB_COMPRESSION_TYPE_LZMS = 3, }; @@ -947,55 +951,64 @@ struct wimlib_wim_info { uint32_t reserved[9]; }; -/** Information about a unique resource in the WIM file. - */ +/** Information about a unique stream in the WIM file. (A stream is the same + * thing as a "resource", except in the case of packed resources.) */ struct wimlib_resource_entry { - /** Uncompressed size of the resource in bytes. */ + /** Uncompressed size of the stream in bytes. */ uint64_t uncompressed_size; - /** Compressed size of the resource in bytes. This will be the same as - * @p uncompressed_size if the resource is uncompressed. */ + /** Compressed size of the stream in bytes. This will be the same as @p + * uncompressed_size if the stream is uncompressed. Or, if @p + * is_packed_streams is 1, this will be 0. */ uint64_t compressed_size; - /** Offset, in bytes, of this resource from the start of the WIM file. + /** Offset, in bytes, of this stream from the start of the WIM file. Or + * if @p packed is 1, then this is actually the offset at which this + * stream begins in the uncompressed contents of the packed resource. */ uint64_t offset; - /** SHA1 message digest of the resource's uncompressed contents. */ + /** SHA1 message digest of the stream's uncompressed contents. */ uint8_t sha1_hash[20]; - /** Which part number of the split WIM this resource is in. This should + /** Which part number of the split WIM this stream is in. This should * be the same as the part number provided by wimlib_get_wim_info(). */ uint32_t part_number; - /** Number of times this resource is referenced over all WIM images. */ + /** Number of times this stream is referenced over all WIM images. */ uint32_t reference_count; - /** 1 if this resource is compressed. */ + /** 1 if this stream is compressed. */ uint32_t is_compressed : 1; - /** 1 if this resource is a metadata resource rather than a file - * resource. */ + /** 1 if this stream is a metadata resource rather than a file resource. + * */ uint32_t is_metadata : 1; uint32_t is_free : 1; uint32_t is_spanned : 1; - /** 1 if this resource was not found in the lookup table of the + /** 1 if this stream was not found in the lookup table of the * ::WIMStruct. This normally implies a missing call to * wimlib_reference_resource_files() or wimlib_reference_resources(). - */ + * */ uint32_t is_missing : 1; - uint32_t is_partial : 1; + /** 1 if this stream is located in a packed resource which may contain + * other streams (all compressed together) as well. */ + uint32_t packed : 1; uint32_t reserved_flags : 26; + /** If @p packed is 1, then this will specify the offset of the packed + * resource in the WIM. */ uint64_t raw_resource_offset_in_wim; - uint64_t raw_resource_uncompressed_size; + + /** If @p is_packed_streams is 1, then this will specify the compressed + * size of the packed resource in the WIM. */ uint64_t raw_resource_compressed_size; - uint64_t reserved[1]; + uint64_t reserved[2]; }; /** A stream of a file in the WIM. */ @@ -1513,6 +1526,12 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour #define WIMLIB_WRITE_FLAG_RESERVED 0x00000800 +/** TODO */ +#define WIMLIB_WRITE_FLAG_PACK_STREAMS 0x00001000 + +/** TODO */ +#define WIMLIB_WRITE_FLAG_NO_PACK_STREAMS 0x00002000 + /** @} */ /** @ingroup G_general * @{ */ @@ -3039,7 +3058,8 @@ wimlib_mount_image(WIMStruct *wim, * chunk of the WIM does not match the corresponding message digest given * in the integrity table. * @retval ::WIMLIB_ERR_INVALID_CHUNK_SIZE - * Resources in @p wim_file are compressed, but the chunk size is not 32768. + * Resources in @p wim_file are compressed, but the chunk size was invalid + * for the WIM's compression format. * @retval ::WIMLIB_ERR_INVALID_COMPRESSION_TYPE * The header of @p wim_file says that resources in the WIM are compressed, * but the header flag indicating LZX or XPRESS compression is not set. @@ -3435,7 +3455,8 @@ wimlib_set_image_descripton(WIMStruct *wim, int image, * * WARNING: Changing the compression chunk size to any value other than the * default of 32768 bytes eliminates compatibility with Microsoft's software, - * except when increasing the XPRESS chunk size before Windows 8. + * except when increasing the XPRESS chunk size before Windows 8. Chunk sizes + * other than 32768 are also incompatible with wimlib v1.5.3 and earlier. * * @param wim * ::WIMStruct for a WIM. @@ -3976,7 +3997,7 @@ wimlib_write_to_fd(WIMStruct *wim, * library clients looking to make use of wimlib's compression code for another * purpose. * - * As of wimlib v1.5.4, this function can be used with @p chunk_size greater + * As of wimlib v1.6.0, this function can be used with @p chunk_size greater * than 32768 bytes and is only limited by available memory. However, the * XPRESS format itself still caps match offsets to 65535, so if a larger chunk * size is chosen, then the matching will effectively occur in a sliding window