#include "wimlib/metadata.h"
#include "wimlib/resource.h"
#include "wimlib/security.h"
+#include "wimlib/write.h"
/*
* Reads a metadata resource for an image in the WIM file. The metadata
* WIMLIB_ERR_SUCCESS (0)
* WIMLIB_ERR_INVALID_METADATA_RESOURCE
* WIMLIB_ERR_NOMEM
+ * WIMLIB_ERR_READ
+ * WIMLIB_ERR_UNEXPECTED_END_OF_FILE
+ * WIMLIB_ERR_DECOMPRESSION
*/
int
read_metadata_resource(WIMStruct *wim, struct wim_image_metadata *imd)
{
- u8 *buf;
+ void *buf;
int ret;
struct wim_dentry *root;
const struct wim_lookup_table_entry *metadata_lte;
struct wim_inode *inode;
metadata_lte = imd->metadata_lte;
- metadata_len = wim_resource_size(metadata_lte);
+ metadata_len = metadata_lte->size;
- DEBUG("Reading metadata resource: original_size = %"PRIu64", "
- "size = %"PRIu64", offset = %"PRIu64"",
- metadata_lte->resource_entry.original_size,
- metadata_lte->resource_entry.size,
- metadata_lte->resource_entry.offset);
+ DEBUG("Reading metadata resource.");
/* There is no way the metadata resource could possibly be less than (8
* + WIM_DENTRY_DISK_SIZE) bytes, where the 8 is for security data (with
}
/* Read the metadata resource into memory. (It may be compressed.) */
- ret = read_full_resource_into_alloc_buf(metadata_lte, (void**)&buf);
+ ret = read_full_stream_into_alloc_buf(metadata_lte, &buf);
if (ret)
return ret;
*/
recalculate_security_data_length(sd);
subdir_offset = (((u64)sd->total_length + 7) & ~7) +
- dentry_correct_total_length(root) + 8;
+ dentry_out_total_length(root) + 8;
/* Calculate the subdirectory offsets for the entire dentry tree. */
calculate_subdir_offsets(root, &subdir_offset);
* the metadata resource. */
ret = write_wim_resource_from_buffer(buf, len, WIM_RESHDR_FLAG_METADATA,
&wim->out_fd,
- wim->compression_type,
- &imd->metadata_lte->output_resource_entry,
+ wim->out_compression_type,
+ wim->out_chunk_size,
+ &imd->metadata_lte->out_reshdr,
imd->metadata_lte->hash,
write_resource_flags);