goto out_close;
if (!dir_ni)
- dir_ni = ntfs_inode_open(vol, dentry->parent->d_inode->i_mft_no);
+ dir_ni = ntfs_inode_open(vol, dentry->d_parent->d_inode->i_mft_no);
if (!ni)
ni = ntfs_inode_open(vol, dentry->d_inode->i_mft_no);
if (dir_ni && ni) {
/* Unlike most other NTFS-3g functions, ntfs_set_ntfs_dos_name()
* changes the directory's last modification timestamp...
* Change it back. */
- return ntfs_3g_restore_timestamps(vol, dentry->parent->d_inode);
+ return ntfs_3g_restore_timestamps(vol, dentry->d_parent->d_inode);
out_close:
/* ntfs_inode_close() can take a NULL argument, but it's probably best
int res;
/* Open the inode of the parent directory. */
- dir_ni = ntfs_inode_open(ni->vol, dentry->parent->d_inode->i_mft_no);
+ dir_ni = ntfs_inode_open(ni->vol, dentry->d_parent->d_inode->i_mft_no);
if (!dir_ni)
goto fail;
/* Create first link. */
- dir_ni = ntfs_inode_open(ctx->vol, first_dentry->parent->d_inode->i_mft_no);
+ dir_ni = ntfs_inode_open(ctx->vol, first_dentry->d_parent->d_inode->i_mft_no);
if (!dir_ni) {
ERROR_WITH_ERRNO("Can't open \"%s\" in NTFS volume",
- dentry_full_path(first_dentry->parent));
+ dentry_full_path(first_dentry->d_parent));
return WIMLIB_ERR_NTFS_3G;
}
/* Close the directory in which the first link was created. */
if (ntfs_inode_close(dir_ni)) {
ERROR_WITH_ERRNO("Failed to close \"%s\" in NTFS volume",
- dentry_full_path(first_dentry->parent));
+ dentry_full_path(first_dentry->d_parent));
ret = WIMLIB_ERR_NTFS_3G;
goto out_close_ni;
}
/* Create additional links if present. */
next = inode->i_extraction_aliases.next;
- ret = 0;
do {
dentry = list_entry(next, struct wim_dentry,
d_extraction_alias_node);
return WIMLIB_ERR_NTFS_3G;
}
+ if (ctx->num_open_attrs == MAX_OPEN_ATTRS) {
+ ERROR("Can't extract data: too many open files!");
+ return WIMLIB_ERR_UNSUPPORTED;
+ }
+
attr = ntfs_attr_open(ni, AT_DATA, stream_name, stream_name_nchars);
if (!attr) {
ERROR_WITH_ERRNO("Failed to open data stream of \"%s\"",