]> wimlib.net Git - wimlib/blobdiff - src/win32_apply.c
Check for case where too many identical files are being extracted
[wimlib] / src / win32_apply.c
index 421db26b0d9a6e6f3321d8ccccd19711dacb5ffa..4f4cf6eb3350658bc01f14150fc7eeb2bfb0a2f1 100644 (file)
@@ -357,7 +357,7 @@ dentry_extraction_path_length(const struct wim_dentry *dentry)
        d = dentry;
        do {
                len += d->d_extraction_name_nchars + 1;
-               d = d->parent;
+               d = d->d_parent;
        } while (!dentry_is_root(d) && will_extract_dentry(d));
 
        return --len;  /* No leading slash  */
@@ -426,8 +426,8 @@ build_extraction_path(const struct wim_dentry *dentry,
        ctx->pathbuf.Length = len * sizeof(wchar_t);
        p = ctx->pathbuf.Buffer + len;
        for (d = dentry;
-            !dentry_is_root(d->parent) && will_extract_dentry(d->parent);
-            d = d->parent)
+            !dentry_is_root(d->d_parent) && will_extract_dentry(d->d_parent);
+            d = d->d_parent)
        {
                p -= d->d_extraction_name_nchars;
                wmemcpy(p, d->d_extraction_name, d->d_extraction_name_nchars);
@@ -1342,7 +1342,9 @@ begin_extract_stream_instance(const struct wim_lookup_table_entry *stream,
                                            &info, ctx->common.progctx);
                        FREE(dentry->_full_path);
                        dentry->_full_path = NULL;
-                       return ret;
+                       if (ret)
+                               return ret;
+                       /* Go on and open the file for normal extraction.  */
                } else {
                        FREE(dentry->_full_path);
                        dentry->_full_path = NULL;
@@ -1357,7 +1359,7 @@ begin_extract_stream_instance(const struct wim_lookup_table_entry *stream,
 
        /* Too many open handles?  */
        if (ctx->num_open_handles == MAX_OPEN_HANDLES) {
-               ERROR("Too many open handles!");
+               ERROR("Can't extract data: too many open files!");
                return WIMLIB_ERR_UNSUPPORTED;
        }