]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
update
authorlongpanda <admin@ventoy.net>
Fri, 17 Jul 2020 14:50:44 +0000 (22:50 +0800)
committerlongpanda <admin@ventoy.net>
Fri, 17 Jul 2020 14:50:44 +0000 (22:50 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c

index 01ae478ca74e68e021ae29b1283112b89fd331e2..4b3c2783dddfcc817d23ab92d677bd5b0f479abf 100644 (file)
@@ -428,7 +428,7 @@ static int ventoy_get_override_info(grub_file_t file, wim_tail *wim_data)
     return 0;
 }
 
     return 0;
 }
 
-static int ventoy_read_resource(grub_file_t fp, wim_resource_header *head, void **buffer)
+static int ventoy_read_resource(grub_file_t fp, wim_header *wimhdr, wim_resource_header *head, void **buffer)
 {
     int decompress_len = 0;
     int total_decompress = 0;
 {
     int decompress_len = 0;
     int total_decompress = 0;
@@ -478,9 +478,14 @@ static int ventoy_read_resource(grub_file_t fp, wim_resource_header *head, void
         }
         else
         {
         }
         else
         {
-            decompress_len = (int)lzx_decompress(buffer_compress + cur_offset, chunk_size, cur_dst);
-            if (decompress < 0)
+            if (wimhdr->flags & FLAG_HEADER_COMPRESS_XPRESS)
+            {
                 decompress_len = (int)xca_decompress(buffer_compress + cur_offset, chunk_size, cur_dst);
                 decompress_len = (int)xca_decompress(buffer_compress + cur_offset, chunk_size, cur_dst);
+            }
+            else
+            {
+                decompress_len = (int)lzx_decompress(buffer_compress + cur_offset, chunk_size, cur_dst);                
+            }
         }
 
         //debug("chunk_size:%u decompresslen:%d\n", chunk_size, decompress_len);
         }
 
         //debug("chunk_size:%u decompresslen:%d\n", chunk_size, decompress_len);
@@ -502,9 +507,14 @@ static int ventoy_read_resource(grub_file_t fp, wim_resource_header *head, void
     }
     else
     {
     }
     else
     {
-        decompress_len = (int)lzx_decompress(buffer_compress + cur_offset, head->size_in_wim - cur_offset, cur_dst);
-        if (decompress < 0)
+        if (wimhdr->flags & FLAG_HEADER_COMPRESS_XPRESS)
+        {
             decompress_len = (int)xca_decompress(buffer_compress + cur_offset, head->size_in_wim - cur_offset, cur_dst);
             decompress_len = (int)xca_decompress(buffer_compress + cur_offset, head->size_in_wim - cur_offset, cur_dst);
+        }
+        else
+        {
+            decompress_len = (int)lzx_decompress(buffer_compress + cur_offset, head->size_in_wim - cur_offset, cur_dst);
+        }
     }
     
     cur_dst += decompress_len;
     }
     
     cur_dst += decompress_len;
@@ -816,14 +826,14 @@ static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch)
         return 1;
     }
 
         return 1;
     }
 
-    if ((head->flags & FLAG_HEADER_COMPRESS_XPRESS) || (head->flags & FLAG_HEADER_COMPRESS_LZMS))
+    if (head->flags & FLAG_HEADER_COMPRESS_LZMS)
     {
     {
-        debug("Xpress or LZMS compress is not supported 0x%x\n", head->flags);
+        debug("LZMS compress is not supported 0x%x\n", head->flags);
         grub_file_close(file);
         return 1;
     }
 
         grub_file_close(file);
         return 1;
     }
 
-    rc = ventoy_read_resource(file, &head->metadata, (void **)&decompress_data);
+    rc = ventoy_read_resource(file, head, &head->metadata, (void **)&decompress_data);
     if (rc)
     {
         grub_printf("failed to read meta data %d\n", rc);
     if (rc)
     {
         grub_printf("failed to read meta data %d\n", rc);
@@ -860,7 +870,7 @@ static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch)
         debug("find replace lookup entry_id:%ld raw_size:%u\n", 
             ((long)patch->replace_look - (long)lookup) / sizeof(wim_lookup_entry), exe_len);
 
         debug("find replace lookup entry_id:%ld raw_size:%u\n", 
             ((long)patch->replace_look - (long)lookup) / sizeof(wim_lookup_entry), exe_len);
 
-        if (0 == ventoy_read_resource(file, &(patch->replace_look->resource), (void **)&(exe_data)))
+        if (0 == ventoy_read_resource(file, head, &(patch->replace_look->resource), (void **)&(exe_data)))
         {
             ventoy_cat_exe_file_data(wim_data, exe_len, exe_data);
             grub_free(exe_data);
         {
             ventoy_cat_exe_file_data(wim_data, exe_len, exe_data);
             grub_free(exe_data);