Update hyperlinks Use https whenever possible, and replace some outdated links.
Consistently use _WIN32 instead of __WIN32__ _WIN32 works with all compilers, while __WIN32__ is MinGW-specific. This project used __WIN32__ in files that only support MinGW, and _WIN32 in other files such as the library header and example programs. One place even used WIN32. Avoid this unnecessary complication by just always using _WIN32.
Add support for a data recovery mode Add support for extracting file data even if it is corrupted (i.e. if its hash doesn't match or some of its chunks can't be decompressed). This isn't recommended for general use, but it could be useful for recovering data from a corrupted WIM archive.
wimextract: allow specifying listfile on stdin
Capture and apply extended attributes on Windows DISM recently started supporting capturing and applying xattrs on Windows (though, it is broken when applying multiple xattrs per file). Make wimlib support the same, using the same on-disk format. Unlike DISM it is on by default, not controlled by an option, since there doesn't seem to be a good reason to make it an option. Also deprecate the tagged item wimlib was using to store xattrs on Linux and switch over to the format used by WIMGAPI to store xattrs on Windows, so that new WIM images use the same xattr format on both platforms. One caveat is that on Linux XATTR_SIZE_MAX is 65536 whereas in the new WIM tagged item format we can only store up to 65535 bytes. That is unlikely to matter though. As future work, the NTFS-3G capture and apply backends should be updated to support xattrs too.
extract.c: recommend --unix-data mode when appropriate
Add basic infrastructure for storing xattr items Define a new tagged metadata item to hold a list of names and values of Linux-style extended attributes, and prepare for supporting capture/apply of extended attributes. I considered making the xattrs a stream instead, referenced from the tagged item which would just hold a hash. This would have allowed xattrs to be deduplicated between files. However, I ultimately decided against this because WIMGAPI and older versions of wimlib would discard the streams on optimize/export, and extraction would be much more complicated because xattr streams could come up for extraction before other streams --- which would be especially problematic for symlinks.
Extract sparse files as sparse When extracting a stream belonging to an inode with FILE_ATTRIBUTE_SPARSE_FILE set, before writing any data, mark the extracted stream as sparse if needed and skip preallocating space. Then, skip writing zero regions. This makes it so that sparse files are still sparse after extraction.
resource: pass blob and offset to consume_chunk This makes it so that users don't need to keep track of the current blob and offset themselves.
extract.c: don't use ifdef within macro argument This was nonstandard and 'sparse' complained about it.
Unify case-sensitive and case-insensitive filename indices
s/NTFS-3g/NTFS-3G/g
Add support for capturing/applying object IDs
extract.c: replace tempnam() with mkstemp() on non-Windows tempnam() produces an annoying warning when linking, even though wimlib was using it safely (with O_EXCL to make it race-free). Just replace it with mkstemp() anyway.
Image metadata updates - Maintain selected_count of each WIM image - Unload each WIM image when it is no longer selected by any WIMStruct - Enforce that every 'wim_image_metadata' is created in a valid state - Simplify NEW_IMAGE support for read-write mounts - Improve comments
extract: track READONLY attribute in supported_features
Make WIMStructs reference-counted Simplify the library API by eliminating rules on when WIMStructs can be freed after calls to wimlib_export_image() and wimlib_reference_resources(). Also eliminate the internal 'subwims' list.
Don't unnecessarily rebuild exported metadata resources - When image metadata is modified, release the descriptor for the backing resource (if any), since it can no longer be used - In write_metadata_resources(), allow copying metadata resources from a WIM file other than the one being written - Remove the 'modified' and 'dont_check_metadata_hash' fields which are no longer needed
xml.c: refactor to use document tree
add System Compression support