* 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.
+ * will be noticeably 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
uint64_t completed_streams;
/** The number of threads being used for data compression; or,
- * if no compression is being peformed, this will be 1. */
+ * if no compression is being performed, this will be 1. */
uint32_t num_threads;
/** The compression type being used, as one of the
#define WIMLIB_WRITE_FLAG_SEND_DONE_WITH_FILE_MESSAGES 0x00002000
/**
- * Do not consider content similarily when arranging file data for solid
+ * Do not consider content similarity when arranging file data for solid
* compression. Providing this flag will typically worsen the compression
* ratio, so only provide this flag if you know what you are doing.
*/
#define WIMLIB_WRITE_FLAG_NO_SOLID_SORT 0x00004000
+/**
+ * Since wimlib v1.8.3 and for wimlib_overwrite() only: <b>unsafely</b> compact
+ * the WIM file in-place, without appending. Existing resources are shifted
+ * down to fill holes and new resources are appended as needed. The WIM file is
+ * truncated to its final size, which may shrink the on-disk file. <b>This
+ * operation cannot be safely interrupted. If the operation is interrupted,
+ * then the WIM file will be corrupted, and it may be impossible (or at least
+ * very difficult) to recover any data from it. Users of this flag are expected
+ * to know what they are doing and assume responsibility for any data corruption
+ * that may result.</b>
+ *
+ * If the WIM file cannot be compacted in-place because of its structure, its
+ * layout, or other requested write parameters, then wimlib_overwrite() fails
+ * with ::WIMLIB_ERR_COMPACTION_NOT_POSSIBLE, and the caller may wish to retry
+ * the operation without this flag.
+ */
+#define WIMLIB_WRITE_FLAG_UNSAFE_COMPACT 0x00008000
+
/** @} */
/** @addtogroup G_general
* @{ */
#define WIMLIB_INIT_FLAG_ASSUME_UTF8 0x00000001
/** Windows-only: do not attempt to acquire additional privileges (currently
- * SeBackupPrivilege, SeRestorePrivilege, SeSecurityPrivilege, and
- * SeTakeOwnershipPrivilege) when initializing the library. This flag is
- * intended for the case where the calling program manages these privileges
- * itself. Note: by default, no error is issued if privileges cannot be
- * acquired, although related errors may be reported later, depending on if the
- * operations performed actually require additional privileges or not. */
+ * SeBackupPrivilege, SeRestorePrivilege, SeSecurityPrivilege,
+ * SeTakeOwnershipPrivilege, and SeManageVolumePrivilege) when initializing the
+ * library. This flag is intended for the case where the calling program
+ * manages these privileges itself. Note: by default, no error is issued if
+ * privileges cannot be acquired, although related errors may be reported later,
+ * depending on if the operations performed actually require additional
+ * privileges or not. */
#define WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES 0x00000002
/** Windows only: If ::WIMLIB_INIT_FLAG_DONT_ACQUIRE_PRIVILEGES not specified,
WIMLIB_ERR_FVE_LOCKED_VOLUME = 82,
WIMLIB_ERR_UNABLE_TO_READ_CAPTURE_CONFIG = 83,
WIMLIB_ERR_WIM_IS_INCOMPLETE = 84,
+ WIMLIB_ERR_COMPACTION_NOT_POSSIBLE = 85,
};
* temporary file to the original.
* 2. Appending: append updates to the new original WIM file, then overwrite
* its header such that those changes become visible to new readers.
+ * 3. Compaction: normally should not be used; see
+ * ::WIMLIB_WRITE_FLAG_UNSAFE_COMPACT for details.
*
* Append mode is often much faster than a full rebuild, but it wastes some
* amount of space due to leaving "holes" in the WIM file. Because of the