mount_image.c: silence a -Wmaybe-uninitialized warning Silence a false positive -Wmaybe-uninitialized warning in do_unmount_commit() with gcc 13.1.1.
mount_image.c: call file_contents_changed() on extending truncates
mount_image.c: avoid UBSAN warning in wimfs_listxattr() When 'list == NULL && size == 0', the statement 'end = list + size' executes 'NULL + 0'. clang's UndefinedBehaviorSanitizer complains that this is undefined: src/mount_image.c:1518:19: runtime error: applying zero offset to null pointer This is questionable, but let's avoid it...
Upgrade WIM mounting support from fuse2 to fuse3 fuse2 is no longer maintained, and the various Linux distros want all packages to move to fuse3. So, let's add fuse3 support. Moreover, as it's been over 5 years since fuse3 was released, it doesn't seem worth it to support both fuse2 and fuse3. So, remove support for fuse2, and just support fuse3. Note: as before, WIM mounting support can still be disabled by configuring --without-fuse. That removes the dependency.
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.
Use native Windows threads on Windows This makes building wimlib for Windows easier, as it no longer depends on winpthreads.
Improve random number generation wimlib used rand() to generate random numbers, e.g. for GUIDs. This was neither cryptographically secure nor thread-safe. Use getrandom(), /dev/urandom, or RtlGenRandom() instead.
Constify some data
libattr is no longer needed wimlib only uses the extended attributes interface on Linux, where it appears it is now safe to assume the functions are present in libc (see: http://lists.nongnu.org/archive/html/acl-devel/2012-04/msg00001.html). Note: the setfattr program from the "attr" package is still required to run the NTFS-3G test script.
Character encoding and string conversion updates - Allow unpaired surrogates when translating between "UTF-8" and "UTF-16LE". This allows Windows-style filenames to be processed losslessly on UNIX-like systems, even if they are not valid UTF-16LE. - Implement UTF-8 and UTF-16LE codecs ourselves and drop the iconv requirement. This was necessary to allow surrogate codepoints, but it also provides better performance and actually results in *fewer* lines of code and a slightly smaller binary. - Drop support for multibyte encodings other than UTF-8 on UNIX-like systems. It is probably not worth the effort to support such encodings. Interestingly, the support was entirely broken before v1.9.1, yet no one ever complained...
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
Delay xml_update_image_info() until write wimlib_update_image() should not be walking the entire image's directory tree on every call.
Forbid modifying multi-referenced images
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
file_io.c: get rid of raw_pread() and raw_pwrite()
Rename dentry name fields file_name => d_name file_name_nbytes => d_name_nbytes short_name => d_short_name short_name_nbytes => d_short_name_nbytes
Rename i_hlist => i_hlist_node
Reparse point updates - Rename 'struct reparse_data' => 'struct link_reparse_point' - Rename parse_reparse_data() => parse_link_reparse_data() - Rename make_reparse_data() => make_link_reparse_point() - Rename rp_unknown_1 => unknown_0x54 and move out of reparse point union - Rename rp_unknown_2 => rp_reserved and store/restore - Rename not_rpfixed => rp_flags and use 0x0001 as rpfix flag - Use 'struct reparse_buffer_disk' in more places and not raw byte array - Add new helper function: complete_reparse_point() - Eliminate need for various assertions in reparse.c - Improve handling of NT namespace paths in wim_inode_readlink() - More closely follow POSIX readlink semantics in wim_inode_readlink() - Set reparse tag and file attributes in wim_inode_readlink() - Handle reparse point fixup in wim_inode_readlink() and support fixing up link targets in mounted WIM image - Handle slashes between root and root-relative portion consistently between UNIX and Windows, and allow lossless handling of trailing slashes - Use 0 as RP_NOT_FIXED in win32_apply.c - Improve comments