Commit 17f9e2fd authored by longpanda's avatar longpanda
Browse files

1.0.80 release

parent 6b22a620
...@@ -486,9 +486,11 @@ void ventoy_data_default_control(data_control *data) ...@@ -486,9 +486,11 @@ void ventoy_data_default_control(data_control *data)
{ {
memset(data, 0, sizeof(data_control)); memset(data, 0, sizeof(data_control));
data->secondary_menu = 1;
data->filter_dot_underscore = 1; data->filter_dot_underscore = 1;
data->max_search_level = -1; data->max_search_level = -1;
data->menu_timeout = 0; data->menu_timeout = 0;
data->secondary_menu_timeout = 0;
strlcpy(data->default_kbd_layout, "QWERTY_USA"); strlcpy(data->default_kbd_layout, "QWERTY_USA");
strlcpy(data->help_text_language, "en_US"); strlcpy(data->help_text_language, "en_US");
...@@ -510,7 +512,9 @@ int ventoy_data_cmp_control(data_control *data1, data_control *data2) ...@@ -510,7 +512,9 @@ int ventoy_data_cmp_control(data_control *data1, data_control *data2)
data1->filter_vtoy != data2->filter_vtoy || data1->filter_vtoy != data2->filter_vtoy ||
data1->win11_bypass_check != data2->win11_bypass_check || data1->win11_bypass_check != data2->win11_bypass_check ||
data1->linux_remount != data2->linux_remount || data1->linux_remount != data2->linux_remount ||
data1->menu_timeout != data2->menu_timeout) data1->secondary_menu != data2->secondary_menu ||
data1->menu_timeout != data2->menu_timeout ||
data1->secondary_menu_timeout != data2->secondary_menu_timeout)
{ {
return 1; return 1;
} }
...@@ -555,7 +559,9 @@ int ventoy_data_save_control(data_control *data, const char *title, char *buf, i ...@@ -555,7 +559,9 @@ int ventoy_data_save_control(data_control *data, const char *title, char *buf, i
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_FILE_FLT_VTOY", filter_vtoy); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_FILE_FLT_VTOY", filter_vtoy);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_WIN11_BYPASS_CHECK", win11_bypass_check); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_WIN11_BYPASS_CHECK", win11_bypass_check);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_LINUX_REMOUNT", linux_remount); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_LINUX_REMOUNT", linux_remount);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_BOOT_MENU", secondary_menu);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_MENU_TIMEOUT", menu_timeout); VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_MENU_TIMEOUT", menu_timeout);
VTOY_JSON_FMT_CTRL_INT(L2, "VTOY_SECONDARY_TIMEOUT", secondary_menu_timeout);
VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_DEFAULT_KBD_LAYOUT", default_kbd_layout); VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_DEFAULT_KBD_LAYOUT", default_kbd_layout);
VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_HELP_TXT_LANGUAGE", help_text_language); VTOY_JSON_FMT_CTRL_STRN(L2, "VTOY_HELP_TXT_LANGUAGE", help_text_language);
...@@ -600,7 +606,9 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen) ...@@ -600,7 +606,9 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen)
VTOY_JSON_FMT_SINT("filter_vtoy", ctrl->filter_vtoy); VTOY_JSON_FMT_SINT("filter_vtoy", ctrl->filter_vtoy);
VTOY_JSON_FMT_SINT("win11_bypass_check", ctrl->win11_bypass_check); VTOY_JSON_FMT_SINT("win11_bypass_check", ctrl->win11_bypass_check);
VTOY_JSON_FMT_SINT("linux_remount", ctrl->linux_remount); VTOY_JSON_FMT_SINT("linux_remount", ctrl->linux_remount);
VTOY_JSON_FMT_SINT("secondary_menu", ctrl->secondary_menu);
VTOY_JSON_FMT_SINT("menu_timeout", ctrl->menu_timeout); VTOY_JSON_FMT_SINT("menu_timeout", ctrl->menu_timeout);
VTOY_JSON_FMT_SINT("secondary_menu_timeout", ctrl->secondary_menu_timeout);
VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout); VTOY_JSON_FMT_STRN("default_kbd_layout", ctrl->default_kbd_layout);
VTOY_JSON_FMT_STRN("help_text_language", ctrl->help_text_language); VTOY_JSON_FMT_STRN("help_text_language", ctrl->help_text_language);
...@@ -666,7 +674,9 @@ static int ventoy_api_save_control(struct mg_connection *conn, VTOY_JSON *json) ...@@ -666,7 +674,9 @@ static int ventoy_api_save_control(struct mg_connection *conn, VTOY_JSON *json)
VTOY_JSON_INT("filter_vtoy", ctrl->filter_vtoy); VTOY_JSON_INT("filter_vtoy", ctrl->filter_vtoy);
VTOY_JSON_INT("win11_bypass_check", ctrl->win11_bypass_check); VTOY_JSON_INT("win11_bypass_check", ctrl->win11_bypass_check);
VTOY_JSON_INT("linux_remount", ctrl->linux_remount); VTOY_JSON_INT("linux_remount", ctrl->linux_remount);
VTOY_JSON_INT("secondary_menu", ctrl->secondary_menu);
VTOY_JSON_INT("menu_timeout", ctrl->menu_timeout); VTOY_JSON_INT("menu_timeout", ctrl->menu_timeout);
VTOY_JSON_INT("secondary_menu_timeout", ctrl->secondary_menu_timeout);
VTOY_JSON_STR("default_image", ctrl->default_image); VTOY_JSON_STR("default_image", ctrl->default_image);
VTOY_JSON_STR("default_search_root", ctrl->default_search_root); VTOY_JSON_STR("default_search_root", ctrl->default_search_root);
...@@ -3808,6 +3818,10 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p) ...@@ -3808,6 +3818,10 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p)
{ {
CONTROL_PARSE_INT(child, data->linux_remount); CONTROL_PARSE_INT(child, data->linux_remount);
} }
else if (strcmp(child->pcName, "VTOY_SECONDARY_BOOT_MENU") == 0)
{
CONTROL_PARSE_INT(child, data->secondary_menu);
}
else if (strcmp(child->pcName, "VTOY_TREE_VIEW_MENU_STYLE") == 0) else if (strcmp(child->pcName, "VTOY_TREE_VIEW_MENU_STYLE") == 0)
{ {
CONTROL_PARSE_INT(child, data->treeview_style); CONTROL_PARSE_INT(child, data->treeview_style);
...@@ -3865,6 +3879,10 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p) ...@@ -3865,6 +3879,10 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p)
{ {
data->menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10); data->menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10);
} }
else if (strcmp(child->pcName, "VTOY_SECONDARY_TIMEOUT") == 0)
{
data->secondary_menu_timeout = (int)strtol(child->unData.pcStrVal, NULL, 10);
}
else if (strcmp(child->pcName, "VTOY_VHD_NO_WARNING") == 0) else if (strcmp(child->pcName, "VTOY_VHD_NO_WARNING") == 0)
{ {
CONTROL_PARSE_INT(child, data->vhd_no_warning); CONTROL_PARSE_INT(child, data->vhd_no_warning);
......
...@@ -58,7 +58,9 @@ typedef struct data_control ...@@ -58,7 +58,9 @@ typedef struct data_control
int filter_vtoy; int filter_vtoy;
int win11_bypass_check; int win11_bypass_check;
int menu_timeout; int menu_timeout;
int secondary_menu_timeout;
int linux_remount; int linux_remount;
int secondary_menu;
char default_search_root[MAX_PATH]; char default_search_root[MAX_PATH];
char default_image[MAX_PATH]; char default_image[MAX_PATH];
char default_kbd_layout[32]; char default_kbd_layout[32];
......
20220430 13:06:42 20220921 18:42:35
\ No newline at end of file \ No newline at end of file
...@@ -723,7 +723,7 @@ ...@@ -723,7 +723,7 @@
<footer class="main-footer"> <footer class="main-footer">
<div class="pull-right hidden-xs"> <div class="pull-right hidden-xs">
<b id="plugson_build_date">20220430 13:06:42</b> <b id="plugson_build_date">20220921 18:42:35</b>
</div> </div>
<strong><a href="https://www.ventoy.net" target="_blank">https://www.ventoy.net</a></strong> <strong><a href="https://www.ventoy.net" target="_blank">https://www.ventoy.net</a></strong>
</footer> </footer>
......
...@@ -390,6 +390,85 @@ ...@@ -390,6 +390,85 @@
</div><!-- /.box --> </div><!-- /.box -->
<div class="box box-primary box-solid">
<div class="box-header with-border">
<h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SECONDARY_BOOT_MENU
<span id="id_span_desc_cn"> —— 二级启动菜单显示开关</span></h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div><!-- /.box-tools -->
</div><!-- /.box-header -->
<div class="box-body no-padding">
<table class="table table-bordered no-padding">
<tr style="font-weight:bold;">
<td class="td_ctrl_col" id="td_title_setting">选项设置</td>
<td>
<label class="radio-inline">
<input type="radio" id="id_ctrl_secondary_radio0" name="id_ctrl_secondary_radio" data-type="0" value="0"> <span style="font-weight:bold;">0</span>
</label>&nbsp;&nbsp;&nbsp;&nbsp;
<label class="radio-inline">
<input type="radio" id="id_ctrl_secondary_radio1" name="id_ctrl_secondary_radio" data-type="1" value="1"> <span style="font-weight:bold;">1</span>
</label>
</td>
</tr>
<tr id="tr_title_desc_cn">
<td class="td_ctrl_col" id="td_title_desc">选项说明</td>
<td>二级启动菜单控制开关
<code style="font-weight: bold;">0</code> 不显示 &nbsp;&nbsp;
<code style="font-weight: bold;">1</code> 显示
</td>
</tr>
<tr id="tr_title_desc_en">
<td class="td_ctrl_col" id="td_title_desc">Option Description</td>
<td>
Secondary boot menu display option
<code style="font-weight: bold;">0</code> Don't display &nbsp;&nbsp;&nbsp;
<code style="font-weight: bold;">1</code> Display
</td>
</tr>
</table>
</div><!-- /.box-body -->
</div><!-- /.box -->
<div class="box box-primary box-solid">
<div class="box-header with-border">
<h3 class="box-title" style="font-size: 14px;font-weight: bold;">VTOY_SECONDARY_TIMEOUT
<span id="id_span_desc_cn"> —— 二级启动菜单倒计时</span></h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div><!-- /.box-tools -->
</div><!-- /.box-header -->
<div class="box-body no-padding">
<table class="table table-bordered no-padding">
<tr style="font-weight:bold;">
<td class="td_ctrl_col" id="td_title_setting">选项设置</td>
<td>
<div class="col-sm-9" style="padding-left:0px;">
<input type="text" class="form-control" id="id_ctrl_text_secondary_timeout" name="name_ctrl_text_secondary_timeout"/>
</div>
</td>
</tr>
<tr id="tr_title_desc_cn">
<td class="td_ctrl_col">选项说明</td>
<td>
二级菜单倒计时(秒)。只有当 <code>VTOY_SECONDARY_BOOT_MENU</code> 设置为1时才有效。<br/>
默认不设置,设置之后,比如设置为10,则在倒计时10秒之后,会自动选择第一项,即:<code>Boot in normal mode</code> <br/>
在倒计时的过程中按任意键会停止倒计时,等待用户操作。
</td>
</tr>
<tr id="tr_title_desc_en">
<td class="td_ctrl_col">Option Description</td>
<td>
Timeout seconds for the secondary boot menu. Only take effect when <code>VTOY_SECONDARY_BOOT_MENU</code> is 1.<br/>
By default no timeout is set. When you set it to 10 for example, the first entry (<code>Boot in normal mode</code>) will be selected an run after 10 seconds.
</td>
</tr>
</table>
</div><!-- /.box-body -->
</div><!-- /.box -->
<div class="box box-primary box-solid"> <div class="box box-primary box-solid">
...@@ -906,7 +985,7 @@ ...@@ -906,7 +985,7 @@
</div><!-- /.box-body --> </div><!-- /.box-body -->
</div><!-- /.box --> </div><!-- /.box -->
</div> </div>
...@@ -935,8 +1014,10 @@ ...@@ -935,8 +1014,10 @@
data.win11_bypass_check = parseInt($('input:radio[name=id_ctrl_bypass_win11_radio]:checked').val()); data.win11_bypass_check = parseInt($('input:radio[name=id_ctrl_bypass_win11_radio]:checked').val());
data.linux_remount = parseInt($('input:radio[name=id_ctrl_linux_remount_radio]:checked').val()); data.linux_remount = parseInt($('input:radio[name=id_ctrl_linux_remount_radio]:checked').val());
data.secondary_menu = parseInt($('input:radio[name=id_ctrl_secondary_radio]:checked').val());
data.default_search_root = $('input:text[id=id_ctrl_text_search_root]').val(); data.default_search_root = $('input:text[id=id_ctrl_text_search_root]').val();
data.menu_timeout = parseInt($('input:text[id=id_ctrl_text_timeout]').val()); data.menu_timeout = parseInt($('input:text[id=id_ctrl_text_timeout]').val());
data.secondary_menu_timeout = parseInt($('input:text[id=id_ctrl_text_secondary_timeout]').val());
data.default_image = $('input:text[id=id_ctrl_text_default_img]').val(); data.default_image = $('input:text[id=id_ctrl_text_default_img]').val();
level = $('select[id=id_ctrl_sel_max_depth').val(); level = $('select[id=id_ctrl_sel_max_depth').val();
...@@ -968,6 +1049,7 @@ ...@@ -968,6 +1049,7 @@
//VTOY_WIN11_BYPASS_CHECK //VTOY_WIN11_BYPASS_CHECK
$('input:radio[name=id_ctrl_bypass_win11_radio]')[data.win11_bypass_check].checked = true; $('input:radio[name=id_ctrl_bypass_win11_radio]')[data.win11_bypass_check].checked = true;
$('input:radio[name=id_ctrl_linux_remount_radio]')[data.linux_remount].checked = true; $('input:radio[name=id_ctrl_linux_remount_radio]')[data.linux_remount].checked = true;
$('input:radio[name=id_ctrl_secondary_radio]')[data.secondary_menu].checked = true;
//VTOY_DEFAULT_SEARCH_ROOT //VTOY_DEFAULT_SEARCH_ROOT
$('input:text[id=id_ctrl_text_search_root]').val(data.default_search_root); $('input:text[id=id_ctrl_text_search_root]').val(data.default_search_root);
...@@ -986,6 +1068,9 @@ ...@@ -986,6 +1068,9 @@
//VTOY_MENU_TIMEOUT //VTOY_MENU_TIMEOUT
$('input:text[id=id_ctrl_text_timeout]').val(data.menu_timeout); $('input:text[id=id_ctrl_text_timeout]').val(data.menu_timeout);
//VTOY_SECONDARY_TIMEOUT
$('input:text[id=id_ctrl_text_secondary_timeout]').val(data.secondary_menu_timeout);
//VTOY_DEFAULT_IMAGE //VTOY_DEFAULT_IMAGE
...@@ -1070,8 +1155,10 @@ ...@@ -1070,8 +1155,10 @@
index: current_tab_index, index: current_tab_index,
win11_bypass_check: data.win11_bypass_check, win11_bypass_check: data.win11_bypass_check,
linux_remount:data.linux_remount, linux_remount:data.linux_remount,
secondary_menu:data.secondary_menu,
default_search_root: data.default_search_root, default_search_root: data.default_search_root,
menu_timeout: data.menu_timeout, menu_timeout: data.menu_timeout,
secondary_menu_timeout: data.secondary_menu_timeout,
default_image: data.default_image, default_image: data.default_image,
max_search_level: data.max_search_level, max_search_level: data.max_search_level,
default_kbd_layout: data.default_kbd_layout, default_kbd_layout: data.default_kbd_layout,
...@@ -1200,6 +1287,15 @@ ...@@ -1200,6 +1287,15 @@
$('input:text[id=id_ctrl_text_timeout]').val(m_data_control[current_tab_index].menu_timeout); $('input:text[id=id_ctrl_text_timeout]').val(m_data_control[current_tab_index].menu_timeout);
} }
}); });
$('input[id=id_ctrl_text_secondary_timeout]').change(function() {
var value = $('input:text[id=id_ctrl_text_secondary_timeout]').val();
if (/^[0-9][0-9]*$/.test(value)) {
VtoySaveCurrentPage();
} else {
Message.error(g_vtoy_cur_language.STR_INVALID_TIMEOUT);
$('input:text[id=id_ctrl_text_secondary_timeout]').val(m_data_control[current_tab_index].secondary_menu_timeout);
}
});
$('#id_tab_control a[href="#tab_0"]').click(OnClickMultiModeTab); $('#id_tab_control a[href="#tab_0"]').click(OnClickMultiModeTab);
$('#id_tab_control a[href="#tab_1"]').click(OnClickMultiModeTab); $('#id_tab_control a[href="#tab_1"]').click(OnClickMultiModeTab);
......
...@@ -18,7 +18,7 @@ You can also browse ISO/WIM/IMG/VHD(x)/EFI files in local disk and boot them.<br ...@@ -18,7 +18,7 @@ You can also browse ISO/WIM/IMG/VHD(x)/EFI files in local disk and boot them.<br
x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, ARM64 UEFI and MIPS64EL UEFI are supported in the same way.<br/> x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, ARM64 UEFI and MIPS64EL UEFI are supported in the same way.<br/>
Both MBR and GPT partition style are supported in the same way.<br/> Both MBR and GPT partition style are supported in the same way.<br/>
Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/> Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
940+ ISO files are tested (<a href="https://www.ventoy.net/en/isolist.html">List</a>). 90%+ distros in <a href="https://distrowatch.com/">distrowatch.com</a> supported (<a href="https://www.ventoy.net/en/distrowatch.html">Details</a>). <br/> 1000+ ISO files are tested (<a href="https://www.ventoy.net/en/isolist.html">List</a>). 90%+ distros in <a href="https://distrowatch.com/">distrowatch.com</a> supported (<a href="https://www.ventoy.net/en/distrowatch.html">Details</a>). <br/>
<br/>Official Website: <a href=https://www.ventoy.net>https://www.ventoy.net</a> <br/>Official Website: <a href=https://www.ventoy.net>https://www.ventoy.net</a>
</h4> </h4>
...@@ -27,7 +27,7 @@ Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/> ...@@ -27,7 +27,7 @@ Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, WinPE Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, WinPE
**Linux** **Linux**
Debian, Ubuntu, CentOS(6/7/8/9), RHEL(6/7/8/9), Deepin, Fedora, EuroLinux(6/7/8/9), Rocky Linux, AlmaLinux, openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ...... Debian, Ubuntu, CentOS(6/7/8/9), RHEL(6/7/8/9), Deepin, Fedora, EuroLinux(6/7/8/9), Rocky Linux, AlmaLinux, openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ChallengerOS, Nobara, Holo, ......
**Unix** **Unix**
DragonFly FreeBSD pfSense GhostBSD FreeNAS TrueNAS XigmaNAS FuryBSD OPNsense HardenedBSD MidnightBSD ClonOS EmergencyBootKit DragonFly FreeBSD pfSense GhostBSD FreeNAS TrueNAS XigmaNAS FuryBSD OPNsense HardenedBSD MidnightBSD ClonOS EmergencyBootKit
...@@ -70,7 +70,7 @@ A GUI Ventoy plugin configurator. [VentoyPlugson](https://www.ventoy.net/en/plug ...@@ -70,7 +70,7 @@ A GUI Ventoy plugin configurator. [VentoyPlugson](https://www.ventoy.net/en/plug
* FAT32/exFAT/NTFS/UDF/XFS/Ext2(3)(4) supported for main partition * FAT32/exFAT/NTFS/UDF/XFS/Ext2(3)(4) supported for main partition
* ISO files larger than 4GB supported * ISO files larger than 4GB supported
* Native boot menu style for Legacy & UEFI * Native boot menu style for Legacy & UEFI
* Most types of OS supported, 940+ iso files tested * Most types of OS supported, 1000+ iso files tested
* Linux vDisk boot supported * Linux vDisk boot supported
* Not only boot but also complete installation process * Not only boot but also complete installation process
* Menu dynamically switchable between List/TreeView mode * Menu dynamically switchable between List/TreeView mode
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "wimboot.h" #include "wimboot.h"
#include "vdisk.h" #include "vdisk.h"
#include "lzx.h" #include "lzx.h"
#include "xca.h"
#include "wim.h" #include "wim.h"
/** WIM chunk buffer */ /** WIM chunk buffer */
...@@ -180,6 +181,8 @@ static int wim_chunk ( struct vdisk_file *file, struct wim_header *header, ...@@ -180,6 +181,8 @@ static int wim_chunk ( struct vdisk_file *file, struct wim_header *header,
/* Identify decompressor */ /* Identify decompressor */
if ( header->flags & WIM_HDR_LZX ) { if ( header->flags & WIM_HDR_LZX ) {
decompress = lzx_decompress; decompress = lzx_decompress;
} else if (header->flags & WIM_HDR_XPRESS) {
decompress = xca_decompress;
} else { } else {
DBG ( "Can't handle unknown compression scheme %#08x " DBG ( "Can't handle unknown compression scheme %#08x "
"for %#llx chunk %d at [%#llx+%#llx)\n", "for %#llx chunk %d at [%#llx+%#llx)\n",
...@@ -447,8 +450,10 @@ int wim_path ( struct vdisk_file *file, struct wim_header *header, ...@@ -447,8 +450,10 @@ int wim_path ( struct vdisk_file *file, struct wim_header *header,
return rc; return rc;
/* Get root directory offset */ /* Get root directory offset */
direntry->subdir = ( ( security.len + sizeof ( uint64_t ) - 1 ) & if (security.len > 0)
~( sizeof ( uint64_t ) - 1 ) ); direntry->subdir = ( ( security.len + sizeof ( uint64_t ) - 1 ) & ~( sizeof ( uint64_t ) - 1 ) );
else
direntry->subdir = security.len + 8;
/* Find directory entry */ /* Find directory entry */
name = memcpy ( path_copy, path, sizeof ( path_copy ) ); name = memcpy ( path_copy, path, sizeof ( path_copy ) );
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
*/ */
ssize_t xca_decompress ( const void *data, size_t len, void *buf ) { ssize_t xca_decompress ( const void *data, size_t len, void *buf ) {
const void *src = data; const void *src = data;
const void *end = ( src + len ); const void *end = ( uint8_t * ) src + len;
uint8_t *out = buf; uint8_t *out = buf;
size_t out_len = 0; size_t out_len = 0;
size_t out_len_threshold = 0; size_t out_len_threshold = 0;
...@@ -67,11 +67,9 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) { ...@@ -67,11 +67,9 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) {
/* Construct symbol lengths */ /* Construct symbol lengths */
lengths = src; lengths = src;
src += sizeof ( *lengths ); src = ( uint8_t * ) src + sizeof ( *lengths );
if ( src > end ) { if ( src > end ) {
DBG ( "XCA too short to hold Huffman lengths " DBG ( "XCA too short to hold Huffman lengths table.\n");
"table at input offset %#zx\n",
( src - data ) );
return -1; return -1;
} }
for ( raw = 0 ; raw < XCA_CODES ; raw++ ) for ( raw = 0 ; raw < XCA_CODES ; raw++ )
...@@ -113,7 +111,7 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) { ...@@ -113,7 +111,7 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) {
out_len++; out_len++;
} else if ( ( raw == XCA_END_MARKER ) && } else if ( ( raw == XCA_END_MARKER ) &&
( src >= ( end - 1 ) ) ) { ( (uint8_t *) src >= ( ( uint8_t * ) end - 1 ) ) ) {
/* End marker symbol */ /* End marker symbol */
return out_len; return out_len;
...@@ -157,6 +155,5 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) { ...@@ -157,6 +155,5 @@ ssize_t xca_decompress ( const void *data, size_t len, void *buf ) {
} }
} }
DBG ( "XCA input overrun at output length %#zx\n", out_len ); return out_len;
return -1;
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment