]> wimlib.net Git - wimlib/blobdiff - src/extract.c
Variable chunk size support (currently XPRESS only)
[wimlib] / src / extract.c
index a087a76d48adbfad43409e8fe75d038c09906c1a..4d5ba7e0b7cbfa852829d1a4762c015b72137cdd 100644 (file)
@@ -1143,7 +1143,8 @@ dentry_extract_skeleton(struct wim_dentry *dentry, void *_ctx)
        {
                inode_for_each_dentry(other_dentry, dentry->d_inode) {
                        if (dentry_has_short_name(other_dentry)
-                           && !other_dentry->skeleton_extracted)
+                           && !other_dentry->skeleton_extracted
+                           && other_dentry->in_extraction_tree)
                        {
                                DEBUG("Creating %"TS" before %"TS" "
                                      "to guarantee correct DOS name extraction",
@@ -1381,8 +1382,11 @@ read_error:
 static int
 skip_pwm_stream(struct wim_lookup_table_entry *lte)
 {
-       return read_partial_wim_resource(lte, wim_resource_size(lte),
-                                        NULL, NULL,
+       return read_partial_wim_resource(lte,
+                                        wim_resource_size(lte),
+                                        NULL,
+                                        wim_resource_chunk_size(lte),
+                                        NULL,
                                         WIMLIB_READ_RESOURCE_FLAG_SEEK_ONLY,
                                         0);
 }
@@ -1623,6 +1627,8 @@ dentry_calculate_extraction_path(struct wim_dentry *dentry, void *_args)
        struct apply_ctx *ctx = _args;
        int ret;
 
+       dentry->in_extraction_tree = 1;
+
        if (dentry == ctx->extract_root || dentry->extraction_skipped)
                return 0;
 
@@ -1742,6 +1748,7 @@ dentry_reset_needs_extraction(struct wim_dentry *dentry, void *_ignore)
 {
        struct wim_inode *inode = dentry->d_inode;
 
+       dentry->in_extraction_tree = 0;
        dentry->extraction_skipped = 0;
        dentry->was_hardlinked = 0;
        dentry->skeleton_extracted = 0;
@@ -2061,7 +2068,7 @@ do_extract_warnings(struct apply_ctx *ctx)
            ctx->no_security_descriptors == 0)
                return;
 
-       WARNING("Extraction of \"%"TS"\" complete, but with one or more warnings:",
+       WARNING("Extraction to \"%"TS"\" complete, but with one or more warnings:",
                ctx->target);
        if (ctx->partial_security_descriptors != 0) {
                WARNING("- Could only partially set the security descriptor\n"
@@ -2776,8 +2783,7 @@ wimlib_extract_image_from_pipe(int pipe_fd, const tchar *image_num_or_name,
         * wimlib_open_wim(), getting a WIMStruct in this way will result in
         * an empty lookup table, no XML data read, and no filename set.  */
        ret = open_wim_as_WIMStruct(&pipe_fd,
-                                   WIMLIB_OPEN_FLAG_FROM_PIPE |
-                                               WIMLIB_OPEN_FLAG_SPLIT_OK,
+                                   WIMLIB_OPEN_FLAG_FROM_PIPE,
                                    &pwm, progress_func);
        if (ret)
                return ret;