This commit is contained in:
longpanda 2020-07-17 22:50:44 +08:00
parent ef204263ad
commit 88dcceeabc

View 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 decompress_len = 0;
int total_decompress = 0; int total_decompress = 0;
@ -478,10 +478,15 @@ 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 (wimhdr->flags & FLAG_HEADER_COMPRESS_XPRESS)
if (decompress < 0) {
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,10 +507,15 @@ 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 (wimhdr->flags & FLAG_HEADER_COMPRESS_XPRESS)
if (decompress < 0) {
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;
total_decompress += decompress_len; total_decompress += 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); grub_file_close(file);
return 1; 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) if (rc)
{ {
grub_printf("failed to read meta data %d\n", 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", debug("find replace lookup entry_id:%ld raw_size:%u\n",
((long)patch->replace_look - (long)lookup) / sizeof(wim_lookup_entry), exe_len); ((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); ventoy_cat_exe_file_data(wim_data, exe_len, exe_data);
grub_free(exe_data); grub_free(exe_data);