int (*decompress)(const void *, uint, void *, uint);
/* Set the appropriate decompress function. */
- if (resource_ctype == WIM_COMPRESSION_TYPE_LZX)
+ if (resource_ctype == WIMLIB_COMPRESSION_TYPE_LZX)
decompress = lzx_decompress;
else
decompress = xpress_decompress;
ctype = wim_resource_compression_type(lte);
- wimlib_assert(ctype != WIM_COMPRESSION_TYPE_NONE ||
+ wimlib_assert(ctype != WIMLIB_COMPRESSION_TYPE_NONE ||
(lte->resource_entry.original_size ==
lte->resource_entry.size));
if ((flags & WIMLIB_RESOURCE_FLAG_RAW)
- || ctype == WIM_COMPRESSION_TYPE_NONE)
+ || ctype == WIMLIB_COMPRESSION_TYPE_NONE)
ret = read_uncompressed_resource(fp,
lte->resource_entry.offset + offset,
size, buf);
*
* The output_resource_entry, out_refcnt, and part_number fields of @lte are
* updated.
- *
- * Metadata resources are not copied (they are handled elsewhere for joining and
- * splitting).
*/
int copy_resource(struct lookup_table_entry *lte, void *wim)
{
struct inode_table inode_tab;
const struct lookup_table_entry *metadata_lte;
u64 metadata_len;
- u64 metadata_offset;
struct hlist_head inode_list;
metadata_lte = imd->metadata_lte;
metadata_len = wim_resource_size(metadata_lte);
- metadata_offset = metadata_lte->resource_entry.offset;
DEBUG("Reading metadata resource: length = %"PRIu64", "
- "offset = %"PRIu64"", metadata_len, metadata_offset);
+ "offset = %"PRIu64"", metadata_len,
+ metadata_lte->resource_entry.offset);
/* 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
ret = read_dentry(buf, metadata_len, dentry_offset, dentry);
+ /* This is the root dentry, so set its parent to itself. */
+ dentry->parent = dentry;
- if (dentry->length == 0) {
+ if (ret == 0 && dentry->length == 0) {
ERROR("Metadata resource cannot begin with end-of-directory entry!");
ret = WIMLIB_ERR_INVALID_DENTRY;
}
- if (ret != 0)
- goto out_free_dentry_tree;
-
- /* This is the root dentry, so set its parent to itself. */
- dentry->parent = dentry;
+ if (ret != 0) {
+ FREE(dentry);
+ goto out_free_security_data;
+ }
inode_add_dentry(dentry, dentry->d_inode);
u64 metadata_original_size;
const struct wim_security_data *sd;
- DEBUG("Writing metadata resource for image %d", w->current_image);
+ DEBUG("Writing metadata resource for image %d (offset = %"PRIu64")",
+ w->current_image, ftello(w->out_fp));
root = wim_root_dentry(w);
sd = wim_security_data(w);