X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fntfs-3g_apply.c;h=3dcf8d539c8354b96d61d301ffb50003fe640729;hb=8df639463ae0c754d2b1af3d6c1d22e59ee3ccf8;hp=690c2207708f9d6cfc32a92650801d1f87571fbd;hpb=8eb500e74f1508c4722df217fb60bdf4710fbff6;p=wimlib diff --git a/src/ntfs-3g_apply.c b/src/ntfs-3g_apply.c index 690c2207..3dcf8d53 100644 --- a/src/ntfs-3g_apply.c +++ b/src/ntfs-3g_apply.c @@ -280,7 +280,7 @@ ntfs_3g_restore_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni, * UTF-16LE internally... which is annoying because we currently have * the UTF-16LE string but not the multibyte string. */ - ret = utf16le_get_tstr(dentry->short_name, dentry->short_name_nbytes, + ret = utf16le_get_tstr(dentry->d_short_name, dentry->d_short_name_nbytes, &dos_name, &dos_name_nbytes); if (ret) goto out_close; @@ -385,7 +385,7 @@ ntfs_3g_set_metadata(ntfs_inode *ni, const struct wim_inode *inode, } /* Security descriptor */ - if ((inode->i_security_id >= 0) + if (inode_has_security_descriptor(inode) && !(extract_flags & WIMLIB_EXTRACT_FLAG_NO_ACLS)) { const void *desc; @@ -518,17 +518,12 @@ ntfs_3g_create_directories(struct wim_dentry *root, static struct wim_dentry * ntfs_3g_first_extraction_alias(struct wim_inode *inode) { - struct list_head *next = inode->i_extraction_aliases.next; struct wim_dentry *dentry; - do { - dentry = list_entry(next, struct wim_dentry, - d_extraction_alias_node); + inode_for_each_extraction_alias(dentry, inode) if (dentry_has_short_name(dentry)) - break; - next = next->next; - } while (next != &inode->i_extraction_aliases); - return dentry; + return dentry; + return inode_first_extraction_dentry(inode); } /* @@ -573,7 +568,6 @@ ntfs_3g_create_nondirectory(struct wim_inode *inode, struct wim_dentry *first_dentry; ntfs_inode *dir_ni; ntfs_inode *ni; - struct list_head *next; struct wim_dentry *dentry; int ret; @@ -629,17 +623,13 @@ ntfs_3g_create_nondirectory(struct wim_inode *inode, } /* Create additional links if present. */ - next = inode->i_extraction_aliases.next; - do { - dentry = list_entry(next, struct wim_dentry, - d_extraction_alias_node); + inode_for_each_extraction_alias(dentry, inode) { if (dentry != first_dentry) { ret = ntfs_3g_add_link(ni, dentry); if (ret) goto out_close_ni; } - next = next->next; - } while (next != &inode->i_extraction_aliases); + } /* Set metadata. */ ret = ntfs_3g_set_metadata(ni, inode, ctx); @@ -707,8 +697,6 @@ ntfs_3g_begin_extract_blob_instance(struct blob_descriptor *blob, return WIMLIB_ERR_INVALID_REPARSE_DATA; } ctx->reparse_ptr = ctx->rpbuf.rpdata; - ctx->rpbuf.rpdatalen = cpu_to_le16(blob->size); - ctx->rpbuf.rpreserved = cpu_to_le16(0); ctx->ntfs_reparse_inodes[ctx->num_reparse_inodes] = ni; ctx->wim_reparse_inodes[ctx->num_reparse_inodes] = inode; ctx->num_reparse_inodes++; @@ -862,11 +850,11 @@ ntfs_3g_end_extract_blob(struct blob_descriptor *blob, int status, void *_ctx) for (u32 i = 0; i < ctx->num_reparse_inodes; i++) { struct wim_inode *inode = ctx->wim_reparse_inodes[i]; - ctx->rpbuf.rptag = cpu_to_le32(inode->i_reparse_tag); + complete_reparse_point(&ctx->rpbuf, inode, blob->size); if (ntfs_set_ntfs_reparse_data(ctx->ntfs_reparse_inodes[i], (const char *)&ctx->rpbuf, - blob->size + REPARSE_DATA_OFFSET, + REPARSE_DATA_OFFSET + blob->size, 0)) { ERROR_WITH_ERRNO("Failed to set reparse " @@ -947,13 +935,11 @@ ntfs_3g_extract(struct list_head *dentry_list, struct apply_ctx *_ctx) goto out_unmount; /* Extract blobs. */ - struct read_blob_list_callbacks cbs = { - .begin_blob = ntfs_3g_begin_extract_blob, - .begin_blob_ctx = ctx, - .consume_chunk = ntfs_3g_extract_chunk, - .consume_chunk_ctx = ctx, - .end_blob = ntfs_3g_end_extract_blob, - .end_blob_ctx = ctx, + struct read_blob_callbacks cbs = { + .begin_blob = ntfs_3g_begin_extract_blob, + .consume_chunk = ntfs_3g_extract_chunk, + .end_blob = ntfs_3g_end_extract_blob, + .ctx = ctx, }; ret = extract_blob_list(&ctx->common, &cbs);