]> wimlib.net Git - wimlib/blobdiff - include/wimlib.h
Read concat runs
[wimlib] / include / wimlib.h
index 82dd1afcea633d7f42342a325e80af55ad75d3e6..00e8e5e7c582c2f237238064d4e8d48b10b7402b 100644 (file)
@@ -425,6 +425,9 @@ enum wimlib_compression_type {
 
        /** Compressed resources in the WIM use XPRESS compression. */
        WIMLIB_COMPRESSION_TYPE_XPRESS = 2,
+
+       /** TODO  */
+       WIMLIB_COMPRESSION_TYPE_LZMS = 3,
 };
 
 /** @} */
@@ -984,8 +987,15 @@ struct wimlib_resource_entry {
         */
        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.  */
@@ -2760,6 +2770,10 @@ wimlib_lzx_compress2(const void *chunk, unsigned chunk_size, void *out,
  * 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.
  *
@@ -2773,12 +2787,13 @@ wimlib_lzx_compress2(const void *chunk, unsigned chunk_size, void *out,
  * @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);
 
 /**
@@ -2812,6 +2827,18 @@ extern int
 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
  *
@@ -3362,14 +3389,23 @@ wimlib_set_image_descripton(WIMStruct *wim, int image,
  * 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.
  *