X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fntfs-3g_capture.c;h=ca8d1b2ffe4a335002569c0a6de780a52d13e9f2;hp=33f8365702ecff945d14b050894f8fcc4fbfe7c8;hb=43f92ce30b2398d1823e34e39ff248de521d015c;hpb=5ad361dd880ce04bc7593a057ce781d068c8508b diff --git a/src/ntfs-3g_capture.c b/src/ntfs-3g_capture.c index 33f83657..ca8d1b2f 100644 --- a/src/ntfs-3g_capture.c +++ b/src/ntfs-3g_capture.c @@ -65,6 +65,7 @@ struct ntfs_volume_wrapper { ntfs_volume *vol; size_t refcnt; + bool dedup_warned; }; /* Description of where data is located in an NTFS volume */ @@ -116,7 +117,7 @@ open_ntfs_attr(ntfs_inode *ni, const struct ntfs_location *loc) int read_ntfs_attribute_prefix(const struct blob_descriptor *blob, u64 size, - const struct read_blob_callbacks *cbs) + const struct consume_chunk_callback *cb) { const struct ntfs_location *loc = blob->ntfs_loc; ntfs_volume *vol = loc->volume->vol; @@ -153,7 +154,7 @@ read_ntfs_attribute_prefix(const struct blob_descriptor *blob, u64 size, } pos += to_read; bytes_remaining -= to_read; - ret = call_consume_chunk(buf, to_read, cbs); + ret = consume_chunk(cb, buf, to_read); if (ret) goto out_close_ntfs_attr; } @@ -231,6 +232,27 @@ read_reparse_header(ntfs_inode *ni, struct wim_inode *inode) return 0; } + +static void +warn_special_reparse_points(const struct wim_inode *inode, + const struct scan_params *params, + struct ntfs_volume_wrapper *volume) +{ + if (inode->i_reparse_tag == WIM_IO_REPARSE_TAG_DEDUP && + (params->add_flags & WIMLIB_ADD_FLAG_WINCONFIG) && + !volume->dedup_warned) + { + WARNING( + "Filesystem includes files deduplicated with Windows'\n" +" Data Deduplication feature, which to properly restore\n" +" would require that the chunk store in \"System Volume Information\"\n" +" be included in the WIM image. By default \"System Volume Information\"\n" +" is excluded, so you may want to use a custom capture configuration\n" +" file which includes it."); + volume->dedup_warned = true; + } +} + static int attr_type_to_wimlib_stream_type(ATTR_TYPES type) { @@ -793,6 +815,8 @@ ntfs_3g_build_dentry_tree_recursive(struct wim_dentry **root_ret, volume, AT_REPARSE_POINT); if (ret) goto out; + + warn_special_reparse_points(inode, params, volume); } /* Load the object ID. */ @@ -863,7 +887,7 @@ ntfs_3g_build_dentry_tree(struct wim_dentry **root_ret, char *path; int ret; - volume = MALLOC(sizeof(struct ntfs_volume_wrapper)); + volume = CALLOC(1, sizeof(struct ntfs_volume_wrapper)); if (!volume) return WIMLIB_ERR_NOMEM;