]> wimlib.net Git - wimlib/blobdiff - src/extract.c
do_wimlib_extract_image(): Do not allow GLOB_PATHS
[wimlib] / src / extract.c
index 995f9cbb1c36b197b844120157f050ce3649292b..8bbf3e7d5807d89e63f009e01b910f3be72ca73e 100644 (file)
@@ -85,7 +85,7 @@
         WIMLIB_EXTRACT_FLAG_RPFIX                      |       \
         WIMLIB_EXTRACT_FLAG_NORPFIX                    |       \
         WIMLIB_EXTRACT_FLAG_TO_STDOUT                  |       \
-        WIMLIB_EXTRACT_FLAG_REPLACE_INVALID_FILENAMES  |       \
+        WIMLIB_EXTRACT_FLAG_REPLACE_INVALID_FILENAMES  |       \
         WIMLIB_EXTRACT_FLAG_ALL_CASE_CONFLICTS         |       \
         WIMLIB_EXTRACT_FLAG_STRICT_TIMESTAMPS          |       \
         WIMLIB_EXTRACT_FLAG_STRICT_SHORT_NAMES         |       \
@@ -1407,32 +1407,17 @@ out_delete_tmpfile:
 static int
 extract_stream_list(struct apply_ctx *ctx)
 {
-       if (!(ctx->extract_flags & WIMLIB_EXTRACT_FLAG_FILE_ORDER)) {
-               /* Sequential extraction: read the streams in the order in which
-                * they appear in the WIM file.  */
-               struct read_stream_list_callbacks cbs = {
-                       .begin_stream           = begin_extract_stream_to_tmpfile,
-                       .begin_stream_ctx       = ctx,
-                       .consume_chunk          = extract_chunk_to_fd,
-                       .consume_chunk_ctx      = &ctx->tmpfile_fd,
-                       .end_stream             = end_extract_stream_to_tmpfile,
-                       .end_stream_ctx         = ctx,
-               };
-               return read_stream_list(&ctx->stream_list,
-                                       offsetof(struct wim_lookup_table_entry, extraction_list),
-                                       &cbs, VERIFY_STREAM_HASHES);
-       } else {
-               /* Extract the streams in unsorted order.  */
-               struct wim_lookup_table_entry *lte;
-               int ret;
-
-               list_for_each_entry(lte, &ctx->stream_list, extraction_list) {
-                       ret = extract_stream_instances(lte, lte, ctx);
-                       if (ret)
-                               return ret;
-               }
-               return 0;
-       }
+       struct read_stream_list_callbacks cbs = {
+               .begin_stream           = begin_extract_stream_to_tmpfile,
+               .begin_stream_ctx       = ctx,
+               .consume_chunk          = extract_chunk_to_fd,
+               .consume_chunk_ctx      = &ctx->tmpfile_fd,
+               .end_stream             = end_extract_stream_to_tmpfile,
+               .end_stream_ctx         = ctx,
+       };
+       return read_stream_list(&ctx->stream_list,
+                               offsetof(struct wim_lookup_table_entry, extraction_list),
+                               &cbs, VERIFY_STREAM_HASHES);
 }
 
 #define PWM_ALLOW_WIM_HDR 0x00001
@@ -2586,7 +2571,9 @@ check_extract_flags(const WIMStruct *wim, int *extract_flags_p)
 #endif
 
        if ((extract_flags & (WIMLIB_EXTRACT_FLAG_RPFIX |
-                             WIMLIB_EXTRACT_FLAG_NORPFIX)) == 0)
+                             WIMLIB_EXTRACT_FLAG_NORPFIX |
+                             WIMLIB_EXTRACT_FLAG_IMAGEMODE)) ==
+                                       WIMLIB_EXTRACT_FLAG_IMAGEMODE)
        {
                /* Do reparse point fixups by default if the WIM header says
                 * they are enabled.  */
@@ -2866,7 +2853,8 @@ do_wimlib_extract_image(WIMStruct *wim,
        int ret;
 
        if (extract_flags & (WIMLIB_EXTRACT_FLAG_NO_PRESERVE_DIR_STRUCTURE |
-                            WIMLIB_EXTRACT_FLAG_TO_STDOUT))
+                            WIMLIB_EXTRACT_FLAG_TO_STDOUT |
+                            WIMLIB_EXTRACT_FLAG_GLOB_PATHS))
                return WIMLIB_ERR_INVALID_PARAM;
 
        if (image == WIMLIB_ALL_IMAGES)