#endif
#include "wimlib/apply.h"
+#include "wimlib/assert.h"
#include "wimlib/dentry.h"
#include "wimlib/encoding.h"
#include "wimlib/endianness.h"
inode = dentry->d_inode;
dentry_reset_extraction_list_node(dentry);
inode->i_visited = 0;
+ inode->i_can_externally_back = 0;
if ((void *)dentry->d_extraction_name != (void *)dentry->file_name)
FREE(dentry->d_extraction_name);
dentry->d_extraction_name = NULL;
}
static int
-ref_stream(struct wim_lookup_table_entry *lte, u32 stream_idx,
+ref_stream(struct wim_lookup_table_entry *lte, unsigned stream_idx,
struct wim_dentry *dentry, struct apply_ctx *ctx)
{
struct wim_inode *inode = dentry->d_inode;
{
struct wim_inode *inode = dentry->d_inode;
int ret;
- u16 stream_idx;
+ unsigned stream_idx;
struct wim_lookup_table_entry *stream;
if (unlikely(inode_is_encrypted_directory(inode)))
* extraction mode and volume, and to avoid complications, if not doing
* a linked extraction. */
if (ctx->supported_features.named_data_streams) {
- for (u16 i = 0; i < inode->i_num_ads; i++) {
- if (!ads_entry_is_named_stream(&inode->i_ads_entries[i]))
+ for (unsigned i = 0; i < inode->i_num_ads; i++) {
+ if (!inode->i_ads_entries[i].stream_name_nbytes)
continue;
ret = ref_stream(inode->i_ads_entries[i].lte, i + 1,
dentry, ctx);
if (ret)
goto out_cleanup;
+ dentry_list_build_inode_alias_lists(&dentry_list);
+
ret = dentry_list_ref_streams(&dentry_list, ctx);
if (ret)
goto out_cleanup;
- dentry_list_build_inode_alias_lists(&dentry_list);
-
if (extract_flags & WIMLIB_EXTRACT_FLAG_FROM_PIPE) {
/* When extracting from a pipe, the number of bytes of data to
* extract can't be determined in the normal way (examining the
if (i == image) {
/* Metadata resource is for the image being extracted.
* Parse it and save the metadata in memory. */
- ret = read_metadata_resource(pwm, imd);
+ ret = read_metadata_resource(imd);
if (ret)
goto out_wimlib_free;
imd->modified = 1;