X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib.h;h=df0ec28fa9ea9982af40d6588612aa5eaae00029;hp=a7b18489ef178c67f426e0d6e84251598627d063;hb=43a26b833482fc019c7aeee95656b8f2f3077db7;hpb=2c6340d0ccb0710950b0acdc3bde04179f6e0f28 diff --git a/include/wimlib.h b/include/wimlib.h index a7b18489..df0ec28f 100644 --- a/include/wimlib.h +++ b/include/wimlib.h @@ -12,7 +12,7 @@ /** * @mainpage * - * This is the documentation for the library interface of wimlib 1.7.4, a C + * This is the documentation for the library interface of wimlib 1.8.0, a C * library for creating, modifying, extracting, and mounting files in the * Windows Imaging Format. This documentation is intended for developers only. * If you have installed wimlib and want to know how to use the @b wimlib-imagex @@ -376,10 +376,10 @@ #define WIMLIB_MAJOR_VERSION 1 /** Minor version of the library (for example, the 2 in 1.2.5). */ -#define WIMLIB_MINOR_VERSION 7 +#define WIMLIB_MINOR_VERSION 8 /** Patch version of the library (for example, the 5 in 1.2.5). */ -#define WIMLIB_PATCH_VERSION 4 +#define WIMLIB_PATCH_VERSION 0 #ifdef __cplusplus extern "C" { @@ -511,13 +511,15 @@ enum wimlib_compression_type { * later. Also, chunk sizes larger than 2^26 are not compatible * with the Microsoft implementation. * - * wimlib's LZMS compressor is currently faster but will usually not - * compress as much as the implementation in Microsoft's WIMGAPI - * (Windows 8.1). + * wimlib's LZMS compressor will, with the default settings, usually + * produce a better compression ratio, and work more quickly, than the + * implementation in Microsoft's WIMGAPI (as of Windows 8.1). There is + * limited support for non-default compression levels, but compression + * will be noticably faster if you choose a level < 35. * * If using wimlib_create_compressor() to create an LZMS compressor * directly, the @p max_block_size parameter may be any positive value - * up to and including 1180427429. + * up to and including 2^30. */ WIMLIB_COMPRESSION_TYPE_LZMS = 3, }; @@ -1447,7 +1449,11 @@ struct wimlib_resource_entry { * solid resource in the WIM. */ uint64_t raw_resource_compressed_size; - uint64_t reserved[2]; + /** If @p packed is 1, then this will specify the uncompressed size of + * the solid resource in the WIM. */ + uint64_t raw_resource_uncompressed_size; + + uint64_t reserved[1]; }; /** @@ -2216,7 +2222,7 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour #define WIMLIB_WRITE_FLAG_RETAIN_GUID 0x00000800 /** - * When writing streams in the resulting WIM file, combine multiple streams into + * When writing streams to the resulting WIM file, combine multiple streams into * a single compressed resource instead of compressing them independently. This * is also known as creating a "solid archive". This tends to produce a better * compression ratio at the cost of much slower random access. @@ -2232,13 +2238,13 @@ typedef int (*wimlib_iterate_lookup_table_callback_t)(const struct wimlib_resour * all streams recompressed in solid mode. * * Currently, new solid resources will, by default, be written using LZMS - * compression with 32 MiB (33554432 byte) chunks. Use + * compression with 64 MiB (67108864 byte) chunks. Use * wimlib_set_output_pack_compression_type() and/or * wimlib_set_output_pack_chunk_size() to change this. This is independent of * the WIM's main compression type and chunk size; you can have a WIM that * nominally uses LZX compression and 32768 byte chunks but actually contains * LZMS-compressed solid resources, for example. However, if including solid - * blocks, I suggest that you set the WIM's main compression type to LZMS as + * resources, I suggest that you set the WIM's main compression type to LZMS as * well, either by creating the WIM with * ::wimlib_create_new_wim(::WIMLIB_COMPRESSION_TYPE_LZMS, ...) or by calling * ::wimlib_set_output_compression_type(..., ::WIMLIB_COMPRESSION_TYPE_LZMS). @@ -4624,6 +4630,8 @@ wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype, size_t max_block_size, unsigned int compression_level); +#define WIMLIB_COMPRESSOR_FLAG_DESTRUCTIVE 0x80000000 + /** * Allocate a compressor for the specified compression type using the specified * parameters. This function is part of wimlib's compression API; it is not @@ -4668,6 +4676,15 @@ wimlib_get_compressor_needed_memory(enum wimlib_compression_type ctype, * The compression level does not affect the format of the compressed data. * Therefore, it is a compressor-only parameter and does not need to be * passed to the decompressor. + *
+ * Since wimlib v1.8.0, this parameter can be OR-ed with the flag + * ::WIMLIB_COMPRESSOR_FLAG_DESTRUCTIVE. This creates the compressor in a + * mode where it is allowed to modify the input buffer. Specifically, in + * this mode, if compression succeeds, the input buffer may have been + * modified, whereas if compression does not succeed the input buffer still + * may have been written to but will have been restored exactly to its + * original state. This mode is designed to save some memory when using + * large buffer sizes. * @param compressor_ret * A location into which to return the pointer to the allocated compressor. * The allocated compressor can be used for any number of calls to