mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-11-11 13:10:38 +00:00
Support to F2 browse Ventoy partition self.
This commit is contained in:
parent
62dc0033ad
commit
96fdd594f0
@ -149,7 +149,7 @@ static int ventoy_browser_iterate_partition(struct grub_disk *disk, const grub_p
|
|||||||
|
|
||||||
(void)data;
|
(void)data;
|
||||||
|
|
||||||
if (partition->number < 2 && g_vtoy_dev && grub_strcmp(disk->name, g_vtoy_dev) == 0)
|
if (partition->number == 1 && g_vtoy_dev && grub_strcmp(disk->name, g_vtoy_dev) == 0)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -423,6 +423,43 @@ static int ventoy_browser_iterate_dir(const char *filename, const struct grub_di
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static grub_err_t ventoy_browser_iso_part(void)
|
||||||
|
{
|
||||||
|
char cfgfile[64];
|
||||||
|
char *buffer = NULL;
|
||||||
|
int pos = 0;
|
||||||
|
int buflen = 0;
|
||||||
|
int cfglen = 0;
|
||||||
|
|
||||||
|
cfglen = g_tree_script_pos - g_tree_script_pre;
|
||||||
|
buflen = cfglen + 512;
|
||||||
|
buffer = grub_malloc(buflen);
|
||||||
|
if (!buffer)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_tree_view_menu_style == 0)
|
||||||
|
{
|
||||||
|
pos = grub_snprintf(buffer, buflen, "menuentry \"%-10s [../]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||||
|
" echo 'return ...' \n}\n", "<--");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pos = grub_snprintf(buffer, buflen, "menuentry \"[../]\" --class=\"vtoyret\" VTOY_RET {\n "
|
||||||
|
" echo 'return ...' \n}\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_memcpy(buffer + pos, g_tree_script_buf + g_tree_script_pre, cfglen);
|
||||||
|
pos += cfglen;
|
||||||
|
|
||||||
|
grub_snprintf(cfgfile, sizeof(cfgfile), "configfile mem:0x%lx:size:%d", (ulong)buffer, pos);
|
||||||
|
grub_script_execute_sourcecode(cfgfile);
|
||||||
|
|
||||||
|
grub_free(buffer);
|
||||||
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_browser_dir(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_browser_dir(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -435,6 +472,15 @@ grub_err_t ventoy_cmd_browser_dir(grub_extcmd_context_t ctxt, int argc, char **a
|
|||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
|
|
||||||
|
if (args[2][0] == '/' && args[2][1] == 0)
|
||||||
|
{
|
||||||
|
grub_snprintf(cfgfile, sizeof(cfgfile), "(%s)", args[0]);
|
||||||
|
if (grub_strcmp(cfgfile, g_iso_path) == 0)
|
||||||
|
{
|
||||||
|
return ventoy_browser_iso_part();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!ventoy_browser_mbuf_alloc(&mbuf))
|
if (!ventoy_browser_mbuf_alloc(&mbuf))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -117,8 +117,9 @@ ventoy_gpt_info *g_ventoy_part_info = NULL;
|
|||||||
grub_uint64_t g_ventoy_disk_size = 0;
|
grub_uint64_t g_ventoy_disk_size = 0;
|
||||||
grub_uint64_t g_ventoy_disk_part_size[2];
|
grub_uint64_t g_ventoy_disk_part_size[2];
|
||||||
|
|
||||||
static char *g_tree_script_buf = NULL;
|
char *g_tree_script_buf = NULL;
|
||||||
static int g_tree_script_pos = 0;
|
int g_tree_script_pos = 0;
|
||||||
|
int g_tree_script_pre = 0;
|
||||||
|
|
||||||
static char *g_list_script_buf = NULL;
|
static char *g_list_script_buf = NULL;
|
||||||
static int g_list_script_pos = 0;
|
static int g_list_script_pos = 0;
|
||||||
@ -2294,6 +2295,8 @@ static int ventoy_dynamic_tree_menu(img_iterator_node *node)
|
|||||||
"}\n", "return");
|
"}\n", "return");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_tree_script_pre = g_tree_script_pos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1187,6 +1187,9 @@ typedef struct browser_node
|
|||||||
struct browser_node *next;
|
struct browser_node *next;
|
||||||
}browser_node;
|
}browser_node;
|
||||||
|
|
||||||
|
extern char *g_tree_script_buf;
|
||||||
|
extern int g_tree_script_pos;
|
||||||
|
extern int g_tree_script_pre;
|
||||||
extern int g_tree_view_menu_style;
|
extern int g_tree_view_menu_style;
|
||||||
extern int g_sort_case_sensitive;
|
extern int g_sort_case_sensitive;
|
||||||
extern int g_wimboot_enable;
|
extern int g_wimboot_enable;
|
||||||
|
Loading…
Reference in New Issue
Block a user