metadata_blob = imd->metadata_blob;
- DEBUG("Reading metadata resource (size=%"PRIu64").", metadata_blob->size);
-
/* Read the metadata resource into memory. (It may be compressed.) */
- ret = read_full_blob_into_alloc_buf(metadata_blob, &buf);
+ ret = read_blob_into_alloc_buf(metadata_blob, &buf);
if (ret)
return ret;
*
* Notes: The metadata resource consists of the security data, followed
* by the directory entry for the root directory, followed by all the
- * other directory entries in the filesystem. The subdir_offset field
+ * other directory entries in the filesystem. The subdir offset field
* of each directory entry gives the start of its child entries from the
* beginning of the metadata resource. An end-of-directory is signaled
* by a directory entry of length '0', really of length 8, because
imd->root_dentry = root;
imd->security_data = sd;
INIT_LIST_HEAD(&imd->unhashed_blobs);
- DEBUG("Done parsing metadata resource.");
return 0;
out_free_dentry_tree:
u32 total_length = sizeof(u64) * sd->num_entries + 2 * sizeof(u32);
for (u32 i = 0; i < sd->num_entries; i++)
total_length += sd->sizes[i];
- sd->total_length = (total_length + 7) & ~7;
+ sd->total_length = ALIGN(total_length, 8);
}
static int
struct wim_security_data *sd;
struct wim_image_metadata *imd;
- DEBUG("Preparing metadata resource for image %d", image);
-
ret = select_wim_image(wim, image);
if (ret)
return ret;
imd->root_dentry = root;
}
- /* Offset of first child of the root dentry. It's equal to:
- * - The total length of the security data, rounded to the next 8-byte
- * boundary,
- * - plus the total length of the root dentry,
- * - plus 8 bytes for an end-of-directory entry following the root
- * dentry (shouldn't really be needed, but just in case...)
- */
+ /* The offset of the first child of the root dentry is equal to the
+ * total length of the security data, plus the total length of the root
+ * dentry, plus 8 bytes for an end-of-directory entry following the root
+ * dentry (shouldn't really be needed, but just in case...) */
recalculate_security_data_length(sd);
- subdir_offset = (((u64)sd->total_length + 7) & ~7) +
- dentry_out_total_length(root) + 8;
+ subdir_offset = sd->total_length + dentry_out_total_length(root) + 8;
/* Calculate the subdirectory offsets for the entire dentry tree. */
calculate_subdir_offsets(root, &subdir_offset);