wimlib_iterate_dir_tree() on a modified-but-not-committed image is very
slow because it checksums all unhashed blobs. This was originally
implemented by commit
681faad85f73 ("wimlib_iterate_dir_tree(): checksum
unhashed blobs"), presumably to make the sha1_hash field always valid.
However, I can't remember a real use case for this. The current
behavior is causing problems, so let's just revert it and update the
documentation accordingly.
Reported at https://wimlib.net/forums/viewtopic.php?f=1&t=572
* sha1_hash. This case can only occur with wimlib_iterate_dir_tree(), never
* wimlib_iterate_lookup_table().
*
* sha1_hash. This case can only occur with wimlib_iterate_dir_tree(), never
* wimlib_iterate_lookup_table().
*
- * 2. Otherwise we know the sha1_hash, the uncompressed_size, the
- * reference_count, and the is_metadata flag. In addition:
+ * 2. Otherwise we know the the uncompressed_size, the reference_count, and the
+ * is_metadata flag. In addition:
*
* A. If the blob is located in a non-solid WIM resource, then we also know
*
* A. If the blob is located in a non-solid WIM resource, then we also know
- * the compressed_size and offset.
+ * the sha1_hash, compressed_size, and offset.
*
* B. If the blob is located in a solid WIM resource, then we also know the
*
* B. If the blob is located in a solid WIM resource, then we also know the
- * offset, raw_resource_offset_in_wim, raw_resource_compressed_size, and
- * raw_resource_uncompressed_size. But the "offset" is actually the
- * offset in the uncompressed solid resource rather than the offset from
- * the beginning of the WIM file.
+ * sha1_hash, offset, raw_resource_offset_in_wim,
+ * raw_resource_compressed_size, and raw_resource_uncompressed_size. But
+ * the "offset" is actually the offset in the uncompressed solid resource
+ * rather than the offset from the beginning of the WIM file.
- * C. If the blob is *not* located in any type of WIM resource, then we don't
- * know any additional information.
+ * C. If the blob is *not* located in any type of WIM resource, for example
+ * if it's in a external file that was scanned by wimlib_add_image(), then
+ * we usually won't know any more information. The sha1_hash might be
+ * known, and prior to wimlib v1.13.6 it always was; however, in wimlib
+ * v1.13.6 and later, the sha1_hash might not be known in this case.
*
* Unknown or irrelevant fields are left zeroed.
*/
*
* Unknown or irrelevant fields are left zeroed.
*/
* of this blob within that solid resource when uncompressed. */
uint64_t offset;
* of this blob within that solid resource when uncompressed. */
uint64_t offset;
- /** The SHA-1 message digest of the blob's uncompressed contents. */
+ /** If this blob is located in a WIM resource, then this is the SHA-1
+ * message digest of the blob's uncompressed contents. */
uint8_t sha1_hash[20];
/** If this blob is located in a WIM resource, then this is the part
uint8_t sha1_hash[20];
/** If this blob is located in a WIM resource, then this is the part
path = canonicalize_wim_path(_path);
if (path == NULL)
return WIMLIB_ERR_NOMEM;
path = canonicalize_wim_path(_path);
if (path == NULL)
return WIMLIB_ERR_NOMEM;
-
- ret = wim_checksum_unhashed_blobs(wim);
- if (ret)
- return ret;
-
struct image_iterate_dir_tree_ctx ctx = {
.path = path,
.flags = flags,
struct image_iterate_dir_tree_ctx ctx = {
.path = path,
.flags = flags,