const struct wim_inode *inode = targets[i].inode;
const struct wim_dentry *dentry;
- list_for_each_entry(dentry,
- &inode->i_extraction_aliases,
- d_extraction_alias_node)
- {
+ inode_for_each_extraction_alias(dentry, inode) {
progress->extract.completed_bytes += size;
if (ctx->cur_blob_offset == ctx->cur_blob->size)
progress->extract.completed_streams++;
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)
+ if ((void *)dentry->d_extraction_name != (void *)dentry->d_name)
FREE(dentry->d_extraction_name);
dentry->d_extraction_name = NULL;
dentry->d_extraction_name_nchars = 0;
#ifdef WITH_NTFS_3G
if (ctx->extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) {
- dentry->d_extraction_name = dentry->file_name;
- dentry->d_extraction_name_nchars = dentry->file_name_nbytes /
+ dentry->d_extraction_name = dentry->d_name;
+ dentry->d_extraction_name_nchars = dentry->d_name_nbytes /
sizeof(utf16lechar);
return 0;
}
}
}
- if (file_name_valid(dentry->file_name, dentry->file_name_nbytes / 2, false)) {
- ret = utf16le_get_tstr(dentry->file_name,
- dentry->file_name_nbytes,
+ if (file_name_valid(dentry->d_name, dentry->d_name_nbytes / 2, false)) {
+ ret = utf16le_get_tstr(dentry->d_name,
+ dentry->d_name_nbytes,
(const tchar **)&dentry->d_extraction_name,
&dentry->d_extraction_name_nchars);
dentry->d_extraction_name_nchars /= sizeof(tchar);
out_replace:
{
- utf16lechar utf16_name_copy[dentry->file_name_nbytes / 2];
+ utf16lechar utf16_name_copy[dentry->d_name_nbytes / 2];
- memcpy(utf16_name_copy, dentry->file_name, dentry->file_name_nbytes);
- file_name_valid(utf16_name_copy, dentry->file_name_nbytes / 2, true);
+ memcpy(utf16_name_copy, dentry->d_name, dentry->d_name_nbytes);
+ file_name_valid(utf16_name_copy, dentry->d_name_nbytes / 2, true);
const tchar *tchar_name;
size_t tchar_nchars;
ret = utf16le_get_tstr(utf16_name_copy,
- dentry->file_name_nbytes,
+ dentry->d_name_nbytes,
&tchar_name, &tchar_nchars);
if (ret)
return ret;
dentry_list_build_inode_alias_lists(struct list_head *dentry_list)
{
struct wim_dentry *dentry;
- struct wim_inode *inode;
+
+ list_for_each_entry(dentry, dentry_list, d_extraction_list_node)
+ dentry->d_inode->i_first_extraction_alias = NULL;
list_for_each_entry(dentry, dentry_list, d_extraction_list_node) {
- inode = dentry->d_inode;
- if (!inode->i_visited)
- INIT_LIST_HEAD(&inode->i_extraction_aliases);
- list_add_tail(&dentry->d_extraction_alias_node,
- &inode->i_extraction_aliases);
- inode->i_visited = 1;
+ dentry->d_next_extraction_alias = dentry->d_inode->i_first_extraction_alias;
+ dentry->d_inode->i_first_extraction_alias = dentry;
}
- list_for_each_entry(dentry, dentry_list, d_extraction_list_node)
- dentry->d_inode->i_visited = 0;
}
static void