/** Compressed resources in the WIM use XPRESS compression. */
WIMLIB_COMPRESSION_TYPE_XPRESS = 2,
+
+ /** TODO */
+ WIMLIB_COMPRESSION_TYPE_LZMS = 3,
};
/** @} */
*/
uint32_t is_missing : 1;
- uint32_t reserved_flags : 27;
- uint64_t reserved[4];
+ uint32_t is_partial : 1;
+
+ uint32_t reserved_flags : 26;
+
+ uint64_t raw_resource_offset_in_wim;
+ uint64_t raw_resource_uncompressed_size;
+ uint64_t raw_resource_compressed_size;
+
+ uint64_t reserved[1];
};
/** A stream of a file in the WIM. */
* library clients looking to make use of wimlib's compression code for another
* purpose.
*
+ * @param window_size
+ * Size of the LZX window. Must be a power of 2 between 2^15 and 2^21,
+ * inclusively.
+ *
* @param params
* Compression parameters to use, or @c NULL to use the default parameters.
*
* @return 0 on success; nonzero on error.
*
* @retval ::WIMLIB_ERR_INVALID_PARAM
- * The compression parameters were invalid.
+ * The window size or compression parameters were invalid.
* @retval ::WIMLIB_ERR_NOMEM
* Not enough memory to allocate the compression context.
*/
extern int
-wimlib_lzx_alloc_context(const struct wimlib_lzx_params *params,
+wimlib_lzx_alloc_context(uint32_t window_size,
+ const struct wimlib_lzx_params *params,
struct wimlib_lzx_context **ctx_pp);
/**
wimlib_lzx_decompress(const void *compressed_data, unsigned compressed_len,
void *uncompressed_data, unsigned uncompressed_len);
+/**
+ * @ingroup G_compression
+ *
+ * Equivalent to wimlib_lzx_decompress(), except the window size is specified in
+ * @p max_window_size as any power of 2 between 2^15 and 2^21, inclusively, and
+ * @p uncompressed_len may be any size less than or equal to @p max_window_size.
+ */
+extern int
+wimlib_lzx_decompress2(const void *compressed_data, unsigned compressed_len,
+ void *uncompressed_data, unsigned uncompressed_len,
+ uint32_t max_window_size);
+
/**
* @ingroup G_compression
*
* Set the compression chunk size of a WIM to use in subsequent calls to
* wimlib_write() or wimlib_overwrite().
*
+ * A compression chunk size will result in a greater compression ratio, but the
+ * speed of random access to the WIM will be reduced, and the effect of an
+ * increased compression chunk size is limited by the size of each file being
+ * compressed.
+ *
+ * <b>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.</b>
+ *
* @param wim
* ::WIMStruct for a WIM.
* @param out_chunk_size
* The chunk size (in bytes) to set. The valid chunk sizes are dependent
* on the compression format. The XPRESS compression format supports chunk
* sizes that are powers of 2 with exponents between 15 and 26 inclusively,
- * whereas the LZX compression format currently only supports a chunk size
- * of 32768.
+ * whereas the LZX compression format supports chunk sizes that are powers
+ * of 2 with exponents between 15 and 21 inclusively.
*
* @return 0 on success; nonzero on error.
*