X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fntfs-3g_apply.c;h=59edc3631fa7a42e4654d0c57babbd412c9b2f58;hp=c61a8882ce4a9390fbbf55c73a6843b462af724e;hb=af141a23c4d1540b8a64759bb68c7cd7ff054e72;hpb=cc7b6ee47d4037ae8fa11b4c2d5154091d543704 diff --git a/src/ntfs-3g_apply.c b/src/ntfs-3g_apply.c index c61a8882..59edc363 100644 --- a/src/ntfs-3g_apply.c +++ b/src/ntfs-3g_apply.c @@ -285,7 +285,7 @@ ntfs_3g_restore_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni, 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) { @@ -307,7 +307,7 @@ ntfs_3g_restore_dos_name(ntfs_inode *ni, ntfs_inode *dir_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 @@ -543,7 +543,7 @@ ntfs_3g_add_link(ntfs_inode *ni, struct wim_dentry *dentry) 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; @@ -578,10 +578,10 @@ ntfs_3g_create_nondirectory(struct wim_inode *inode, /* 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; } @@ -619,7 +619,7 @@ ntfs_3g_create_nondirectory(struct wim_inode *inode, /* 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; } @@ -627,7 +627,6 @@ ntfs_3g_create_nondirectory(struct wim_inode *inode, /* 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); @@ -726,6 +725,11 @@ ntfs_3g_begin_extract_stream_to_attr(struct wim_lookup_table_entry *stream, 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\"",