#include <string.h>
#include <locale.h>
-static int extract_wim_chunk_to_ntfs_attr(const void *buf, size_t len,
- u64 offset, void *arg)
+struct ntfs_attr_extract_ctx {
+ u64 offset;
+ ntfs_attr *na;
+};
+
+static int
+extract_wim_chunk_to_ntfs_attr(const void *buf, size_t len, void *_ctx)
{
- ntfs_attr *na = arg;
- if (ntfs_attr_pwrite(na, offset, len, buf) == len) {
+ struct ntfs_attr_extract_ctx *ctx = _ctx;
+ if (ntfs_attr_pwrite(ctx->na, ctx->offset, len, buf) == len) {
+ ctx->offset += len;
return 0;
} else {
ERROR_WITH_ERRNO("Error extracting WIM resource to NTFS attribute");
extract_wim_resource_to_ntfs_attr(const struct wim_lookup_table_entry *lte,
ntfs_attr *na)
{
+ struct ntfs_attr_extract_ctx ctx;
+ ctx.na = na;
+ ctx.offset = 0;
return extract_wim_resource(lte, wim_resource_size(lte),
- extract_wim_chunk_to_ntfs_attr, na);
+ extract_wim_chunk_to_ntfs_attr, &ctx);
}
/* Writes the data streams of a WIM inode to the data attributes of a NTFS
*
* Returns 0 on success, nonzero on failure.
*/
-static int write_ntfs_data_streams(ntfs_inode *ni, const struct wim_dentry *dentry,
- union wimlib_progress_info *progress_info)
+static int
+write_ntfs_data_streams(ntfs_inode *ni, const struct wim_dentry *dentry,
+ union wimlib_progress_info *progress_info)
{
int ret = 0;
unsigned stream_idx = 0;
return WIMLIB_ERR_NTFS_3G;
}
if (inode->i_security_id != -1 &&
- !(extract_flags & WIMLIB_EXTRACT_FLAG_NOACLS))
+ !(extract_flags & WIMLIB_EXTRACT_FLAG_NO_ACLS))
{
const char *desc;
const struct wim_security_data *sd;
* Transfers the reparse data from a WIM inode (which must represent a reparse
* point) to a NTFS inode.
*/
-static int apply_reparse_data(ntfs_inode *ni, const struct wim_dentry *dentry,
- union wimlib_progress_info *progress_info)
+static int
+apply_reparse_data(ntfs_inode *ni, const struct wim_dentry *dentry,
+ union wimlib_progress_info *progress_info)
{
struct wim_lookup_table_entry *lte;
int ret = 0;
p = put_u16(p, wim_resource_size(lte)); /* ReparseDataLength */
p = put_u16(p, 0); /* Reserved */
- ret = read_full_wim_resource(lte, p, 0);
- if (ret != 0)
+ ret = read_full_resource_into_buf(lte, p, false);
+ if (ret)
return ret;
ret = ntfs_set_ntfs_reparse_data(ni, (char*)reparse_data_buf,
wim_resource_size(lte) + 8, 0);
- if (ret != 0) {
+ if (ret) {
ERROR_WITH_ERRNO("Failed to set NTFS reparse data on `%s'",
dentry->full_path);
return WIMLIB_ERR_NTFS_3G;